Kaffe-1.0.b1-rt の問題点について 慶應義塾大学 SFC研究所 喜多山卓郎 Kaffe-1.0.b1 JDK1.1 AWTサポート ThreadInterface, LockInterface, GarbageCollectorInterface Kaffe-1.0.b1の構造 -rtの構造 java.lang/io/net/util... java.awt.packages Code-Verifier Class Magagement Execution-Engine (JIT, Interpreter) System Call subsystem RT-Thread Thread subsystem Subsystem (K/U) (RT-Mach) Native core library Heap(GC) subsystem Class Libraries Virtual Machine Native lfc subsystem (JNI, KNI) Native AWT library Native Libraries Kaffe-1.0.b1-rt Real-Time Java Threads Deadline Handler Real-Time Java VM Kernel Threads RT-Mach RT-Scheduler, RT-Sync 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; 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; 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; Application Interface - Real-Time Thread Java thread class MyThread extends Thread{ … public void run(){…} … } … MyThread th = MyThread(..); th.start(); Real-Time Java thread class MyRtThread extends RtThread{ … public void run(){…} … } … MyRtThread rth = MyRtThread(pri, start, period, deadline); rth.start(); 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”); Library Klasses.jar • classes.zip の置き換え pizza.jar • コンパイラ Problems in Thread Support いい加減 !! “Deprecated()” • stop(), suspend(), resume() Deadline Handler の中で resume() できな い!! Problems and Overhead JITのオーバヘッド Interpreterのオーバヘッド • Interpreterにはバグがある。javacが動かない。 ‘System.out.Println(HelloWorld)’ ダイナミックJavaステップ メソッド数 • シンクロナイズトメソッド 実行時間 • JIT 一回目:27.3(ms) • Intrp 一回目:18.3(ms) 615 29 3 二回目以降:2.1(ms) 二回目以降:4.3(ms) ロック • JIT • Intrp 一回目:322回 一回目:235回 二回目以降:7回 二回目以降:7回 ‘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) • Intrp 一回目:12.4(ms) 二回目以降:2.0(ms) 二回目以降:4.2(ms) ちなみに、 ちなみに、printf(“HelloWorld\n”); • 一回目: 250 μS 二回目以降: 159μS new RtThread vs.new Thread RtThread - Thread - 実行時間 ダイナミックJavaステップ - 375、メソッド -50 (1回目) ダイナミックJavaステップ - 544、メソッド -62 (2回目) ダイナミックJavaステップ - 366、メソッド -49 (1回目) ダイナミックJavaステップ - 535、メソッド -61 (2回目) • new RtThread() – JIT 一回目:27.4(ms) – Intrp 一回目:13.8(ms) • new Thread() – JIT 一回目:25.3(ms) – Intrp 一回目:13.0(ms) 二回目以降:0.9(ms) 二回目以降:3.3(ms) 二回目以降:0.9(ms) 二回目以降:3.2(ms) 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) Threadの起動 RtThread Thread 実行時間 ダイナミックJavaステップ - 5、メソッド -3 ダイナミックJavaステップ - 3、メソッド -2 • new RtThread() – JIT 一回目:3.9(ms) – Intrp 一回目:2.6(ms) • new Thread() – JIT 一回目:3.0(ms) – Intrp 一回目:2.1 (ms) 二回目以降:1.8(ms) 二回目以降:1.9(ms) 二回目以降:1.8(ms) 二回目以降:1.9(ms) Threadの起動(Cont’d) ロック • new RtThread() – JIT 一回目:31回 – Intrp 一回目:19回 • new Thread() – JIT 一回目:17回 – Intrp 一回目:11回 ロックを除いた実行時間 • new RtThread() – JIT 一回目:3.1(ms) – Intrp 一回目:2.3(ms) • new Thread() – JIT 一回目:2.7(ms) – Intrp 一回目:1.9(ms) 二回目以降:5回 二回目以降:5回 二回目以降:3回 二回目以降:4回 二回目以降:1.8(ms) 二回目以降:1.8(ms) 二回目以降:1.7(ms) 二回目以降:1.7(ms) ちなみに rt_thread_create • 一回目 – 233μS • 二回目以降 – 129μS まとめ 時間属性記述方法は? インプリ上の問題 - Deprecated() JITの影響 Class Loadの影響 Cacheなどによる影響 GC
© Copyright 2024 ExpyDoc