異なる物理ディスクに仮想ディスクを構築 〜 その1
異なる物理ディスクに仮想ディスクを構築 〜 その1
ディスク1個だと、明らかに「単一スピンドルへの集中アクセスにともなう性能劣化」が見られるので、今度は物理ディスクを分けて(具体的には異なるディスクに対して)I/Oを実施してみましょう。
なお、図1に示すように同じATAバス上のマスターとスレーブに分けています。

図1:1つのATAバスに2つの物理ディスク
ちなみに図1のようにした場合、性能劣化の原因としては、バス調停などに起因したものが想定されます。結果は以下のとおりです。
pigeon:~# cat /tmp/perfres
32+0 records in
32+0 records out
33554432 bytes transferred in 41.613221 seconds (806341 bytes/sec)
同一のディスクにI/Oを集中させた場合よりも、性能が落ちています。この性能劣化の原因はいくつか想定できますが、例えばATAバスの調停がうまくいっていないということが原因に考えられます。
異なる物理ディスクに仮想ディスクを構築 〜 その2
同じATAバス上の異なるディスクでI/Oを発生させても性能が上がらないので、今度はATAバスそのものを分けてみることにします。ただし、今回の検証環境ではATAバスが1系統しかないので、ATAバスとシリアルATAバスという形に分けました(図2)。

図2:ATAバスとシリアルATAで2つの物理ディスク
ディスクのコントローラまで分けているので、ネックが発生するとしたら、PCIなどのシステムバスということになります。ATAディスク上でI/Oを発生させた結果を以下に示します。
[root@jannedaarc ~]# cat /tmp/perfres5
32+0 records in
32+0 records out
33554432 bytes transferred in 18.085293 seconds (1855344 bytes/sec)
なお、シリアルATA側のI/Oについては、おおよそ同程度以上の時間がかかる程度の処理をさせています。同時に実行させたものの結果を以下に示します。
1536+0 records in
1536+0 records out
1610612736 bytes transferred in 48.409235 seconds (33270774 bytes/sec)
性能が異なるものを用いたベンチマークのため、厳密な結果とはいえませんが、シリアルATAの動作はATAディスクの性能には影響をおよぼしていないことがわかります。
まとめ
今回の性能評価では、以下のようなことがわかりました。
- Xen上の仮想ディスクに対するI/Oは、実ディスクに対するI/Oよりも若干性能が落ちる
- バースト転送的に発生するI/Oに伴うバスネックは、物理デバイスへのアクセス集中にともなう性能ネックよりも大きい
- ディスクI/Oのバスも分けた(今回の場合はATAとシリアルATA)場合には、各VMともに良好なI/O性能を示した
中途半端にディスクを分けるよりも、バスごと分けてしまったほうが性能向上するため、性能を要求されるVMを構成する場合にはこの点について考慮したほうがよいでしょう。