最近由於有個產品做POC需要不斷的測試Win7系統,於是用Linux跑KVM來做虛擬化平台。
開始發現預設用IDE模式裝Win7真的是慢到靠北啊~
原來要用virtio啊?
but我裝的CentOS裡面的virt-manager沒有這個選項啊?連SATA都沒有!orz
用指令當然可以,但我還是想用virt-manager啦~
於是砍掉裝Ubuntu Server 14.04 LTS,啊?也是沒有!雖然有SATA可以選...
不行,我就是要virt-manager裡面有virtio的!(握拳
砍掉裝Ubuntu Desktop 14.04 LTS,這次有了!耶~ ^_^
但安裝時不能直接用virtio喔,要先用SATA裝完,再加一個新的hdd用virtio,
同時下載virtio-win-xxxxxx.iso並且掛載進來,到Win7的設備管理員裡面把所有問號都跟新驅動程式。
關機後移除新HDD,把原HDD改為virtio,這樣就可以了!
還有,因為要拍snapshot,所以虛擬硬碟要用qcow2,如果之前用其他的格式,可以用qemu-img convert來轉換即可。
不過,單獨開一台win7還好,如果開到第三台就非常非常慢!
於是google了一下kvm performance tuning的文章,Redhat跟IBM都有不錯的文章可以參考。照做應該差不多了。
下面是我整理的一些調整:
1. 把/var/lib/libvirt/image獨立出來,掛載使用這些選項:
defaults,noatime,commit=60,barrier=0,nobh
2. 為kernel設定參數,修改/etc/sysctl.conf:
vm.swappiness=0
vm.dirty_background_ratio=50
vm.dirty_ratio=80
net.core.wmem_max=4194304
net.core.rmem_max=4194304
vm.zone_reclaim_mode=0
完成後執行 sysctl -p
3. 在virt-manager中修改virtio disk參數:
Cache mode: writeback
IO mode: threads
4. 確認/sys/block/sda/queue/scheduler 使用 deadline
5. 爲 qxl 設定更多 RAM (virsh edit vn_name)
<model type='qxl' ram='131072' vram='131072' vgamem='65536' heads='1'/>
基本這些...
關鍵是1,2的設定,主要是減少swap的產生,把disk sync的同步次數降低,然後是把file system journaling頻率降低。
但如果碰到意外斷電,檔案損毀的機率也大很多就是了。
當然了,記憶體是一定不能少的啦~~ ^_^
如果能用SSD就更理想了,but...我目前只有一個SATA而已。
機器支援NUMA也很有幫助,不過我的機器沒有!Orz
聽說用raw partition/disk也可以提升效能,但因為我一定要用snapshot,所以就沒測到這個部分了。
現在同時跑4-5台Win7都還算OK,不過有時在linux host上面會卡卡,但vm裡面的win7就順暢很多了~~ ^_^
more ref:
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/pdf/Virtualization_Tuning_and_Optimization_Guide/Red_Hat_Enterprise_Linux-7-Virtualization_Tuning_and_Optimization_Guide-en-US.pdfhttp://everything2.com/title/Filesystem+performance+tweaking+with+XFS+on+Linux