2 CPU'lu bir VM 4 CPU'lu olandan gerçekten daha hızlı mı?


67

BT’miz, talep ettiğim 4 yerine 2 işlemcili bir VM oluşturdu. Sebepleri, VM'nin (yerine) 4 yerine 2 CPU ile daha iyi performans göstermesidir. Bunun nedeni, VM hipervizörünün (bu durumda VMWare), herhangi birini devreye almadan önce tüm CPU'ların hazır olmasını beklemesidir. Bu nedenle, 2 CPU yerine 4 beklemek daha uzun sürer.

Bu ifade mantıklı geliyor mu?

Yanıtlar:


62

Bu eskiden doğruydu, ancak artık yalnızca doğru değil.

Ne kastediyorlar? Katı Eş Zamanlama .

Hepsinden önemlisi, katı birlikte programlama algoritmasında, gecikmeli bir vCPU'nun varlığı tüm sanal makinenin birlikte durdurulmasına neden olur. Rahat bir eş zamanlama algoritmasında, öncü bir vCPU en yavaş kardeş vCPU'ya karşı eğriltmeye dayanarak kendisini durdurması gerekip gerekmediğine karar verir.

Şimdi, eğer ev sahibi sadece 4 iş parçacığına sahipse, hepsini ayırmak aptalca olur. Eğer bu iki işlemci ve işlemci başına 4 konuları vardır, o zaman belki senin hiper yönetici daha hızlı bellek erişimi yapmak için aynı NUMA düğümde vCPUs tutmaya çalışmalısınız gibi tek işlemcinin tüm içeriğini tahsis etmek istemiyor ve sen bir soketi tek bir VM'ye tahsis ederek bu işi zorlaştırır (yukarıdaki PDF'nin 12. sayfasına bakın).

Yani daha az vCPUs senaryolar vardır olabilir daha daha iyi performans, ancak zamanın gerçek% 100 değil.

Tüm söylenen ve yapılanlar, misafir başına 3 vCPU'dan çok nadiren kaynak ayırırım. Herkes varsayılan olarak 2, ağır bir iş yükü ise 3, SQL Sunucular veya gerçekten yoğun işlem yapan VM'ler veya çok kullanıcılı bir terminal sunucusu için 4 alır.


3
Sadece bir kenara - sanallaştırma engellerinin dışında bile, paralellikten yararlanan bir yazılım yazmak genellikle zordur. Yazılım elemanlarınız yeterince iyi değilse, yazılımın bir örneğini çalıştıran dört sanal ana bilgisayarın her biri dört yürütme iş parçacığı çalıştıran bir ana bilgisayarı çalıştırması daha iyi olabilir.
Luaan

4
@Luaan Kutuda SQL Server var, bu yüzden orada bazı iyi yazılım adamları var sanırım.
AngryHacker

1
@AngryHacker yes SQL server, uygun MAXDOPayarlara sahip olduğunuzu varsayarak 4 çekirdeğin tümünü verimli bir şekilde kullanabilir . Ancak, iş yüküne bağlı olarak, aşırı vergilendirilmiş bir SQL sunucusu, genellikle kötü veritabanı tasarımının bir işaretidir - kötü dizinler, kümelenmiş dizinler, çok fazla dizin, optimizasyon yok, vb. (Her zaman değil, ancak sık sık).
Mark Henderson

1
@Luaan Bu hala paralellik ... birbirleriyle konuşmaları gerektiğinde çok daha fazla gecikmeyle. :)
reirab

@MarkHenderson Oldukça iyi bir şekilde optimize edilmiş, ancak bazı iş yükleri 2 CPU ve aynı anda bir ton başka sorgu tarafından kolayca ele alınamayacak kadar büyük.
AngryHacker

15

Bu büyük ölçüde altta yatan hipervizöre ve onu yöneten yöneticilere bağlı olarak açıklayayım:

  1. İstediğiniz için sadece keyfi bir şekilde 4 CPU'su vermek kötü bir uygulamadır. Genel olarak konuşursak, 4'e ihtiyacın olduğunu düşünüyorsun ; ancak kaynak izleme, yalnızca 1’e ihtiyacınız olduğunu söylüyor.
  2. Örneğin , VMware ESXi , bir vCPU CPU kaynakları için bir talepte bulunduğunda tüm pCPU'ların kilitlenmesini gerektirir ; yani bu hiper yönetici üzerinde performans için kötü. KVM, ESXi'nin yaptığı gibi kilitleme yapmaz; temel çekirdek zamanlayıcıyı kullanır, ancak yine de uzun vadede CPU çekişmesi oluşturabilir.
  3. 4 CPU'lu sistemlerle en baştan sistemler kuruyorsanız, gerçekten ölçeklendirilmiyorsunuzdur, ancak bu durum yükseliyor (özellikle VM'lerde kötü bir uygulama). Üzerinde çalıştığınız şeyin nasıl mimarlık yaptığını kontrol etmek isteyebilirsiniz, böylece günümüzün modern bulut altyapılarına ölçeklenebilir hale getirilebilir.

Bundan ne öğrenebilirsin? Her zaman en az kaynakla VM oluşturun ve gerektiğinde artırın. Her zaman yukarı yerine ölçeklendir ve uygulamanızı herhangi bir yerde çalıştırabilirsiniz.

Hiper yönetici ile yaşanabilecek kilitleme nedeniyle, 2 işlemcinin 4 işlemciden daha hızlı olabileceği doğrudur.


4

Evet, ifade genel olarak anlamlıdır. Ancak, tam yapılandırmanız ve iş yükünüz için test etmeniz gereken bir şey. Onlardan gerçekten faydalanabiliyorsanız, bazen daha fazla CPU daha iyidir. Ancak, aslında bu kadar paralelliğe sahip değilseniz, daha az CPU ile yapılandırılmış bir VM, CPU Hazır Durumu duraklamaları nedeniyle yavaşlamaları önlediğinden genellikle biraz daha iyi performans gösterir.

Bazı VM'lerde vCPU'ları düşürdüm ve çoğunlukta verim artışı sağladığını gördüm. Bir avuç daha kötüye gitti ve vCPU sayımına çarptı.

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.