LibvirtとKVMを使用して、Ubuntu15.04サーバー内に仮想化されたUbuntu15.10ゲストをセットアップしています。
ホストシステムのストレージ:
# mount | grep ext4
/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/sdb1 on /media/hdd type ext4 (rw,relatime,data=ordered)
/ dev/sdaはSSDであり、/ dev/sdbはHDD。
初期設定はvirt-managerを使用して行われました。
問題:
ゲストシステムの全体的なパフォーマンスは良好のようですが、一部の操作、apt-getを使用したパッケージのインストール(したがってゲストシステムのインストール)は非常に遅くなります。
ゲストディスクイメージはRAW形式であり、SSDとHDDの両方にファイルとして、またHDDの個別のパーティションとして配置してみました。場所が異なればパフォーマンスに多少の違いがありますが、apt-getを使用してパッケージをインストールすると、ホストシステムよりも2〜3倍遅くなります。
また、さまざまなqemuディスクキャッシュオプションを試しましたそしてunsafeキャッシュを使用すると、問題が完全に解消されるようです。ただし、noneやwritebackなど、その他のキャッシュ設定ではパフォーマンスが低下します。もちろん、安全でないものを使用することは実際の解決策のようには見えません。
ゲストxml設定からの抜粋を次に示します。
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none'/>
<source dev='/dev/sdb2'/>
<target dev='vda' bus='virtio'/>
<boot order='2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
</disk>
次のようなパーティションの代わりにイメージファイルを使用する場合:
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='none' io='native'/>
<source file='/media/hdd/dsi/vm/ubuntu4.bin'/>
<backingStore/>
<target dev='vda' bus='virtio'/>
<boot order='2'/>
<alias name='virtio-disk0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</disk>
この問題を修正しようとしているときに、HDDの最初のパーティションが正しく配置されていないことに気付いたので、正しい配置でパーティションを再作成しました(このHDDの場合は4096です)。これもあまり役に立ちませんでした。
また、ゲスト用にelevator = noopを設定してみましたが無駄になりました。
VirtualBoxを使用してWindowsPCで同様のゲストシステムを実行すると、このようなパフォーマンスの低下は発生しないため、KVMでも同じパフォーマンスでゲストを実行する方法があることを願っています。
試してみてください
cache=directsync
または
cache=writethrough
また
vm.swappiness=1
vm.vfs_cache_pressure=75 (play around with this)
Cfq/noopの代わりに期限を使用します(私が見つけたssdsとraidのパフォーマンスが悪い)。
Cache = noneまたはライトバックが最適であると人々が言うことは無視してください。必ずしもそれほど単純ではありません。