Saya memiliki pengaturan sistem host Qemu-KVM di CentOS 6.3. Empat HDD SATA 1TB bekerja di Perangkat Lunak RAID10. Guest CentOS 6.3 diinstal pada LVM terpisah. Orang mengatakan bahwa mereka melihat kinerja tamu hampir sama dengan kinerja host, tetapi saya tidak melihat itu. Tes i / o saya menunjukkan kinerja tamu lebih lambat 30-70% dibandingkan sistem host. Saya mencoba untuk mengubah scheduler (diatur elevator=deadline
pada host dan elevator=noop
tamu), diatur blkio.weight
ke 1000 di cgroup, ubah io ke virtio ... Tapi tidak ada perubahan ini yang memberi saya hasil yang signifikan. Ini adalah bagian konfigurasi .xml tamu:
<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>
Ada beberapa tes saya:
Sistem host:
tes iozon
# 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 read test: satu proses dan kemudian empat proses simultan
# 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 write test: satu proses dan kemudian empat proses simultan
# 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
Sistem tamu:
tes iozon
# 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 read test: satu proses dan kemudian empat proses simultan
# 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 write test: satu proses dan kemudian empat proses simultan
# 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
Saya bertanya-tanya apakah itu situasi normal atau apakah saya melewatkan sesuatu?
Jawaban:
Anda belum selesai dengan penyempurnaan kinerja.
Pertama adalah mekanisme I / O yang digunakan.
Tetapkan salah satu
io='native'
atauio='threads'
dalam XML Anda untuk membandingkan masing-masing.Kedua adalah mekanisme caching yang digunakan. Anda dapat mengatur
cache='writeback'
,cache='writethrough'
atau mematikannyacache='none'
, yang menurut Anda terbaik.Jangan gunakan
writeback
kecuali array RAID Anda didukung oleh baterai, atau Anda berisiko kehilangan data. (Tentu saja, jika kehilangan data tidak masalah, maka silakan saja.)Ketiga, beberapa hal lain yang dapat membantu termasuk mematikan penghalang, dan menggunakan penjadwal tenggat waktu di tamu.
Akhirnya, lakukan riset. IBM membuat presentasi yang sangat menarik tentang kinerja KVM I / O pada Konferensi Linux Plumbers 2010. Selain itu mereka memiliki serangkaian praktik terbaik dalam menggunakan KVM yang tentunya akan menarik.
PS Urutan panjang membaca dan menulis jarang mewakili beban kerja dunia nyata. Coba lakukan tolok ukur dengan jenis beban kerja lain, idealnya aplikasi aktual yang ingin Anda jalankan dalam produksi.
sumber
virsh reset <domain>
tidak menerapkanvirsh edit <domain>
perubahan saya , dan saya percaya bahwa tamu menggunakan virtio, tetapi sebenarnya tidak. Hanyavirsh destroy <domain>
diikuti oleh yangvirsh start <domain>
dibantu. Aturan Virtio! ;)io='native'
memberikan hampir 20-30% kinerja WRITE ekstra dalam kasus saya