X86 / x64 sanallaştırma ne kadar ek yüke sahip?


24

X86 / x64 sanallaştırma (muhtemelen VirtualBox, muhtemelen VMWare, kesinlikle paravirtualization kullanıyorum) kullanacağım genel gider, aşağıdaki donanımların her birinde Intel donanım sanallaştırmasını kullanan bir Win64 sunucusu ve Linux64 konuğu var mı?

  • Tamamen CPU'ya bağlı, kullanıcı modu 64 bit kod

  • Tamamen CPU'ya bağlı, kullanıcı modu 32 bit kod

  • Sabit sürücüye G / Ç Dosyası (Çoğunlukla gecikme yerine verimi önemsiyorum)

  • Ağ G / Ç

  • İplik senkronizasyonu ilkeleri (muteksler, semaforlar, koşul değişkenleri)

  • İş parçacığı bağlam anahtarları

  • Atomik işlemler ( lockönek kullanarak, karşılaştır ve değiştir gibi şeyler)

Öncelikle donanım destekli x64 davasıyla (hem Intel hem de AMD) ilgileniyorum ancak yardımsız ikili çeviri ve x86 (yani 32-bit ev sahibi ve konuk) durumları hakkında da bir şeyler duymak sorun olmaz. Paravirtualization ile ilgilenmiyorum.


(1) "x86", 32 bit anlamına gelir. 64 bit kodunu çalıştıramazsınız. AMD64 (x64 olarak da bilinir) sanallaştırma, donanım uzantıları gerektirdiğinden farklı sınırlamalara sahiptir. (2) İkili çeviri (yalnızca x86) veya donanım destekli sanallaştırma (VT) ile x86 sanallaştırma mı demek istiyorsunuz?
Skyhawk

@ Miles: Soruyu açıklığa kavuşturdum.
dsimcha

Yanıtlar:


26

Seninki gibi sorular için basit ve kesin bir cevap olmadığını buldum. Her sanallaştırma çözümü, belirli performans testlerinde farklı davranır. Ayrıca, disk G / Ç çıkışı gibi testler birçok farklı teste bölünebilir (okuma, yazma, yeniden yazma, ...) ve sonuçlar çözümden çözüme ve senaryodan senaryoya değişecektir. Bu nedenle, bir çözümü disk G / Ç için en hızlı olarak işaret etmek önemsiz değildir ve bu nedenle disk G / Ç için genel gider gibi etiketler için kesin bir cevap yoktur.

Farklı kıyaslama testleri arasındaki ilişkiyi bulmaya çalışırken daha karmaşık hale gelir. Test ettiğim çözümlerin hiçbiri mikro işlem testlerinde iyi bir performans göstermedi. Örneğin: VM içinde "gettimeofday ()" adlı bir çağrı, donanımdan ziyade ortalama 11,5 kat daha fazla saat döngüsü aldı. Hipervizörler gerçek dünya uygulamaları için optimize edilmiştir ve mikro işlemlerde iyi performans göstermemektedir. Bu, uygulamanız için gerçek dünyadaki uygulamalara daha uygun olabilecek bir sorun olmayabilir. Yani, mikro-işlemle bitirmek için 1000 saat döngüsünden daha az zaman harcayan herhangi bir uygulamanın (2.6 GHz CPU için, 385 nanosaniye veya 3.85e-7 saniyede 1.000 saat döngüsü harcanması anlamına gelir).

X86 mimarisi için veri merkezi konsolidasyonu için dört ana çözüm üzerinde kapsamlı testler yaptım. VM'lerin içindeki performansı donanım performansı ile karşılaştırarak neredeyse 3000 test yaptım. Donanımda ölçülen maksimum performans ile VM (ler) içinde ölçülen maksimum performansın farkını 'genel gider' olarak adlandırdım.

Çözümler:

  • VMWare ESXi 5
  • Microsoft Hyper-V Windows 2008 R2 SP1
  • Citrix XenServer 6
  • Red Hat Kurumsal Sanallaştırma 2.2

Konuk işletim sistemleri:

  • Microsoft Windows 2008 R2 64 bit
  • Red Hat Enterprise Linux 6.1 64 bit

Test Bilgisi:

  • Sunucular: Her biri 8 GB RAM, 2X Intel Xeon E5440 CPU ve dört gigabit Ethernet bağlantı noktasına sahip 2X Sun Fire X4150
  • Diskler: gigabit ethernet üzerinden iXC üzerinden 6X 136GB SAS diskleri

Benchmark Yazılımı:

  • CPU ve Bellek: Hem 32 hem de 64 bit için Linpack benchmark . Bu CPU ve hafıza yoğun.

  • Disk G / Ç ve Gecikme: Bonnie ++

  • Ağ Giriş / Çıkış: Netperf: TCP_STREAM, TCP_RR, TCP_CRR, UDP_RR ve UDP_STREAM

  • Mikro işlemler: rdtscbench : Sistem çağrıları, süreçler arası boru iletişimi

Ortalamalar şu parametrelerle hesaplanır:

  • CPU ve Bellek: ORTALAMA (HPL32, HPL64)

  • Disk G / Ç: ORTALAMA (put_block, yeniden yazma, get_block)

  • Ağ G / Ç: ORTALAMA (tcp_crr, tcp_rr, tcp_stream, udp_rr, udp_stream)

  • Mikro-işlemler ORTALAMA (getpid (), sysconf (), gettimeofday (), malloc [1M], malloc [1G], 2pipes [], simplemath [])

