第 5 章 断片化の計測 26
5.5 考察
ここで、ブロック内部の個数を決定しなければならない。もし、1であるとBinary buddy
sytemと同様となる。また、ブロック内部の個数が多いと、逆に記憶領域の利用効率は低
くなる。本研究では、5個、10個、20個(表 5.5)の3種類について実験をした。5個と 10個の実験結果はほとんど等しいが、20個の場合は少し記憶領域の利用効率が低く、予 測通りの結果を得た。
表 5.5: Block buddy systemのシミュレーション結果
環境 32KB:30% 32KB:50% 64KB:30% 64KB:50%
個数:5個 3502 9580 9249 21750
個数:10個 3560 9504 9121 20348
個数:20個 2889 9260 7571 19093
5.4.4 Separate first fit 法
本節ではSeparate first fit法での実験結果について説明する。Block buddy sytemのサ ポートする記憶領域は、Two-level allocationやBuddy sytemと異なり、4776:4152の比 率で分割する。よって全体の記憶領域が32KBの場合17530byte、64KBの場合35061byte
を0〜128byteの大きさおオブジェクトで割り当てることになる。
表 5.6の実験結果を見ると、本章で実験した割り当て方法の中で最も利用効率が高い。
この割り当て方法は、他の割り当て方法と比較して最も実装が容易な方法でもある。しか し、Best fit法の実験結果と同様に、割り当てるオブジェクトの種類が少ない場合に有効 であると考えられる。よって、割り当てるオブジェクトの種類が増加した場合に、良い性 能が出るとは限らない。
表 5.6: Separate first fit法のシミュレーション結果
環境 32KB:30% 32KB:50% 64KB:30% 64KB:50%
平均値(byte) 3274 11387 8604 24637
fit法とBlock buddy systemは広い範囲で見れば一定である。つまり、First fit 法では割 り当て·解放を繰り返すうちに外部断片化が発生し、外部断片化がヒープ領域を圧迫する ことによって記憶領域の利用効率が悪化したことを示している。First fit法以外の割り当 て方法はFirst fit 法、Block Buddy sytemと同様にほぼ一定の値を示した。
一般的に断片化を計るには、実際に割り当てている領域の総量と実際に要求されている 領域の総量との差で導くことが多い。しかし、本研究では次のような優先順位で断片化の 性能を測定する。
1.100回の測定結果をグラフにした際、横軸と平行であること
外部断片化の発生が少なく、解放された領域の再利用性が高いことを示している。
2.グラフの縦揺れが少ないこと
グラフの縦揺れが大きいほど、不安定であるといえる。また、平均値や最大値が大き いことよりも最小値が大きいほどよいと考える。なぜならば、平均値が高くても最小 値が0に近い場合、要求されるオブジェクトを割り当てることができず、アプリケー ションの実行が止まる可能性があるからである。
3.100回の測定結果をグラフにした際、グラフの縦軸の数値が高いこと
グラフの縦軸の数値が高いほど記憶領域の利用効率が高いことを示している。
本研究の実験でこの計測方法を使うと、例えば、64KBの領域で50%の領域ではBlock Buddy systemとSeparate first fit法を比べると、以下の表 5.7のようになり、Separate first fit法よりもBlock buddy systemのほうが優れていると判断される。
表 5.7: Block Buddy systemとSeparate first fit法の断片化の測定 Block buddy system Separate first fit法
測定1 ○ ×
測定2 ○ ×
測定3 × ○
実験結果より、本研究では1つの指針として図 5.5のようにアプリケーションの特性に よって割り当て方法を選択すれば良いと提案する。
A: Two level allocationとFirst fit法というように、割り当て方法で扱う領域の境界の 位置が静的に決まる場合
B: 扱うオブジェクトの分布が、小さいオブジェクトほど多い場合 C:断片化よりも実行速度を重視したい場合
D: 扱うオブジェクトの分布で、Two-level allocationなどの外部断片化の減少を目的と した割り当て方法が扱うオブジェクトの大きさの範囲で、大きなオブジェクトが多い 場合
0 5000 10000 15000 20000 25000 30000
0 10 20 30 40 50 60 70 80 90 100
amount of allocated size [byte]
number of times
32kB 30%
32kB 50%
64kB 30%
64kB 50%
図 5.2: First fit法のシミュレーション結果
0 5000 10000 15000 20000 25000 30000 35000
0 10 20 30 40 50 60 70 80 90 100
amount of allocated object [byte]
number of times
32kB 30%
32kB 50%
64kB 30%
64kB 50%
図 5.3: Separate first fit法のシミュレーション結果
0 5000 10000 15000 20000 25000 30000 35000
0 10 20 30 40 50 60 70 80 90 100
amount of allocated size [byte]
number of times
32kB 30%
32kB 50%
64kB 30%
64kB 50%
図 5.4: Block buddy systemのシミュレーション結果
A Yes
No B
C Yes
Yes
No No
Best fit First fit
Two level allocation
Yes
D No
Block buddy system
Buddy system Align first fit
図 5.5: 割り当て方法の選択
しかし、シミュレーションの割り当てに関して、実際のアプリケーションに見られるよう な、偏りがない。つまり、5byteが連続で100回割り当てられるというようなことがない。
よって、シミュレーションで得た結果と、KVM上で実際に動作させた結果とは必ずしも 一致しない。また、Two-level allocation とFirst fit法とを区切る境界を決定するのもシ ミュレーションのように容易ではないと考えられる。