Transcript PPT
Java Virtual Machine 高速化のた めのbyte code 解析 An analysis of byte code to improve the performance of Java Virtual Machine 5401812 鈴木タカハル 谷研究室 Feb, 2003 目次 • • • • • • 研究の目的、概要 調査概要 調査方法 結果 考察 今後の課題 JVM高速化のためのbytecode解析 2 JVM • 特定の実装を指さない仮想マシン JVM高速化のためのbytecode解析 3 研究の目的、概要 動機付け • Write Once, Run Anywhere ™ • JVMはインタプリタ • 実行速度が遅い • 高速化したい JVM高速化のためのbytecode解析 4 研究の目的、概要 研究の目的 • JVM の高速化 高速化を実現させる為に、 - bytecode の解析 この結果から、効果的な高速化の可能性を提示 JVM高速化のためのbytecode解析 5 研究の目的、概要 調査の概要 • bytecode の頻度を取る • 連続する bytecode の頻度を取る JVM高速化のためのbytecode解析 6 調査概要 どうしたら速くなるのか プログラム:ABCA A A B B C C C A 元データ A Bを高速化 JVM高速化のためのbytecode解析 Aを高速化 7 調査概要 命令Aを見つける為に • bytecode に含まれる命令の頻度を取る • 頻度の低いものより最適 • 頻度の高いものを高速化する – 高速化: • 命令をアセンブラで書く • CPUのキャッシュ率を上げる JVM高速化のためのbytecode解析 8 調査概要 命令ごとの実行速度の偏り A B A B C C C A A JVM高速化のためのbytecode解析 9 調査概要 連続する命令に対して プログラム:A D B E C F A D AD AD BE BE CF CF CF AD AD JVM高速化のためのbytecode解析 10 調査概要 連続する命令に対して • どのプログラムでも出現する頻度の高い 命令の組み合わせを探す JVM高速化のためのbytecode解析 11 調査方法 出現頻度に関する調査 • bytecode に含まれる命令の頻度を取る • 80%、90%被覆を取る – 何個の命令で、プログラムの80%, 90% をカ バー出来るか JVM高速化のためのbytecode解析 12 調査方法 連続性に関する調査 • 連続する命令の頻度を取る – 2連続、5連続 • 10連続で頻出した命令を、再現出来るか実験 – 命令の予測など 命令 : A B C D E F G H I J A B C D E F G H I J A B C D E F G H I J JVM高速化のためのbytecode解析 13 調査方法 MIPSとの比較調査 • 連続性に関して、bytecode と MIPS とで差 異を取る • ls • httpd • kaffe JVM高速化のためのbytecode解析 14 調査方法 調査対象 • 対象: – JDK 1.4.1 パッケージ • lang, io, net, util, awt • JDKに含まれる全ての class file – – – – – eclipse 2.0.2 Jetty 4.2.3 OpenOffice 1.0.2 yFiles2.0.1 robocode 1.0.6 :開発環境 :WEBサーバ :Word, Excel, ppt :クラスライブラリ :ロボコード JVM高速化のためのbytecode解析 15 調査方法 システム • • • • • • • class file から bytecode を抜き出す bytecode から 出現頻度を得る bytecode の連続性を取る bytecode を視覚化する class file から constant pool を抜き出す データを統合し、統計を取る 以上の操作を自動で行う JVM高速化のためのbytecode解析 16 出現頻度の結果 : JDK 1.4.1 JVM高速化のためのbytecode解析 17 JVM高速化のためのbytecode解析 18 JVM高速化のためのbytecode解析 19 考察 出現頻度に関する考察 • パッケージ、アプリケーションの差異にか かわらず、上位の命令は同一 JVM高速化のためのbytecode解析 20 8割被覆 JVM高速化のためのbytecode解析 Je tty yF i le s ro bo co de ec lip se O pe nO ffi ce 9割被覆 JD K % 40 35 30 25 20 15 10 5 0 jav a.i o jav a.u t il jav a.n et jav a.a wt jav a.l an g 80%、90%被覆の結果 5割被覆 21 考察 80%被覆に対する考察 • パッケージやアプリケーションによって差 異がある JVM高速化のためのbytecode解析 22 結果 連続性の結果:2連続 JVM高速化のためのbytecode解析 23 結果 JVM高速化のためのbytecode解析 24 JVM高速化のためのbytecode解析 25 考察 2連続する命令の考察 • パッケージ、アプリケーションの差異にか かわらずほぼ同一 JVM高速化のためのbytecode解析 26 結果 連続性の結果:5連続 JDK 5611115956 5956111159 1159561111 other 1111595611 5313105953 JVM高速化のためのbytecode解析 27 java.lang java.io BFB71259BB B42AC6B42A 2AB5B4B42A 55110359BC BC040359BD 59BC040359 B5B4B42A2A other 040359BD05 other 2ABFB71259 0359BC0403 java.awt B42AC6B42A BFB71259BB B2A7B359B8 94097F14B4 other java.util 097F14B42A java.net B0B72A59BB 6004B4592A B56004B459 BFB71259BB B71259BBA7 3AB71259BB B919A73603 other other 2AB56004B4 2ABFB71259 59BBA73AB7 JVM高速化のためのbytecode解析 28 OpenOffice eclipse B42AC6B42A 5956111159 B6B72A59BB other 5611115956 1159561111 B42AB6B42A 1111595611 B5B759BB2A other 5611105956 B6B42AB42A robocode 2AB5012AB5 012AB5012A other B5012AB501 59BB2AC7B4 BB2AC7B42A yfiles Jetty 9AB919B919 B919A73AB6 3AB919A73A B612B759BB BFB71259BB B612B759BB other other 19A73AB619 5410105954 5954101059 1059541010 JVM高速化のためのbytecode解析 29 考察 5連続に対する考察 • パッケージ、アプリケーションによって同一 のものが上位に来るとは限らない • JDKと OpenOffice は、ほぼ同一 JVM高速化のためのbytecode解析 30 9割被覆 O 8割被覆 JVM高速化のためのbytecode解析 y s ro bo co de yF ile tt ffi ce Je nO pe lip se ec aw t t il ne ut JD K ja va . ja va . ja va . io g la n ja va . ja va . 結果 連続性の被覆率:2連続 2連続命令 60 50 40 30 20 10 0 5割被覆 31 O la 9割被覆 8割被覆 JVM高速化のためのbytecode解析 y s ro bo co de yF ile tt e se ffi c Je nO pe aw t lip ec il ne t ut JD K ja va . ja va . ja va . io ng ja va . ja va . 結果 連続性の被覆率:5連続 5連続命令 90 80 70 60 50 40 30 20 10 0 5割被覆 32 結果 連続性の被覆率:10連続 10連続命令 ro bo s yF ile y tt Je e ffi c O pe n O JD K aw t ja va . t ne ja va . il ut ja va . io ja va . ja va . la ng 90 80 70 60 50 40 30 20 10 0 9割被覆 8割被覆 JVM高速化のためのbytecode解析 5割被覆 33 考察 連続性に対する考察 • 命令の連続数が増えるのに比例して、被 覆率は低くなる • OpenOffice が高い被覆率 • JDKもやや高い JVM高速化のためのbytecode解析 34 結果 連続性の被覆率:MIPS 2連続 2連続命令 MIPS 80 70 60 50 40 30 20 10 0 httpd kaffe 9割被覆 8割被覆 JVM高速化のためのbytecode解析 ls 5割被覆 35 結果 連続性の被覆率:MIPS 5連続 5連続命令 MIPS 100 90 80 70 60 50 40 30 20 10 0 httpd kaffe 9割被覆 8割被覆 JVM高速化のためのbytecode解析 ls 5割被覆 36 結果 連続性の被覆率:MIPS 10連続 10連続命令 MIPS 100 80 60 40 20 0 httpd kaffe 9割被覆 8割被覆 JVM高速化のためのbytecode解析 ls 5割被覆 37 考察 MIPSとの比較に対する考察 • MIPSはjavaに比べ、均等に命令が出てく る傾向 • Java の命令の連続性はユニークと言える のではないか JVM高速化のためのbytecode解析 38 結果 再現性の結果 aload_0 ...c2...c3...c4...c5...c6...c7...c8...c9...c10 aload_0 % 12 10 8 6 4 ro bo s yF ile y tt Je O pe nO ffi ce JD K ja va _io ja va _u til ja va _n et ja va _a wt ja va _la n g 2 0 JVM高速化のためのbytecode解析 39 O ng JVM高速化のためのbytecode解析 ro bo s y yF ile tt ffi ce Je nO pe JD K % ja va _io ja va _u til ja va _n et ja va _a wt ja va _la 結果 再現性の結果 new -> dup 25 20 15 10 5 0 40 結果 再現性の結果 sastore % 80 70 60 50 40 30 20 10 0 JDK OpenOffice JVM高速化のためのbytecode解析 Jetty 41 考察 再現性の考察 • sastoreで始まる命令の列は、JDK, OpenOffice において顕著な再現性 • java.net は、若干再現性が高い – 被覆率が低かったことと関係しているのか? JVM高速化のためのbytecode解析 42 考察 まとめ • 出現する命令の頻度はほぼ同一 • 連続性に関しては、差異が見られる • 被覆率や再現性は差異が見られる JVM高速化のためのbytecode解析 43 今後の課題 今後の課題 • より詳しい検証 – 命令の連続性の調査をもっと行う – 200連続する命令があるclass fileの検証 JVM高速化のためのbytecode解析 44 今後の課題 今後の課題 • 動的処理 – 動的統計が取れると、より詳しい情報が読め る JVM高速化のためのbytecode解析 45 今後の課題 今後の課題 実際に実装し、検証をする – 何パーセントのパフォーマンス向上が見られ るか JVM高速化のためのbytecode解析 46