Vraag Is een VM met 2 CPU's echt sneller dan een met 4 CPU's?


Onze IT creëerde een VM met 2 CPU's toegewezen in plaats van de 4 die ik had aangevraagd. Hun reden is dat de VM beter presteert met 2 CPU's in plaats van 4 (volgens hen). De reden is dat de VM-hypervisor (in dit geval VMWare) wacht totdat alle CPU's beschikbaar zijn voordat een van hen wordt ingeschakeld. Het duurt dus langer om te wachten op 4 in plaats van 2 CPU's.

Klopt deze verklaring?


65
2018-04-30 05:43


oorsprong




antwoorden:


Dit was vroeger waar, maar is niet langer exclusief waar.

Waar ze naar verwijzen is Strenge co-planning.

Het belangrijkste van alles, terwijl in het strikte algoritme voor co-scheduling, het bestaan ​​van een achterblijvende vCPU de oorzaak is   hele virtuele machine om gelijktijdig te worden gestopt. In het ontspannen algoritme voor co-scheduling beslist een leidende vCPU of   het moet zichzelf co-stopzetten op basis van de scheeftrekking tegen de langzaamste zuster-vCPU

Nu, als de host heeft maar 4 threads, dan zou je dom zijn om ze allemaal toe te wijzen. Als het heeft twee processors en 4 threads per processor, dan jij macht niet de hele inhoud van een enkele processor wilt toewijzen, omdat uw hypervisor moet proberen vCPU's op hetzelfde NUMA-knooppunt te houden om geheugentoegang sneller te maken, en u maakt deze taak moeilijker door een hele socket toe te wijzen aan één VM (Zie pagina 12 van die PDF hierboven).

Er zijn dus scenario's met minder vCPU's kan presteren beter dan meer, maar het is niet 100% van de tijd waar.

Alles wat gezegd en gedaan, ik schaar zeer zelden meer dan 3 vCPU's per gast. Iedereen krijgt er standaard 2, 3 als het een zware werklast is en 4 voor zaken als SQL-servers of echt zware batchverwerking VM's, of een terminalserver met veel gebruikers.


62
2018-04-30 06:05



Even terzijde - zelfs afgezien van virtualiseringshindernissen is het over het algemeen lastig om software te schrijven die parallellisme benut. Als uw softwarebeambten niet goed genoeg zijn, is het misschien beter om vier virtuele hosts één instance van de software te laten draaien, dan één host die vier threads van uitvoering uitvoert. - Luaan
@Luaan De box heeft SQL Server erop staan, dus ik neem aan dat ze daar een aantal goede softwarebeambten hebben. - AngryHacker
@AngryHacker ja SQL-server kan alle 4 kernen heel efficiënt gebruiken, ervan uitgaande dat je het gepast hebt MAXDOP instellingen. Afhankelijk van de werkbelasting is een overdreven belastbare SQL-server echter vaak een teken van slecht databaseontwerp - slechte indexen, geen geclusterde indexen, te veel indexen, geen optimalisatie, etc. (niet altijd, maar vaak). - Mark Henderson♦
@Luaan Dat is nog steeds parallellisme ... alleen met veel hogere latentie als ze met elkaar moeten praten. :) - reirab
@MarkHenderson Het is vrij goed geoptimaliseerd, maar sommige workloads zijn gewoon te groot om gemakkelijk te worden afgehandeld door 2 CPU's plus een hoop andere query's tegelijkertijd. - AngryHacker


Dit hangt grotendeels af van de onderliggende hypervisor en de beheerders die het uitvoeren, ik zal het uitleggen:

  1. Het is een slechte gewoonte om je slechts 4 CPU's willekeurig te geven, alleen omdat je het hebt aangevraagd. Over het algemeen, jij denken je hebt er 4 nodig; maar resource monitoring zegt dat je er maar 1 nodig hebt.
  2. VMware ESXi bijvoorbeeld vereist vergrendeling van alle pCPU's wanneer een vCPU een aanvraag indient voor CPU-bronnen; dus op deze hypervisor is het slecht voor de prestaties. KVM doet geen vergrendeling zoals ESXi doet; het gebruikt de onderliggende kernelplanner, maar kan op de lange termijn CPU-conflicten veroorzaken.
  3. Als je vanaf het begin systemen aan het bouwen bent met 4 CPU's, dan ben je niet echt aan het opschalen, maar aan het bouwen (wat een slechte oefening is, vooral op VM's). Misschien wilt u nagaan hoe u aan het ontwerpen bent, waar u ook aan werkt, zodat het op de moderne moderne cloudinfrastructuren kan worden gebouwd.

Wat kun je hieruit leren? Creëer altijd VM's met minimale middelen en verhoog deze waar nodig. Schaal altijd uit in plaats van omhoog en u kunt uw app overal uitvoeren.

Vanwege de vergrendeling die kan worden ervaren met de hypervisor, is het inderdaad zo dat 2 CPU's sneller kunnen zijn dan 4 CPU's.


14
2018-04-30 19:56





Ja, de verklaring is in het algemeen logisch. Het is echter iets dat u moet testen voor uw exacte configuratie en werkbelasting. Soms is meer CPU's beter als je er daadwerkelijk gebruik van kunt maken. Als u echter niet zoveel parallellisme hebt, zal een VM die met minder CPU's is geconfigureerd, vaak iets beter presteren, omdat vertragingen als gevolg van vertragingen in de CPU-status worden voorkomen.

Ik heb de vCPU's op een aantal van onze VM's verlaagd en de doorvoer op de meerderheid verbeterd. Een handvol werd slechter en moest worden opgeschroefd op basis van vCPU.


3
2018-04-30 19:41