Apakah ada pengaturan optimal untuk jumlah core CPU yang terpapar VM?

23

VirtualBox, dan mungkin perangkat lunak VM lainnya, memungkinkan pengguna untuk menentukan jumlah CPU yang terpapar pada VM. Dalam kasus khusus saya, saya memiliki CPU dual core, dengan Windows 7 64-bit berjalan secara native, dan Ubuntu 9,04 64-bit sebagai VM.

File bantuan menyarankan untuk tidak mengatur ini di atas jumlah core fisik yang tersedia. Ini masuk akal. Jadi, apakah lebih baik mengalokasikan 1 atau 2 core CPU? Apakah ini sepenuhnya tergantung pada beban CPU asli?

sblair
sumber

Jawaban:

6

Ini sepenuhnya tergantung pada apa yang dilakukan OS tamu. Dalam pengalaman pribadi saya seorang VM menjalankan satu program (membangun server, server trac, SVN, dll) sehingga tidak ada alasan untuk mengaturnya di atas satu.

Sebuah kasus yang mungkin terjadi jika itu adalah pengguna akhir di katakanlah Universitas yang menggunakan OS tamu sebagai throwaway (yaitu TA) maka mungkin mengaturnya ke lebih dari satu.

Nate
sumber
Jadi, dengan kata lain: untuk sistem sementara, Anda juga dapat memaksimalkan kuota inti CPU; tetapi untuk penggunaan "normal" atau tipikal, atur ke satu inti (jadi tidak terlalu mengganggu kinerja OS host)?
sblair
18

Informasi dalam jawaban ini tidak lagi benar . Itu benar pada hari-hari penjadwalan bersama yang ketat, tetapi tidak lagi demikian.

Saya menyimpan jawaban di bawah ini untuk kemakmuran, tapi tolong jangan mengandalkan itu agar akurat untuk hypervisor modern.


Anda tidak boleh menetapkan semua inti Anda sebagai vCPU di mesin virtual.

Jika VM meminta setiap waktu CPU, VMWare memiliki mengalokasikan baik semua yang vCPUs, atau tidak ada dari vCPUs tersebut.

Artinya, pada sistem 4-inti jika Anda mengalokasikan semua 4 core, maka hanya tuan rumah, atau tamu, yang dapat dialokasikan waktu prosesor, bukan keduanya pada saat yang sama.

Ini secara absolut akan merusak kinerja di kedua lingkungan.

Jangan ragu untuk mengalokasikan angka ganjil dari inti (katakanlah, 3). Rasanya aneh, tapi itu opsi yang sepenuhnya sah.

Secara umum saya tidak pernah mengalokasikan lebih dari (n / 2) vCPU (dalam kasus Anda, 2) - tetapi saya biasanya mengalokasikan core pada server dengan antara 12 dan 32 core di mana Anda dapat mengalokasikan sejumlah besar vCPU tanpa dampak besar.

Mark Henderson
sumber
inilah satu-satunya jawaban sejauh ini yang ditulis dengan tingkat otoritas apa pun. terima kasih telah berbagi pengalaman Anda.
G-Wiz
5
-1: Tidak konsisten dengan pengalaman saya. VM adalah proses yang waktu CPU-nya dapat dijadwalkan dengan cara yang sama seperti proses lain pada host. Anda dapat menyesuaikan prioritas proses VM pada host, dan sistem akan menyeimbangkan beban dengan tepat.
bwDraco
2
( lanjutan ) Katakanlah Anda memiliki server 16-inti. Contoh konfigurasi adalah 4 VM, masing-masing dikonfigurasikan untuk 8 core. Walaupun ini mungkin tampak terlalu banyak core virtual, ini memungkinkan masing-masing VM untuk mengukur dengan lebih baik pada beban kerja yang lebih berat. Jika pemanfaatan gabungan melebihi jumlah inti fisik, tuan rumah akan menyeimbangkan beban yang sesuai. Begitulah cara virtualisasi dapat meningkatkan throughput dan mengurangi biaya - dengan memanfaatkan sebagian besar perangkat keras host.
bwDraco
@DragonLord - jawaban ini lebih dari 2 tahun pada pertanyaan yang hampir 4 tahun, dan mungkin didasarkan pada informasi yang sudah usang. Saya mengacu pada "Penjadwalan Co-Strict" dari ESX tapi saya tidak ingat berapa lama informasi itu, dan saya belum tetap up to date dengan bagaimana penjadwalan CPU telah berubah dalam beberapa tahun terakhir.
Mark Henderson
1
Hanya ingin memberikan catatan di sini bahwa pada Ubuntu 14.04 dan 16.04, ada masalah boot dan crash jika Anda mengatur jumlah CPU ke angka ganjil. Saya belum bisa mencari tahu mengapa karena saya hanya memutuskan untuk menyimpannya di nomor genap untuk menghindari masalah.
Dorian
3

