Mesin virtual di setiap hypervisor yang saya tahu dapat menggunakan CPU virtual tambahan untuk menjadwalkan utas eksekusi tambahan secara bersamaan.
Persisnya lapisan abstraksi antara mesin fisik dan mesin virtual yang membuatnya tidak berfungsi seperti yang Anda gambarkan. VM tidak mengetahui berapa banyak core yang dimiliki mesin fisik. VM tidak "melihat" CPU fisik (atau inti) pada mesin fisik. Hypervisor memberikan VM berapa banyak CPU virtual, dan OS tamu menggunakan CPU virtual tersebut untuk menjadwalkan utas tambahan bersamaan ... Jumlah total CPU virtual yang diberikan hypervisor ke mesin virtual bahkan dapat melebihi jumlah CPU fisik / core di mesin.
Dengan kata lain, mesin virtual, ketika diberikan vCPU tunggal, menjadwalkan utasnya seolah-olah hanya memiliki satu CPU. Tidak masalah berapa banyak inti yang ada di mesin fisik yang mendasarinya. (Meskipun perlu dicatat bahwa mesin fisik dapat menjadwalkan satu thread VM pada satu core fisik untuk satu quantum thread, atau slice waktu, dan kemudian menjalankannya pada core fisik yang berbeda pada saat dijadwalkan untuk dijalankan. Mesin virtual memiliki tidak ada ide yang terjadi. Yang ia tahu hanyalah bahwa ia hanya dapat menjadwalkan satu utas pada satu waktu, satu demi satu, karena hanya memiliki satu CPU virtual.)
Dan mari kita menjadi sangat jelas tentang ketentuan kami di sini. Anda menetapkan vCPU, atau CPU virtual, ke VM, bukan "core". Cores (yang saya asumsikan sebagai unit pemrosesan fisik yang berbagi soket fisik tunggal) tidak sama dengan vCPU. Ada lapisan abstraksi di antara mereka. Jika VM hanya memiliki 1 vCPU yang ditetapkan untuknya, VM hanya dapat menjadwalkan satu utas untuk dijalankan sekaligus. Itulah mengapa VM Anda berjalan lebih cepat dengan 2 -4 CPU virtual ditugaskan untuk itu - karena sekarang dapat menjadwalkan lebih dari satu utas untuk berjalan secara bersamaan.
Namun, pasti ada hukum pengembalian yang semakin berkurang di sini, karena jumlah CPU virtual yang berlebihan menimbulkan biaya overhead yang lebih tinggi dan lebih tinggi dalam hal-hal seperti sinkronisasi, dll.
Ada sedikit perbedaan antara bagaimana Hyper-V dan VMware hypervisor menjadwalkan thread mesin virtual untuk dieksekusi, dan mereka berbeda dalam pendekatan mereka terhadap sumber daya fisik "oversubscription," tetapi ini adalah konsep umum yang baik untuk memulai.
Jumlah CPU virtual yang ditugaskan tidak masalah. Perangkat lunak yang berjalan di VM tidak menyadari fakta bahwa itu dalam VM dan bahwa tuan rumah mampu lebih dari apa yang disajikan oleh VM. Jadi jika Anda menjalankan perangkat lunak yang dapat memanfaatkan beberapa inti CPU, dalam VM yang hanya memiliki satu inti yang ditetapkan, perangkat lunak hanya akan menjadwalkan satu inti untuk tugas-tugasnya, dan VM juga, hanya akan menggunakan satu inti host di sebuah waktu. Setelah Anda memberikan core lebih banyak pada VM, perangkat lunak dapat menjadwalkan lebih banyak tugas paralel, yang akan dijadwalkan oleh CPU host untuk VM.
Berhati-hatilah untuk tidak memberikan VM terlalu banyak, agar tidak menyebabkan pertengkaran, jika satu VM memiliki lebih banyak core virtual daripada host, VM akan melawan dirinya sendiri, dan dalam kasus hypervisor terjadwal geng, seperti vmware, VM akan tidak pernah dapat menjalankan apa pun (opsi untuk melakukan penempatan secara keseluruhan diblokir oleh lapisan manajemen tentunya).
sumber