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