CentOS 6.3でQemu-KVMホストシステムをセットアップしています。ソフトウェアRAID10で動作する4台の1TB SATA HDD。ゲストCentOS 6.3は別のLVMにインストールされます。ゲストのパフォーマンスはホストのパフォーマンスとほぼ同じだと言われていますが、私にはわかりません。私のI/Oテストでは、ホストシステムよりもゲストでのパフォーマンスが30〜70%遅いことが示されています。スケジューラを変更してみました(set elevator=deadline
onホストおよびelevator=noop
on guest)、セットblkio.weight
cgroupで1000に、ioをvirtioに変更...しかし、これらの変更のどれも私に重要な結果を与えませんでした。これはゲストの.xml構成部分です。
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/dev/vgkvmnode/lv2'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</disk>
私のテストがあります:
ホストシステム:
イオゾンテスト
# iozone -a -i0 -i1 -i2 -s8G -r64k
random random
KB reclen write rewrite read reread read write
8388608 64 189930 197436 266786 267254 28644 66642
dd読み取りテスト:1つのプロセス、次に4つの同時プロセス
# dd if=/dev/vgkvmnode/lv2 of=/dev/null bs=1M count=1024 iflag=direct
1073741824 bytes (1.1 GB) copied, 4.23044 s, 254 MB/s
# dd if=/dev/vgkvmnode/lv2 of=/dev/null bs=1M count=1024 iflag=direct skip=1024 & dd if=/dev/vgkvmnode/lv2 of=/dev/null bs=1M count=1024 iflag=direct skip=2048 & dd if=/dev/vgkvmnode/lv2 of=/dev/null bs=1M count=1024 iflag=direct skip=3072 & dd if=/dev/vgkvmnode/lv2 of=/dev/null bs=1M count=1024 iflag=direct skip=4096
1073741824 bytes (1.1 GB) copied, 14.4528 s, 74.3 MB/s
1073741824 bytes (1.1 GB) copied, 14.562 s, 73.7 MB/s
1073741824 bytes (1.1 GB) copied, 14.6341 s, 73.4 MB/s
1073741824 bytes (1.1 GB) copied, 14.7006 s, 73.0 MB/s
dd書き込みテスト:1つのプロセス、次に4つの同時プロセス
# dd if=/dev/zero of=test bs=1M count=1024 oflag=direct
1073741824 bytes (1.1 GB) copied, 6.2039 s, 173 MB/s
# dd if=/dev/zero of=test bs=1M count=1024 oflag=direct & dd if=/dev/zero of=test2 bs=1M count=1024 oflag=direct & dd if=/dev/zero of=test3 bs=1M count=1024 oflag=direct & dd if=/dev/zero of=test4 bs=1M count=1024 oflag=direct
1073741824 bytes (1.1 GB) copied, 32.7173 s, 32.8 MB/s
1073741824 bytes (1.1 GB) copied, 32.8868 s, 32.6 MB/s
1073741824 bytes (1.1 GB) copied, 32.9097 s, 32.6 MB/s
1073741824 bytes (1.1 GB) copied, 32.9688 s, 32.6 MB/s
ゲストシステム:
イオゾンテスト
# iozone -a -i0 -i1 -i2 -s512M -r64k
random random
KB reclen write rewrite read reread read write
524288 64 93374 154596 141193 149865 21394 46264
dd読み取りテスト:1つのプロセス、次に4つの同時プロセス
# dd if=/dev/mapper/VolGroup-lv_home of=/dev/null bs=1M count=1024 iflag=direct skip=1024
1073741824 bytes (1.1 GB) copied, 5.04356 s, 213 MB/s
# dd if=/dev/mapper/VolGroup-lv_home of=/dev/null bs=1M count=1024 iflag=direct skip=1024 & dd if=/dev/mapper/VolGroup-lv_home of=/dev/null bs=1M count=1024 iflag=direct skip=2048 & dd if=/dev/mapper/VolGroup-lv_home of=/dev/null bs=1M count=1024 iflag=direct skip=3072 & dd if=/dev/mapper/VolGroup-lv_home of=/dev/null bs=1M count=1024 iflag=direct skip=4096
1073741824 bytes (1.1 GB) copied, 24.7348 s, 43.4 MB/s
1073741824 bytes (1.1 GB) copied, 24.7378 s, 43.4 MB/s
1073741824 bytes (1.1 GB) copied, 24.7408 s, 43.4 MB/s
1073741824 bytes (1.1 GB) copied, 24.744 s, 43.4 MB/s
dd書き込みテスト:1つのプロセス、次に4つの同時プロセス
# dd if=/dev/zero of=test bs=1M count=1024 oflag=direct
1073741824 bytes (1.1 GB) copied, 10.415 s, 103 MB/s
# dd if=/dev/zero of=test bs=1M count=1024 oflag=direct & dd if=/dev/zero of=test2 bs=1M count=1024 oflag=direct & dd if=/dev/zero of=test3 bs=1M count=1024 oflag=direct & dd if=/dev/zero of=test4 bs=1M count=1024 oflag=direct
1073741824 bytes (1.1 GB) copied, 49.8874 s, 21.5 MB/s
1073741824 bytes (1.1 GB) copied, 49.8608 s, 21.5 MB/s
1073741824 bytes (1.1 GB) copied, 49.8693 s, 21.5 MB/s
1073741824 bytes (1.1 GB) copied, 49.9427 s, 21.5 MB/s
私はその通常の状況か、何かを逃したのだろうか?
パフォーマンスの調整はまだ終わっていません。
<driver name='qemu' type='raw' cache='writethrough' io='native'/>
まず、使用するI/Oメカニズムです。
QEMUには2つの非同期I/Oメカニズムがあります。ワーカースレッドのプールを使用したPOSIX AIOエミュレーションとネイティブLinux AIOです。
XMLでio='native'
またはio='threads'
を設定して、これらのそれぞれをベンチマークします。
2つ目は、使用するキャッシュメカニズムです。 cache='writeback'
、cache='writethrough'
を設定することも、cache='none'
を使用して無効にすることもできます。
rawボリュームまたはパーティションを使用している場合は、キャッシュを完全に回避することをお勧めします。これにより、データのコピーとバスのトラフィックが減少します。
RAIDアレイがバッテリーでバックアップされている場合、またはデータを失う危険性がない限り、writeback
を使用しないでください。 (もちろん、データが失われても問題がなければ、ご遠慮なく。)
第3に、バリアをオフにしたり、ゲストでデッドラインスケジューラを使用したりするのに役立つその他のいくつかのこと。
最後に、いくつかの調査を行います。 IBMは2010 Linux Plumbers Conferenceで非常に興味深い KVM I/Oパフォーマンス についてのプレゼンテーションを行いました。さらに、 KVMを使用する これは確かに重要です。
追伸長いシーケンシャルな読み取りと書き込みが実際のワークロードを表すことはほとんどありません。他のタイプのワークロード、理想的には本番環境で実行する予定の実際のアプリケーションでベンチマークを実行してみてください。