I/O性能の検証
第1回ではXenのドメインUにおけるCPU性能について解説しましたが、今回はI/O性能について解説してみましょう。なお、ハードウェア的な検証環境および、ドメインUの基本的な環境については第1回と同様です。
環境の作り方
今回の検証でもっとも困難をきわめたのは環境作成です。というのも、I/O制御に関しての動作において、次の2点が問題となったからです。
- LinuxにおけるファイルI/Oはバッファキャッシュ経由で実施される
- XenのドメインU側でのファイルI/O制御と仮想ディスク制御、そしてドメイン0のファイルI/O制御が関係する
正直、検証環境の作成時に思うような結果がでなかったというのもあります。このため、次のようなアプローチを取りました。
- 検証用のファイルI/Oは、ドメインUの定義において、「phy:」で指定したディスク上のファイルシステムに対して行う。具体的にはリスト1のように、ドメインU上で「/dev/hda4」となるデバイスに対してI/Oを発生させます。
- ドメインUにおいて、検証用のファイルI/Oを行うファイルシステムはsyncオプションを付加してマウントする(「mount /dev/xxx /yyy -o sync」というようにする)。具体的には、上記の例では「/dev/hda4」と指定されたデバイスのマウント時にsyncオプションを指定します。
- ドメイン0においても、検証用のファイルI/Oを行うファイルシステムはsyncオプションを付加してマウントする。
リスト1:仮想ディスクの指定方法
disk = [ 'file:/home/xen/honeypot.img,hda1,w','phy:hdc5,hda4,w' ]
この前提を元にしてI/O検証を行いました。
ドメイン0における「実ディスク」に対するファイルI/Oの性能を見る
まず、ドメイン0における「実在のディスク」上に構築されたファイルシステムに対して、連続した領域に対するファイルI/Oを実施してみましょう。検証内容は次の通りです。
- 充分に大きい空き領域を持つパーティションに対してファイルI/Oを実施
- 空き領域が連続した領域にあると仮定してファイルI/Oを実施
- 同期I/Oを発生させる
正確には、連続した領域を確保できている「であろう」という状況での検証になります。
具体的には、次に示すコマンドラインを実行します。同期I/Oの性能がそんなによいわけではないため、ddコマンドのcountオプションで指定する数値はそんなに大きくなくてもよいでしょう。
dd if=/dev/zero of=/eval/evalIO bs=1024k count=32
この操作を実行した結果を次に示します。
kid:/tmp# dd if=/dev/zero of=/tmp/evalIO bs=1024k count=32
32+0 records in
32+0 records out
33554432 bytes transferred in 17.615797 seconds (1904792 bytes/sec)
数回繰り返してみた結果、おおよそ1.9MB/secより少し上の性能がでました。