Test senaryom için, ölçümlerimi kullanarak dört sanallaştırma çözümünün sonuçlarının ortalamaları şunlardır:

VM katmanı ek yükü, Linux misafir:

  • CPU ve Bellek:% 14,36

  • Ağ Giriş / Çıkış:% 24,46

  • Disk G / Ç:% 8.84

  • Okuma için disk gecikmesi: 2,41 kat daha yavaş

  • Mikro işlem yürütme süresi: 10.84 kat daha yavaş

VM katmanı ek yükü, Windows misafir:

  • Hem 32 hem de 64 bit için CPU ve Bellek ortalaması:% 13,06

  • Ağ G / Ç:% 35,27

  • Disk G / Ç:% 15.20

Lütfen bu değerlerin genel olduğunu ve belirli durumlar senaryosunu yansıtmadığını unutmayın.

Lütfen makalenin tamamına göz atın: http://petersenna.com/en/projects/81-performance-overhead-and-comparative-performance-of-4-virtualization-solutions


2
Bu makale güncel değil
dyasny

1
For a 2.6 GHz CPU, 1,000 clock cycles are spent in 23 milliseconds1000 saatin harcadığı saniye sayısını bulmak için bu, 1.000 ile 2.600.000 arasında basit bir bölme olmamalıdır mı? (ki değil 23 milisaniye)
dvdvorle

2
@Bay. Mutlu, haklısın. 385 nanosaniye ile aldım: 1000/2600000000 = 0.000000385 = 385 nanosaniye. Buna katılıyor musun? Bunu gösterdiğin için teşekkürler.
Peter Senna

@dyasny, testleri güncellenmiş sürümlerle tekrarlamak için donanım arıyorum. Nerede bulabilirim hakkında fikrin var mı?
Peter Senna

donanım bir mağazada kolayca bulunabilir
dyasny

4

Sorunuzda çok fazla değişken var, ancak bunu daraltmayı deneyebilirim. VMware ESX ile gittiğinizi varsayalım, her şeyi doğru yaptınız - en yeni işlemciliği destekleyen CPU, paravirtualize depolama ve ağ sürücüleri, bol miktarda bellek ile VMware araçları. Şimdi bu kurulumda tek bir sanal makine çalıştırdığınızı varsayalım. Deneyimlerime göre, CPU'ya bağlı iş yükü için CPU hızının ~% 90'ına sahip olmalısınız. Ağ hızları hakkında size çok fazla şey söyleyemem, çünkü 1Gbps bağlantı kullanıyoruz ve problemsiz doyurabiliyorum, 10Gbps bağlantıda farklı olabilir, ancak bunlardan hiçbirine sahip değiliz. Depolama verimliliği, yerel depolama ile depolama performansının yaklaşık ~% 80'ini bulabildiğim için, depolama türüne göre değişir, ancak 1 Gb / sn NFS için buradaki ağ tıkanıklığı olduğundan% 100'e yakındır. Diğer metrikler hakkında söyleyemem,

Bu sayılar yaklaşık değerlerdir ve yük türünüze, donanımınıza ve ağınıza büyük ölçüde bağlıdır. Sunucuda birden fazla iş yükünü çalıştırdığınızda daha da kötüye gidiyor. Ancak burada söylemek istediğim şey ideal koşullar altında yerel performansın% 90'ına yaklaşabilmeniz gerektiği.

Ayrıca deneyimime göre, yüksek performanslı uygulamalar için daha büyük sorun gecikmedir ve özellikle istemci sunucu uygulamaları için geçerlidir. 30'dan fazla müşteriden istek alan, kısa hesaplamalar yapan ve sonuç veren bir hesaplama motorumuz var. Çıplak metalde genellikle CPU'yu% 100'e zorlar, ancak VMware'deki aynı sunucu yalnızca% 60-80'e kadar CPU yükleyebilir ve bunun nedeni, isteklerin / yanıtların ele alınmasındaki gecikmedir.


Tek bir VM ile 10 GbE'lik bir bağlantıyı dolaştırmanın çok zor olduğu deneyimlerinden konuşabilirim. 1Gbps'lik bir bağlantıyı 10Gbe üzerinden kolayca doyurabilen VMWare FT'yi kullandık ve doygunluğa yaklaşamadım.
Mark Henderson

0

Bağlam değiştirme ve atomik işlemler gibi temel ilkellerin performansını incelemedim, ancak son zamanlarda farklı hiper denetçilerle yaptığım kaba kuvvet testinin sonuçları. Çoğunlukla CPU ve RAM bant genişliği kısıtlıysanız beklentilerinizin bir göstergesi olmalıdır.

http://www.altechnative.net/2012/08/04/virtual-performance-part-1-vmware/


2
Xen ve KVM hakkında biraz bilgi sahibi olmanız harika ... Ama en popüler iki Hiper Yönetici ne olacak ?! Tamamen kayıplar. Birkaç Tip 2 Hiper Yönetici de dahil ettiniz, hiçbir aklı başında SysAdmin bunu üretim için kullanmaz.
Chris S

Aşağı oy verdi. Bağlantı öldü.
Tim Duncklee
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.