1 / 20

Kaffe-1.0.b1-rt の問題点について

Kaffe-1.0.b1-rt の問題点について. 慶應義塾大学 SFC 研究所 喜多山卓郎. Kaffe-1.0.b1. JDK1.1 AWT サポート ThreadInterface, LockInterface, GarbageCollectorInterface. -rt の構造. Class Libraries. java.lang/io/net/util. java.awt.packages. Code-Verifier. Class Magagement. Execution-Engine (JIT, Interpreter).

rico
Download Presentation

Kaffe-1.0.b1-rt の問題点について

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Kaffe-1.0.b1-rt の問題点について 慶應義塾大学 SFC研究所 喜多山卓郎

  2. Kaffe-1.0.b1 • JDK1.1 • AWTサポート • ThreadInterface, LockInterface, GarbageCollectorInterface

  3. -rtの構造 Class Libraries java.lang/io/net/util... java.awt.packages Code-Verifier Class Magagement Execution-Engine (JIT, Interpreter) Virtual Machine System Call subsystem Thread subsystem (K/U) Heap(GC) subsystem Native lfc subsystem (JNI, KNI) RT-Thread Subsystem (RT-Mach) Native Libraries Native core library Native AWT library Kaffe-1.0.b1の構造

  4. Kaffe-1.0.b1-rt Real-Time Java Threads Deadline Handler Real-Time Java VM Kernel Threads RT-Scheduler, RT-Sync RT-Mach

  5. Thread Interface typedef struct ThreadInterface { void (*init)(int nativestacksize); void (*createFirst)(Hjava_lang_Thread*); void (*create)(Hjava_lang_Thread*, void*); void (*sleep)(jlong); void (*yield)(void); void (*setPriority)(Hjava_lang_Thread*, jint); void (*stop)(Hjava_lang_Thread*); void (*exit)(void); bool (*alive)(Hjava_lang_Thread*); jint (*frames)(Hjava_lang_Thread*); void (*finalize)(Hjava_lang_Thread*); Hjava_lang_Thread* (*currentJava)(void); void* (*currentNative)(void); void (*GcWalkThreads)(void); void (*GcWalkThread)(Hjava_lang_Thread*); void* (*nextFrame)(void*); } ThreadInterface;

  6. Thread Interface(Cont’d) • Real-Time 拡張部分 typedef struct ThreadInterface { : : void (*rtCreate)(Hkaffe_rt_RtThread*, void*); void (*setRtAttr)(Hkaffe_rt_RtThread*); bool (*isPeriodic)(Hkaffe_rt_RtThread*); void (*handlerCreate)(Hkaffe_rt_RtHandler*, void*); void (*handlerWait)(Hkaffe_rt_RtHandler*, Hkaffe_rt_RtThread**, char**); } ThreadInterface;

  7. Lock Interface typedef struct LockInterface { void (*init)(iLock*); void (*lock)(iLock*); void (*unlock)(iLock*); void (*wait)(iLock*, jlong); void (*signal)(iLock*); void (*broadcast)(iLock*); void (*spinon)(void*); void (*spinoff)(void*); } LockInterface;

  8. Java thread Real-Time Java thread class MyThread extends Thread{ … public void run(){…} … } … MyThread th = MyThread(..); th.start(); class MyRtThread extends RtThread{ … public void run(){…} … } … MyRtThread rth = MyRtThread(pri, start, period, deadline); rth.start(); Application Interface - Real-Time Thread

  9. Application Interface - Deadline Handler class MyHandler extends RtHandler{ public void Handler(RtThread Th){ //deadline detected //some recovery method } } … MyHandler handler = new MyHandler(); … rth.setHandler(handler, “Handler”);

  10. Library • Klasses.jar • classes.zip の置き換え • pizza.jar • コンパイラ

  11. Problems in Thread Support • いい加減 !! • “Deprecated()” • stop(), suspend(), resume() • Deadline Handler の中で resume() できない!!

  12. Problems and Overhead • JITのオーバヘッド • Interpreterのオーバヘッド • Interpreterにはバグがある。javacが動かない。

  13. ‘System.out.Println(HelloWorld)’ • ダイナミックJavaステップ 615 • メソッド数 29 • シンクロナイズトメソッド 3 • 実行時間 • JIT 一回目:27.3(ms) 二回目以降:2.1(ms) • Intrp 一回目:18.3(ms) 二回目以降:4.3(ms) • ロック • JIT 一回目:322回 二回目以降:7回 • Intrp 一回目:235回 二回目以降:7回

  14. ‘System.out.Println(HelloWorld)’ (Cont’d) • rt_mutex_locak() のコスト 25μS • println中のrt_mutex_lock()のコスト(1回目) • JIT 8 ms • Intrp 5.9 ms • ロックを除いた実行時間 • JIT 一回目:19.3(ms) 二回目以降:2.0(ms) • Intrp 一回目:12.4(ms) 二回目以降:4.2(ms) • ちなみに、 • ちなみに、printf(“HelloWorld\n”); • 一回目: 250 μS 二回目以降: 159μS

  15. new RtThread vs.new Thread • RtThread - ダイナミックJavaステップ - 375、メソッド -50 (1回目)ダイナミックJavaステップ - 544、メソッド -62 (2回目) • Thread - ダイナミックJavaステップ - 366、メソッド -49 (1回目)ダイナミックJavaステップ - 535、メソッド -61 (2回目) • 実行時間 • new RtThread() • JIT 一回目:27.4(ms) 二回目以降:0.9(ms) • Intrp 一回目:13.8(ms) 二回目以降:3.3(ms) • new Thread() • JIT 一回目:25.3(ms) 二回目以降:0.9(ms) • Intrp 一回目:13.0(ms) 二回目以降:3.2(ms)

  16. new RtThread vs.new Thread • ロック(synchronized メソッド 5) • new RtThread() • JIT 一回目:350回 二回目以降:16回 • Intrp 一回目:246回 二回目以降:16回 • new Thread() • JIT 一回目:333回 二回目以降:16回 • Intrp 一回目:234回 二回目以降:16回 • ロックを除いた実行時間 • new RtThread() • JIT 一回目:19.3(ms) 二回目以降:0.5(ms) • Intrp 一回目: 8.2(ms) 二回目以降:3.0(ms) • new Thread() • JIT 一回目:17.5(ms) 二回目以降:0.5(ms) • Intrp 一回目: 7.4(ms) 二回目以降:2.9(ms)

  17. Threadの起動 • RtThread - ダイナミックJavaステップ - 5、メソッド -3 • Thread - ダイナミックJavaステップ - 3、メソッド -2 • 実行時間 • new RtThread() • JIT 一回目:3.9(ms) 二回目以降:1.8(ms) • Intrp 一回目:2.6(ms) 二回目以降:1.9(ms) • new Thread() • JIT 一回目:3.0(ms) 二回目以降:1.8(ms) • Intrp 一回目:2.1 (ms) 二回目以降:1.9(ms)

  18. Threadの起動(Cont’d) • ロック • new RtThread() • JIT 一回目:31回 二回目以降:5回 • Intrp 一回目:19回 二回目以降:5回 • new Thread() • JIT 一回目:17回 二回目以降:3回 • Intrp 一回目:11回 二回目以降:4回 • ロックを除いた実行時間 • new RtThread() • JIT 一回目:3.1(ms) 二回目以降:1.8(ms) • Intrp 一回目:2.3(ms) 二回目以降:1.8(ms) • new Thread() • JIT 一回目:2.7(ms) 二回目以降:1.7(ms) • Intrp 一回目:1.9(ms) 二回目以降:1.7(ms)

  19. ちなみに • rt_thread_create • 一回目 • 233μS • 二回目以降 • 129μS

  20. まとめ • 時間属性記述方法は? • インプリ上の問題 - Deprecated() • JITの影響 • Class Loadの影響 • Cacheなどによる影響 • GC

More Related