KVM konuk io ev sahibi io'dan daha yavaş: bu normal mi?


13

CentOS 6.3 üzerinde bir Qemu-KVM ana bilgisayar sistemi kurulumum var. RAID10 Yazılımında çalışan dört adet 1 TB SATA HDD. Guest CentOS 6.3 ayrı bir LVM'ye kurulur. İnsanlar konuk performansını neredeyse ev sahibi performansına eşit gördüklerini söylüyorlar, ama bunu görmüyorum. G / Ç testlerim, konuklarda ana sistemden% 30-70 daha yavaş performans gösteriyor. Zamanlayıcıyı değiştirmeye çalıştım ( elevator=deadlinehost ve elevator=noopguest üzerine ayarlandı), blkio.weight1000'de 1000 olarak ayarlandı, ioyu virtio'ya değiştirdim ... Ama bu değişikliklerin hiçbiri bana önemli bir sonuç vermedi. Bu bir konuk .xml yapılandırma parçasıdır:

<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>

Testlerim var:

Sunucu sistemi:

iozon testi

# 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 okuma testi: bir işlem ve sonra dört eşzamanlı işlem

# 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 yazma testi: bir işlem ve sonra dört eşzamanlı işlem

# 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

Misafir sistemi:

iozon testi

# 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 okuma testi: bir işlem ve sonra dört eşzamanlı işlem

# 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 yazma testi: bir işlem ve sonra dört eşzamanlı işlem

# 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

Acaba bu normal durum mu yoksa bir şey mi kaçırdım?


Misafirinizi, daha iyi performans veren bir otobüs türü virtio kullanacak şekilde değiştirdiğinizi söylediniz, ancak bu avantajları elde etmek için virtio sürücülerinin kurulu olması gerekir. Bunları kullanıp kullanmadığınızı söylemiyorsunuz. CentOS'un bu sürücülerin varsayılan olarak misafirinizde ne olacağı hakkında yorum yapmak için yeterince iyi bilmiyorum.
jwbensley

1
@javano CentOS her zaman virtio içerir ve çekirdek paketlerini yeniden oluşturarak açıkça kaldırmanız gerekir.
Michael Hampton

Her zaman bilmek kullanışlı, şerefe :)
jwbensley

Yanıtlar:


22

Henüz performans ayarlamayı bitirmediniz.

  <driver name='qemu' type='raw' cache='writethrough' io='native'/>

Birincisi hangi G / Ç mekanizmasının kullanılacağıdır.

QEMU'nun iki eşzamansız G / Ç mekanizması vardır: çalışan iş parçacığı havuzu ve yerel Linux AIO kullanan POSIX AIO emülasyonu.

Bunların her birini karşılaştırmak için XML'inizden birini io='native'veya XML'inizi ayarlayın io='threads'.

İkincisi, hangi önbellek mekanizmasının kullanılacağıdır. Ayarlayabilirsiniz cache='writeback', cache='writethrough'ya da birlikte kapatabilirsiniz cache='none'aslında iyi işler bulabilir, hangi.

Ham birimler veya bölümler kullanıyorsanız, veri kopyalarını ve veri yolu trafiğini azaltan önbelleği tamamen önlemek en iyisidir.

writebackRAID diziniz pil destekli değilse veya veri kaybetme riskiniz yoksa kullanmayın . (Tabii ki, veri kaybetmek uygunsa, çekinmeyin.)

Üçüncüsü, yardımcı olabilecek bazı diğer şeyler engelleri kapatmak ve konuk için son tarih zamanlayıcısını kullanmaktır.

Son olarak, biraz araştırma yapın. IBM , 2010 Linux Plumbers Konferansında KVM I / O performansı hakkında çok ilginç bir sunum yaptı . Buna ek olarak, KVM kullanımı konusunda kesinlikle ilgi çekici olacak en iyi uygulamalara sahiptirler.

PS Uzun ardışık okuma ve yazma işlemleri nadiren gerçek dünyadaki iş yükünü temsil eder. İdeal olarak üretimde çalıştırmayı planladığınız gerçek uygulama (lar) ile diğer iş yükü türleriyle karşılaştırmalar yapmayı deneyin.


"IO modelinizle test edin" için +1
Javier

Oh, IBM belgelerine iyi beğeni, +1 :)
jwbensley

1
Çok faydalı, teşekkürler! Şimdi konuk sonuçlarımı ana bilgisayar performansından% 90'a kadar iyileştirdim. Benim hatam oldukça aptalcaydı: Değişikliklerimi virsh reset <domain>uygulamadı virsh edit <domain>ve misafir virtio kullandığına inanıyordum, ama aslında olmadı. Sadece virsh destroy <domain>takiben virsh start <domain>yardımcı oldu. Virtio kuralları! ;)
Evolver

1
cache = writeback herhangi bir gerçek yaşam riski oluşturmaz (önemli veriler tehlikede değildir, sadece çarpışma anında atılan uçuşta veriler). Yalnızca önbellek = güvensizdir. Writeback ek donanım gereksinimleri anlamına gelmez ("pil destekli RAID dizisi" hiçbir şekilde yardımcı olmaz). HDD yazma önbelleğiyle aynı bütünlük düzeyine sahiptir: her ikisi de gerektiğinde işletim sistemi tarafından temizlenir.
korkman

io='native'benim durumumda neredeyse% 20-30 ekstra WRITE performansı verdi
rahul286
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.