Apakah VM dengan 2 CPU benar-benar lebih cepat dari satu dengan 4 CPU?

67

TI kami menciptakan VM dengan 2 CPU yang dialokasikan daripada 4 yang saya minta. Alasan mereka adalah bahwa VM berkinerja lebih baik dengan 2 CPU daripada 4 (menurut mereka). Alasannya adalah bahwa hypervisor VM (VMWare dalam kasus ini) menunggu semua CPU tersedia sebelum menggunakan salah satu dari mereka. Jadi, perlu waktu lebih lama untuk menunggu 4 daripada 2 CPU.

Apakah pernyataan ini masuk akal?

AngryHacker
sumber

Jawaban:

62

Ini dulu benar, tetapi tidak lagi benar secara eksklusif.

Yang mereka maksud adalah Penjadwalan Bersama yang Ketat .

Yang paling penting dari semuanya, sementara dalam algoritma penjadwalan bersama yang ketat, keberadaan vCPU yang lagging menyebabkan seluruh mesin virtual terhenti bersama. Dalam algoritme penjadwalan bersama yang rileks, vCPU terkemuka memutuskan apakah harus menghentikan sendiri berdasarkan kemiringan terhadap saudara kandung yang paling lambat

Sekarang, jika tuan rumah hanya memiliki 4 utas, maka Anda akan konyol untuk mengalokasikan semuanya. Jika memiliki dua prosesor dan 4 utas per prosesor, maka Anda mungkin tidak ingin mengalokasikan semua konten dari satu prosesor, karena hypervisor Anda harus mencoba menjaga vCPU pada node NUMA yang sama untuk membuat akses memori lebih cepat, dan Anda membuat pekerjaan ini lebih sulit dengan mengalokasikan seluruh soket ke satu VM (Lihat halaman 12 dari PDF di atas).

Jadi ada beberapa skenario di mana lebih sedikit vCPU dapat bekerja lebih baik daripada lebih banyak, tetapi itu tidak benar 100% dari waktu.

Semua yang dikatakan dan dilakukan, saya sangat jarang mengalokasikan lebih dari 3 vCPU per tamu. Semua orang mendapat 2 secara default, 3 jika itu adalah beban kerja yang berat, dan 4 untuk hal-hal seperti SQL Server atau VM pemrosesan batch yang sangat berat, atau server terminal dengan banyak pengguna.

Mark Henderson
sumber
3
Selain itu - bahkan terlepas dari rintangan virtualisasi, umumnya sulit untuk menulis perangkat lunak yang mengeksploitasi paralelisme. Jika perangkat lunak Anda tidak cukup baik, mungkin sebenarnya lebih baik memiliki empat host virtual yang menjalankan satu instance perangkat lunak masing-masing daripada satu host yang menjalankan empat utas eksekusi.
Luaan
4
@Luaan Kotak itu memiliki SQL Server, jadi saya berasumsi mereka punya beberapa perangkat lunak yang bagus di sana.
AngryHacker
1
@ AngryHacker ya SQL server dapat menggunakan semua 4 core dengan sangat efisien dengan asumsi Anda memiliki MAXDOPpengaturan yang sesuai . Namun tergantung pada beban kerjanya, server SQL yang terlalu sering membayar pajak seringkali merupakan tanda desain database yang buruk - indeks buruk, tidak ada indeks berkerumun, terlalu banyak indeks, tidak ada optimasi, dll. (Tidak selalu, tetapi sering).
Mark Henderson
1
@Luaan Itu masih paralelisme ... hanya dengan latensi yang jauh lebih tinggi jika mereka perlu berbicara satu sama lain. :)
reirab
@ MarkHenderson Dioptimalkan dengan cukup baik, tetapi beberapa beban kerja terlalu besar untuk ditangani dengan mudah oleh 2 CPU ditambah satu ton permintaan lain pada saat yang sama.
AngryHacker
15

Ini sangat tergantung pada hypervisor yang mendasarinya dan admin yang menjalankannya, izinkan saya menjelaskan:

  1. Ini praktik yang buruk untuk hanya memberi Anda 4 CPU hanya karena Anda memintanya. Secara umum, Anda merasa perlu 4; tetapi pemantauan sumber daya mengatakan Anda hanya perlu 1.
  2. VMware ESXi misalnya membutuhkan penguncian semua pCPU ketika vCPU membuat permintaan untuk sumber daya CPU ; jadi pada hypervisor ini buruk untuk kinerja. KVM tidak melakukan penguncian seperti ESXi; menggunakan penjadwal kernel yang mendasarinya, tetapi masih dalam jangka panjang dapat membuat pertikaian CPU.
  3. Jika Anda membangun sistem dari awal dengan 4 CPU Anda tidak benar-benar scaling keluar, tetapi naik (yang merupakan praktik buruk terutama pada VM). Anda mungkin ingin memeriksa bagaimana Anda merancang apa pun yang sedang Anda kerjakan sehingga dapat dibangun untuk menskalakan infrastruktur cloud modern saat ini.

Apa yang bisa Anda pelajari dari ini? Selalu buat VM dengan sumber daya minimal dan tingkatkan sesuai kebutuhan. Selalu skala alih-alih naik dan Anda akan dapat menjalankan aplikasi Anda di mana saja.

Karena penguncian yang bisa dialami dengan hypervisor, memang benar bahwa 2 CPU bisa lebih cepat dari 4 CPU.


sumber
4

Ya, pernyataan itu masuk akal secara umum. Namun, itu adalah sesuatu yang harus Anda uji untuk konfigurasi dan beban kerja Anda yang sebenarnya. Terkadang lebih banyak CPU lebih baik jika Anda benar-benar dapat memanfaatkannya. Namun, jika Anda tidak benar-benar memiliki paralelisme sebanyak itu, VM yang dikonfigurasikan dengan lebih sedikit CPU akan sering berkinerja lebih baik karena menghindari perlambatan karena CPU Ready State berhenti.

Saya telah mengurangi vCPU pada sejumlah VM kami dan telah melihat peningkatan throughput pada mayoritas. Segelintir menjadi lebih buruk dan perlu dihadapkan pada hitungan vCPU.

Brian Knoblauch
sumber