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.