Jumlah inti yang terpapar pada CPU tamu tidak mempengaruhi kinerja sebanyak yang Anda inginkan. Ini hanya menyesuaikan jumlah core yang "dilihat" CPU tamu.

Tergantung pada bagaimana emulator diatur, itu benar-benar bisa setengah kinerja mesin virtual, tidak melakukan apa-apa, atau hanya berdampak pada cara OS tamu / aplikasi membagi penjadwalan thread mereka.

Yang terbaik adalah membiarkannya ke default. Jika Anda mengalami masalah kinerja pada PC host, maka Anda dapat dengan mudah menyesuaikan prioritas proses dengan Windows Task Manager.

Penerobosan
sumber
3

Seperti yang disebutkan Nate, selama VM Anda sebagian besar akan berfungsi menjalankan proses single-threaded, ada sedikit alasan untuk mengalokasikan lebih dari satu inti.

Namun, jika Anda berencana untuk menggunakannya dengan cara yang dapat mengambil manfaat dari lebih banyak inti (program multi-threaded, banyak program paralel, ..), ceritanya lebih rumit. Saya sebelumnya berasumsi bahwa menggunakan setengah dari CPU Anda untuk VM Anda adalah ide yang bagus. Ternyata ini tidak selalu optimal.

Satu-satunya cara untuk memastikan adalah menjalankan benchmark .. Saya tidak tahu mengapa, tetapi dalam sistem Core2 Quad saya (yang memiliki dukungan VT-x, pager bersarang, ..), sebenarnya menggunakan 1 dari 4 core berkinerja lebih baik daripada menggunakan 2 core atau lebih! Saya melihat ini hanya pada saat start-up dari VM, tetapi juga selama benchmark kompilasi.

Dengan hasil perangkat keras lainnya berbeda. Saya juga memiliki i7 dengan 8 core, dan kinerja tampaknya berskala lebih baik dengan jumlah core di sana (menggunakan 4 di sana dengan senang hati).

Kiat saya: patok perangkat keras baru terlebih dahulu.

Arnout
sumber
1

Saya mempercayai penjadwal OS dan hanya mengatur VM ke # core fisik, kecuali Anda tahu bahwa Anda selalu ingin host memiliki inti yang berpotensi idle saat Anda sibuk di VM.

Andrew Coleson
sumber
1

Ini tergantung pada apa yang ingin Anda lakukan pada mesin virtual dan juga pada mesin fisik. Jika Anda perlu menggunakan mesin virtual saat sistem operasi host sedang digunakan untuk beberapa aktivitas lain, mungkin lebih baik menggunakan dua core prosesor untuk VM sehingga host memiliki dua yang tersisa jika VM berada di bawah beban penuh. Di sisi lain, jika Anda bekerja terutama pada VM, Anda dapat menggunakan semua inti prosesor.

Namun, kecuali jika tamu dapat menggunakan keempat inti sekaligus, Anda dapat menggunakan semuanya dengan aman sambil terus bekerja pada OS host. Ingatlah bahwa Anda selalu dapat menyesuaikan prioritas proses VM saat sedang berjalan di sistem operasi host, dan sistem akan menyeimbangkan beban yang sesuai.

bwDraco
sumber
Ini berdasarkan pengalaman saya dengan VirtualBox. Karena saya tidak terbiasa dengan produk-produk VMware, saya mungkin salah; jika demikian, saya akan menghapus jawaban ini.
bwDraco
0

ya, saya juga mengatakan itu tergantung. Tetapi saya akan mengatakan apa yang saya sukai. Di tempat kerja saya memiliki CPU quad core. Jadi untuk gambar virtual saya (win7), saya telah mengalokasikan dua CPU. Dengan begitu, saya dapat menggunakan mesin host dan mesin virtual secara bersamaan, dan mereka masing-masing memiliki sumber daya CPU yang sama.

Joel Martinez
sumber