KVM / Qemu, Ubuntu: Neden daha fazla sayıda işlemci CPU Disk-I / O'yu hızla geliştiriyor?


9

İki düğümden oluşan bir Kalp Atışı / DRBD / Kalp Pili / KVM / Qemu / libvirt kümemiz var. Her düğüm aşağıdaki paketler / sürümlerle Ubuntu 12.04 64 Bit çalıştırır:

  • Çekirdek 3.2.0-32-jenerik # 51-Ubuntu SMP
  • DRBD 8.3.11
  • qemu-kvm 1.0 + noroms-0ubuntu14.3
  • libvirt 0.9.13
  • kalp pili 1.1.7
  • kalp atışı 3.0.5

Sanal konuklar Ubuntu 10.04 64 Bit ve Ubuntu 12.04 64 Bit çalıştırıyor. En iyi CPU performansını elde etmek için ana CPU'ların yeteneklerini sanal konuklara aktarmak için bir libvirt özelliği kullanıyoruz.

Şimdi bu kümede ortak bir kurulum var:

  • VM "izleme" 4 vCPU'ya sahiptir
  • VM "izleme" disk arabirimi olarak ide kullanır (şu anda bariz nedenlerle VirtIO'ya geçiyoruz)

Son zamanlarda bazı basit testler yaptık. Profesyonel olmadıklarını ve yüksek standartlara ulaşmadıklarını biliyorum, ancak zaten güçlü bir eğilim gösteriyorlar:

A düğümü VM "bla" çalıştırıyor B düğümü VM "izleme" çalıştırıyor

Bir dosyayı VM "bla" den VM "izlemeye" rsync ettiğimizde sadece 12 MB / sn. VM "izleme" içinde = / dev / null = / tmp / blubb ise basit bir dd gerçekleştirdiğimizde yaklaşık 30 MB / sn.

Sonra VM "izlemesine" 4 vCPU daha ekledik ve yeniden başlattık. VM "izleme" artık 8 vCPU'ya sahip. Testleri aşağıdaki sonuçlarla tekrar çalıştırdık: Bir dosyayı VM "bla" den VM "izleme" ye yeniden senkronize ettiğimizde artık 36 MB / sn. VM "izleme" içinde = / dev / null = / tmp / blubb ise basit bir dd gerçekleştirdiğimizde şimdi yaklaşık 61 MB / sn.

Benim için bu etki oldukça şaşırtıcı. Görünüşe göre bu sanal konuk için daha fazla sanal CPU eklemek otomatik olarak VM içinde daha fazla disk performansı anlamına geliyor?

Bunun için bir açıklamam yok ve girişinizi gerçekten takdir ediyorum. Bu davranışı% 100 yeniden oluşturabildiğim için bu performansın artmasına neyin sebep olduğunu anlamak istiyorum.


2
Diğer değişkenleri ortadan kaldırmak için iozon veya bonnie ++ gibi özel olarak oluşturulmuş bir kıyaslama aracı kullanın .
ewwhite

Gerçek CPU yüklerinin nasıl göründüğü ilginç olurdu ... gizli bir yerde cpu bağlı bir şey (rsync artı muhtemelen ssh kesinlikle bir dereceye kadar, bu yüzden ağ sürücüleri bu şekilde tanıtıldı, ayrıca dd beklenmedik cpu bağlı şeyler yapabilir ...), ya da mevcut daha az yürütme iş parçacığı nedeniyle birbirini en iyi şekilde bekleyen şeyler mi?
rackandboneman

3
CPU numaralarını değiştirdiğinizde değişiklik kvm_tracesayısının nasıl IO_Exitsdeğiştiğini görmek için çalıştırın . Konuk CPU'larla programlanan IDE kullandığınız için tahmin ediyorum. Virtio ile performans tutarlı olmalı ve veri düzlemi qemu içindeyse, büyük bir artış sağlayacaktır. Başka bir tahmin, buggy sanallaştırma yığını için bilinen bir dağıtım kullandığınız gerçeğinde olabilir.
dyasny

@ ewwhite: Evet, profesyonel testler yapmak iyi bir seçim olacaktır. Ancak, önce bu G / Ç davranışının neden oluştuğunu anlamak istiyorum. @ rachandboneman: En son baktığımda, 4 CPU'nun bekleme değeri çok yüksekti (yaklaşık% 70-80). @dyasny: Teşekkürler, bunu deneyeceğim. Veri düzleminin etkinleştirildiğini / kullanılmakta olduğunu nasıl kontrol edebilirim?
Valentin

veri-düzlemi şimdilik deneysel, ve onu alan ilk dağıtımın Fedora olacağından eminim. pl.digipedia.org/usenet/thread/11769/28329
dyasny

Yanıtlar:


9

Çok kaba bir fikir / açıklama vereceğim.

OP durumunda, VM içinde ölçüm yapmanın yanı sıra, ana bilgisayara da bakılmalıdır.

Bu durumda, aşağıdakilerin doğru olduğunu varsayabiliriz

  1. Tüm testlerde, ana bilgisayar G / Ç (disk) bant genişliği maksimum değildir. VM ( "monitoring") G / Ç, kendisine tahsis edilen daha fazla CPU ile artar. Ana makine G / Ç'si zaten maksimumda ise, G / Ç performans kazancı olmamalıdır.
  2. "bla""monitoring"G / Ç performansı değişiklik yapmadan geliştikçe sınırlayıcı faktör değildir"bla"
  3. CPU, performans artışı için ana fabrika (OP durumunda) G / Ç şişe boynu olmadığından ve OP herhangi bir bellek boyutu değişikliğinden bahsetmedi. Ama neden? Veya nasıl?

Ek faktör

  1. Yazma Okuma'dan daha fazla zaman alır Bu, VM ve ana bilgisayar için aynıdır. Son derece basit terimlerle ifade edin: VM, ana bilgisayarın okuma ve yazma işlemini bitirmesini bekler.

Daha fazla işlemci atandığında ne olur "monitoring"?

Daha "monitoring"fazla CPU tahsis edildiğinde , daha fazla işlem gücü kazanır, ancak G / Ç için daha fazla işlem süresi kazanır .

Bunun rsynctek bir iş parçacığı programı olmasıyla bir ilgisi yoktur .

Artan CPU gücünü kullanan veya daha kesin olarak artan işlem süresini kullanan G / Ç katmanıdır.

"monitoring"Test sırasında cpu izleme programı (örn. Üst) kullanılırsa, biri gösterilmez, ancak tüm cpu kullanımı artar ve ayrıca% wa. % wa, I / O için bekleme süresi harcamasıdır.

Bu performans artışı yalnızca ana makine I / O değeriniz maks. dışarı.

KVM sitesinde cpu zamanlamasını bulamıyorum, ancak KVM'nin CFS ve cgroups kullandığını belirten bu blog var , aşağıdaki alıntı

KVM içinde, her vcpu, sanallaştırma için gerekli 'duman ve aynaları' oluşturmak için donanım yardımı kullanan bir Linux işlemiyle eşleştirilir. Bu nedenle, bir vcpu, CFS için ve diğer bir deyişle, bir kaynak yöneticisi olarak, Linux'un kaynak tahsisini yönetmesine izin veren - tipik olarak kısıtlama tahsisleri ayarlamak için - orantılı olarak başka bir süreçtir. cgroups ayrıca Bellek, ağ ve G / Ç için de geçerlidir. İşlem grupları, hiyerarşik işlem gruplarına kaynak ayırma gereksinimleri uygulamak için bir zamanlama grubunun parçası haline getirilebilir.

Özetle, daha fazla cpu = daha fazla cpu süresi = belirli bir süre içinde daha fazla I / O zaman aralığı.


Bu cevabı yazdığınız için teşekkürler. "Daha fazla vCPU, G / Ç için daha fazla işlem süresi anlamına geliyor" aradığım açıklama. Ödül değerinde!
Valentin
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.