>>前回

 次に、メモリーのアクセス性能を調べる。メモリーアクセスのベンチマークツールである「lmbench3.0-a9」を使用して、メモリーのアクセス時間(レイテンシー)を、1回にアクセスするサイズを変えながら計測した。すると、24Mバイト以下のサイズでアクセスした場合には、ホスト環境とゲスト環境で性能に差が生じなかった。CPUに24Mバイトのキャッシュメモリーが搭載されているためである。

 そこで、広範囲のメモリーにアクセスをした場合の性能を見る目的で、オープンソースのインメモリーDBである「Redis 2.2.2」を使って、getコマンドによるデータ読み出しとsetコマンドによる書き込みの性能を検証!)として調べた。Redisはデータをメモリー上だけではなくディスクに置く機能も備えるが、この検証ではメモリーにのみデータを置いた。実施したベンチマークは、Redisに付属の「redis -benchmark」である。50台のクライアント機をシミュレートし、256バイトの文字列が収まるレコードをランダムに読み出す処理と、書き込む処理の性能を測定した。

 利用するCPUコア数を変えながら計測した検証(4)の結果を図5に示す。読み出しではKVMのオーバーヘッドが39.9~82.3%発生した。また、書き込みでは41.4~81.0%生じた。16コア以上では、ホスト環境において性能の伸びが低下(もしくは性能劣化)した。1~8コアまでの結果で見ると、KVMのオーバーヘッドは75~80%と、大きいことが分かる。

図5●KVMのインメモリーDBへのアクセス性能
図5●KVMのインメモリーDBへのアクセス性能
インメモリーDBのRedisを用いて、 getコマンドによるデータ読み出し(左)とsetコマンドによる書き込み(右)の性能を調べた
[画像のクリックで拡大表示]

 KVMのゲスト環境では、CPUのキャッシュメモリーにヒットしなかった場合、qemu-kvm(ホスト環境上で動くユーザープロセス)のメモリー空間に割り当てられたメインメモリーにアクセスすることになる。アクセス処理が複雑になるため、オーバーヘッドが大きくなったものと見られる。