Mengapa meningkatkan "Jumlah prosesor logis" untuk VM yang di-host Hyper-V meningkatkan kinerja VM itu?

9

Menurut pemahaman saya, mesin virtual (dengan asumsi Relative Weightsama) mendapatkan bagian yang sama dari prosesor.

Ketika VM diberikan waktu pemrosesan, seharusnya tidak masalah jika VM melihat satu inti untuk menggunakan atau beberapa inti, karena pemrosesan keluar dari berbagai prosesor pada host Hyper-V terlepas. Namun, ketika saya mengatur Number of logical processorspengaturan dari 1 ke 4 di Hyper-V untuk VM tertentu, saya melihat peningkatan kinerja yang sangat besar.

Spesifikasi pada pengaturan saya saat ini kira-kira:

  • Host Hyper-V memiliki 32 GB RAM, 24 prosesor logis (kata yang salah?), Beberapa TB ruang.

  • VM dialokasikan 6 GB RAM, 1 atau 4 core, beberapa ratus GB ruang dan menjalankan 2008 R2.

Saya pernah mengalami hal serupa pada pengaturan Hyper-V sebelumnya.

Blackjack00
sumber

Jawaban:

20

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.

Ryan Ries
sumber
7
@ Flapjack00 Tidak ... itu kebalikan dari apa yang baru saja saya katakan. 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 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.
Ryan Ries
1
Ah! Jadi, dalam hal itu, VM yang dikonfigurasi dengan 4 vCPU dapat menjadwalkan 4 utas sekaligus. Dengan asumsi host saya memiliki vCPU yang cukup tersedia, 4 utas itu dapat diproses pada saat yang sama?
Blackjack00
1
@ Flapjack00 "Dengan asumsi host saya memiliki cukup vCPU yang tersedia" - Tuan rumah tidak memiliki vCPU, VM tidak. Tuan rumah memiliki core (atau, lebih tepatnya, prosesor logis - satu inti mungkin memiliki banyak prosesor logis, seperti dengan Hyper-threading) yang ditugaskan untuk vCPU.
BlueRaja
2
@ Dan, itu masalah khusus untuk VMware. Itu tidak mempengaruhi Hyper-V.
Jake Oshins
1
"X vCpu memerlukan Y cpu locks" yang telah dihapus VMware di ESX 3.5, jadi ini tidak benar-benar berlaku untuk hypervisor modern lagi. Yang sedang berkata, Anda harus berhati-hati tentang tidak menetapkan sumber daya yang tidak dibutuhkan untuk VM Anda, dan vCpu sangat penting. Terlalu banyak dari mereka dan Anda akan kehilangan kinerja secara keseluruhan.
pauska
3

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).

dyasny
sumber