Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menjelaskan sumber daya Hyper-V dan kontrol isolasi untuk komputer virtual. Kemampuan ini, yang akan kita sebut sebagai Grup CPU Komputer Virtual, atau hanya "grup CPU", diperkenalkan di Windows Server 2016. Grup CPU memungkinkan administrator Hyper-V untuk mengelola dan mengalokasikan sumber daya CPU host dengan lebih baik di seluruh komputer virtual tamu. Dengan menggunakan grup CPU, administrator Hyper-V dapat:
Buat grup komputer virtual, dengan setiap grup memiliki alokasi yang berbeda dari total sumber daya CPU host virtualisasi, dibagikan di seluruh grup. Ini memungkinkan administrator host untuk menerapkan kelas layanan untuk berbagai jenis VM.
Atur batas sumber daya CPU ke grup tertentu. "Batas grup" ini mengatur batas atas untuk sumber daya CPU host yang dapat dikonsumsi seluruh grup, secara efektif memberlakukan kelas layanan yang diinginkan untuk grup tersebut.
Batasi grup CPU untuk berjalan hanya pada sekumpulan prosesor sistem host tertentu. Ini dapat digunakan untuk mengisolasi VM milik grup CPU yang berbeda satu sama lain.
Mengelola Grup CPU
Grup CPU dikelola melalui Layanan Komputasi Host Hyper-V, atau HCS. Deskripsi bagus tentang HCS, kejadiannya, tautan ke API HCS, dan banyak lagi tersedia di blog tim Virtualisasi Microsoft dalam posting Memperkenalkan Layanan Komputasi Host (HCS).
Catatan
Hanya HCS yang dapat digunakan untuk membuat dan mengelola grup CPU; applet Hyper-V Manager, antarmuka manajemen WMI dan PowerShell tidak mendukung grup CPU.
Microsoft menyediakan utilitas baris perintah, cpugroups.exe, di Pusat Unduhan Microsoft yang menggunakan antarmuka HCS untuk mengelola grup CPU. Utilitas ini juga dapat menampilkan topologi CPU host.
Cara Kerja Grup CPU
Alokasi sumber daya komputasi host di seluruh grup CPU diberlakukan oleh hypervisor Hyper-V, menggunakan batas grup CPU komputasi. Batas grup CPU adalah sebagian kecil dari total kapasitas CPU untuk grup CPU. Nilai batas grup tergantung pada kelas grup, atau tingkat prioritas yang ditetapkan. Batas grup komputasi dapat dianggap sebagai "sejumlah waktu CPU LP". Anggaran grup ini dibagikan, jadi jika hanya satu VM yang aktif, itu dapat menggunakan seluruh alokasi CPU grup untuk dirinya sendiri.
Batas grup CPU dihitung sebagai G = n x C, di mana:
- G adalah jumlah LP host yang ingin kami tetapkan ke grup
- n adalah jumlah total prosesor logis (LPs) dalam grup
- C adalah alokasi CPU maksimum — yaitu, kelas layanan yang diinginkan untuk grup, yang dinyatakan sebagai persentase dari total kapasitas komputasi sistem
Misalnya, pertimbangkan grup CPU yang dikonfigurasi dengan 4 prosesor logis (IP), dan batas 50%.
- G = n * C
- G = 4 * 50%
- G = 2 waktu CPU LP untuk seluruh grup
Dalam contoh ini, grup CPU G dialokasikan 2 waktu CPU LP.
Perhatikan bahwa batas grup berlaku terlepas dari jumlah komputer virtual atau prosesor virtual yang terikat ke grup, dan terlepas dari status (misalnya, matikan atau dimulai) dari komputer virtual yang ditetapkan ke grup CPU. Oleh karena itu, setiap VM yang terikat ke grup CPU yang sama akan menerima sebagian kecil dari total alokasi CPU grup, dan ini akan berubah dengan jumlah VM yang terikat ke grup CPU. Oleh karena itu, karena VM terikat atau tidak terikat dari grup CPU, batas grup CPU keseluruhan harus dibaca dan diatur untuk mempertahankan batas per VM yang dihasilkan yang diinginkan. Administrator host VM atau lapisan perangkat lunak manajemen virtualisasi bertanggung jawab untuk mengelola batas grup seperlunya untuk mencapai alokasi sumber daya CPU per VM yang diinginkan.
Contoh Kelas Layanan
Mari kita lihat beberapa contoh sederhana. Untuk memulainya, asumsikan administrator host Hyper-V ingin mendukung dua tingkat layanan untuk VM tamu:
Tingkat "C" low-end. Kami akan memberikan 10% tingkat ini dari seluruh sumber daya komputasi host.
Tingkat "B" kelas menengah. Tingkat ini dialokasikan 50% dari seluruh sumber daya komputasi host.
Pada titik ini dalam contoh kami, kami akan menegaskan bahwa tidak ada kontrol sumber daya CPU lain yang digunakan, seperti batas VM individu, bobot, dan cadangan. Namun, batas VM individu penting, karena kita akan melihat sedikit nanti.
Demi kesederhanaan, mari kita asumsikan setiap VM memiliki 1 VP, dan bahwa host kami memiliki 8 IP. Kita akan mulai dengan host kosong.
Untuk membuat tingkat "B", adminstartor host mengatur batas grup ke 50%:
- G = n * C
- G = 8 * 50%
- G = 4 waktu CPU LP untuk seluruh grup
Administrator host menambahkan satu VM tingkat "B". Pada titik ini, VM tingkat "B" kami dapat menggunakan paling banyak 50% CPU host, atau setara dengan 4 IP dalam sistem contoh kami.
Sekarang, admin menambahkan VM "Tier B" kedua. Alokasi grup CPU—dibagi secara merata di antara semua VM. Kami memiliki total 2 VM di Grup B, sehingga setiap VM sekarang mendapatkan setengah dari total Grup B masing-masing 50%, 25%, atau setara dengan 2 IP senilai waktu komputasi.
Mengatur Batas CPU pada VM Individual
Selain batas grup, setiap VM juga dapat memiliki "batas VM" individu. Kontrol sumber daya CPU per VM, termasuk batas CPU, berat, dan cadangan, telah menjadi bagian dari Hyper-V sejak diperkenalkan. Saat dikombinasikan dengan batas grup, batas VM menentukan jumlah maksimum CPU yang dapat didapatkan setiap VP, bahkan jika grup memiliki sumber daya CPU yang tersedia.
Misalnya, administrator host mungkin ingin menempatkan batas VM 10% pada VM "C". Dengan begitu, bahkan jika sebagian besar VP "C" menganggur, setiap VP tidak pernah bisa mendapatkan lebih dari 10%. Tanpa batas VM, VM "C" dapat secara oportunistik mencapai performa di luar tingkat yang diizinkan oleh tingkat mereka.
Mengisolasi Grup VM ke Prosesor Host Tertentu
Administrator host Hyper-V mungkin juga menginginkan kemampuan untuk mendedikasikan sumber daya komputasi ke VM. Misalnya, bayangkan administrator ingin menawarkan VM "A" premium yang memiliki batas kelas 100%. VM premium ini juga memerlukan latensi penjadwalan terendah dan jitter yang mungkin; artinya, mereka mungkin tidak dijadwalkan oleh VM lain. Untuk mencapai pemisahan ini, grup CPU juga dapat dikonfigurasi dengan pemetaan afinitas LP tertentu.
Misalnya, agar sesuai dengan VM "A" pada host dalam contoh kami, administrator akan membuat grup CPU baru, dan mengatur afinitas prosesor grup ke subset IP host. Grup B dan C akan diafinisiskan ke IP yang tersisa. Administrator dapat membuat satu VM di Grup A, yang kemudian akan memiliki akses eksklusif ke semua IP di Grup A, sementara grup tingkat yang mungkin lebih rendah B dan C akan berbagi IP yang tersisa.
Memisahkan VP Root dari VP Tamu
Secara default, Hyper-V akan membuat VP root pada setiap LP fisik yang mendasar. VP akar ini dipetakan secara ketat 1:1 dengan IP sistem, dan tidak bermigrasi — artinya, setiap VP root akan selalu dijalankan pada LP fisik yang sama. VP tamu dapat dijalankan pada LP apa pun yang tersedia, dan akan berbagi eksekusi dengan VP root.
Namun, mungkin diinginkan untuk sepenuhnya memisahkan aktivitas VP root dari VP tamu. Pertimbangkan contoh kami di atas di mana kami menerapkan VM tingkat "A" premium. Untuk memastikan VP VM "A" kami memiliki latensi dan "jitter" serendah mungkin, atau variasi penjadwalan, kami ingin menjalankannya pada sekumpulan IP khusus dan memastikan root tidak berjalan pada IP ini.
Ini dapat dicapai menggunakan kombinasi konfigurasi "minroot", yang membatasi partisi OS host untuk berjalan pada subset dari total prosesor logis sistem, bersama dengan satu atau beberapa grup CPU afinit.
Host virtualisasi dapat dikonfigurasi untuk membatasi partisi host ke IP tertentu, dengan satu atau beberapa grup CPU yang diafinisisikan ke IP yang tersisa. Dengan cara ini, partisi akar dan tamu dapat berjalan pada sumber daya CPU khusus, dan sepenuhnya terisolasi, tanpa berbagi CPU.
Untuk informasi selengkapnya tentang konfigurasi "minroot", lihat Manajemen Sumber Daya CPU Host Hyper-V.
Menggunakan Alat CpuGroups
Mari kita lihat beberapa contoh cara menggunakan alat CpuGroups.
Catatan
Parameter baris perintah untuk alat CpuGroups diteruskan hanya menggunakan spasi sebagai pemisah. Tidak ada karakter '/' atau '-' yang harus melanjutkan sakelar baris perintah yang diinginkan.
Menemukan Topologi CPU
Menjalankan CpuGroup dengan GetCpuTopology mengembalikan informasi tentang sistem saat ini, seperti yang ditunjukkan di bawah ini, termasuk Indeks LP, simpul NUMA tempat LP berada, ID Paket dan Core, dan indeks ROOT VP.
Contoh berikut menunjukkan sistem dengan 2 soket CPU dan simpul NUMA, total 32 IP, dan multi threading diaktifkan, dan dikonfigurasi untuk mengaktifkan Minroot dengan 8 VP root, 4 dari setiap simpul NUMA. IP yang memiliki VP root memiliki RootVpIndex >= 0; IP dengan RootVpIndex -1 tidak tersedia untuk partisi akar, tetapi masih dikelola oleh hypervisor dan akan menjalankan VP tamu seperti yang diizinkan oleh pengaturan konfigurasi lainnya.
C:\vm\tools>CpuGroups.exe GetCpuTopology
LpIndex NodeNumber PackageId CoreId RootVpIndex
------- ---------- --------- ------ -----------
0 0 0 0 0
1 0 0 0 1
2 0 0 1 2
3 0 0 1 3
4 0 0 2 -1
5 0 0 2 -1
6 0 0 3 -1
7 0 0 3 -1
8 0 0 4 -1
9 0 0 4 -1
10 0 0 5 -1
11 0 0 5 -1
12 0 0 6 -1
13 0 0 6 -1
14 0 0 7 -1
15 0 0 7 -1
16 1 1 16 4
17 1 1 16 5
18 1 1 17 6
19 1 1 17 7
20 1 1 18 -1
21 1 1 18 -1
22 1 1 19 -1
23 1 1 19 -1
24 1 1 20 -1
25 1 1 20 -1
26 1 1 21 -1
27 1 1 21 -1
28 1 1 22 -1
29 1 1 22 -1
30 1 1 23 -1
31 1 1 23 -1
Contoh 2 - Cetak semua grup CPU di host
Di sini, kita akan mencantumkan semua grup CPU pada host saat ini, GroupId mereka, batas CPU grup, dan indikasi IP yang ditetapkan ke grup tersebut.
Perhatikan bahwa nilai batas CPU yang valid berada dalam rentang [0, 65536], dan nilai-nilai ini mengekspresikan batas grup dalam persen (misalnya, 32768 = 50%).
C:\vm\tools>CpuGroups.exe GetGroups
CpuGroupId CpuCap LpIndexes
------------------------------------ ------ --------
36AB08CB-3A76-4B38-992E-000000000002 32768 4,5,6,7,8,9,10,11,20,21,22,23
36AB08CB-3A76-4B38-992E-000000000003 65536 12,13,14,15
36AB08CB-3A76-4B38-992E-000000000004 65536 24,25,26,27,28,29,30,31
Contoh 3 – Mencetak satu grup CPU
Dalam contoh ini, kita akan mengkueri satu Grup CPU menggunakan GroupId sebagai filter.
C:\vm\tools>CpuGroups.exe GetGroups /GroupId:36AB08CB-3A76-4B38-992E-000000000003
CpuGroupId CpuCap LpIndexes
------------------------------------ ------ ----------
36AB08CB-3A76-4B38-992E-000000000003 65536 12,13,14,15
Contoh 4 – Membuat grup CPU baru
Di sini, kita akan membuat grup CPU baru, menentukan ID Grup dan set IP yang akan ditetapkan ke grup.
C:\vm\tools>CpuGroups.exe CreateGroup /GroupId:36AB08CB-3A76-4B38-992E-000000000001 /GroupAffinity:0,1,16,17
Sekarang tampilkan grup kami yang baru ditambahkan.
C:\vm\tools>CpuGroups.exe GetGroups
CpuGroupId CpuCap LpIndexes
------------------------------------ ------ ---------
36AB08CB-3A76-4B38-992E-000000000001 65536 0,1,16,17
36AB08CB-3A76-4B38-992E-000000000002 32768 4,5,6,7,8,9,10,11,20,21,22,23
36AB08CB-3A76-4B38-992E-000000000003 65536 12,13,14,15
36AB08CB-3A76-4B38-992E-000000000004 65536 24,25,26,27,28,29,30,31
Contoh 5 – Atur batas grup CPU ke 50%
Di sini, kita akan mengatur batas grup CPU ke 50%.
C:\vm\tools>CpuGroups.exe SetGroupProperty /GroupId:36AB08CB-3A76-4B38-992E-000000000001 /CpuCap:32768
Sekarang mari kita konfirmasi pengaturan kita dengan menampilkan grup yang baru saja kita perbarui.
C:\vm\tools>CpuGroups.exe GetGroups /GroupId:36AB08CB-3A76-4B38-992E-000000000001
CpuGroupId CpuCap LpIndexes
------------------------------------ ------ ---------
36AB08CB-3A76-4B38-992E-000000000001 32768 0,1,16,17
Contoh 6 - Cetak id grup CPU untuk semua VM di host
C:\vm\tools>CpuGroups.exe GetVmGroup
VmName VmId CpuGroupId
------ ------------------------------------ ------------------------------------
G2 4ABCFC2F-6C22-498C-BB38-7151CE678758 36ab08cb-3a76-4b38-992e-000000000002
P1 973B9426-0711-4742-AD3B-D8C39D6A0DEC 36ab08cb-3a76-4b38-992e-000000000003
P2 A593D93A-3A5F-48AB-8862-A4350E3459E8 36ab08cb-3a76-4b38-992e-000000000004
G3 B0F3FCD5-FECF-4A21-A4A2-DE4102787200 36ab08cb-3a76-4b38-992e-000000000002
G1 F699B50F-86F2-4E48-8BA5-EB06883C1FDC 36ab08cb-3a76-4b38-992e-000000000002
Contoh 7 – Membatalkan ikatan VM dari grup CPU
Untuk menghapus VM dari grup CPU, atur ke CpuGroupId VM ke NULL GUID. Ini membatalkan ikatan VM dari grup CPU.
C:\vm\tools>CpuGroups.exe SetVmGroup /VmName:g1 /GroupId:00000000-0000-0000-0000-000000000000
C:\vm\tools>CpuGroups.exe GetVmGroup
VmName VmId CpuGroupId
------ ------------------------------------ ------------------------------------
G2 4ABCFC2F-6C22-498C-BB38-7151CE678758 36ab08cb-3a76-4b38-992e-000000000002
P1 973B9426-0711-4742-AD3B-D8C39D6A0DEC 36ab08cb-3a76-4b38-992e-000000000003
P2 A593D93A-3A5F-48AB-8862-A4350E3459E8 36ab08cb-3a76-4b38-992e-000000000004
G3 B0F3FCD5-FECF-4A21-A4A2-DE4102787200 36ab08cb-3a76-4b38-992e-000000000002
G1 F699B50F-86F2-4E48-8BA5-EB06883C1FDC 00000000-0000-0000-0000-000000000000
Contoh 8 – Mengikat VM ke grup CPU yang ada
Di sini, kita akan menambahkan VM ke grup CPU yang ada. Perhatikan bahwa VM tidak boleh terikat ke grup CPU yang ada, atau mengatur id grup CPU akan gagal.
C:\vm\tools>CpuGroups.exe SetVmGroup /VmName:g1 /GroupId:36AB08CB-3A76-4B38-992E-000000000001
Sekarang, konfirmasikan VM G1 berada dalam grup CPU yang diinginkan.
C:\vm\tools>CpuGroups.exe GetVmGroup
VmName VmId CpuGroupId
------ ------------------------------------ ------------------------------------
G2 4ABCFC2F-6C22-498C-BB38-7151CE678758 36ab08cb-3a76-4b38-992e-000000000002
P1 973B9426-0711-4742-AD3B-D8C39D6A0DEC 36ab08cb-3a76-4b38-992e-000000000003
P2 A593D93A-3A5F-48AB-8862-A4350E3459E8 36ab08cb-3a76-4b38-992e-000000000004
G3 B0F3FCD5-FECF-4A21-A4A2-DE4102787200 36ab08cb-3a76-4b38-992e-000000000002
G1 F699B50F-86F2-4E48-8BA5-EB06883C1FDC 36AB08CB-3A76-4B38-992E-000000000001
Contoh 9 – Cetak semua VM yang dikelompokkan menurut id grup CPU
C:\vm\tools>CpuGroups.exe GetGroupVms
CpuGroupId VmName VmId
------------------------------------ ------ ------------------------------------
36AB08CB-3A76-4B38-992E-000000000001 G1 F699B50F-86F2-4E48-8BA5-EB06883C1FDC
36ab08cb-3a76-4b38-992e-000000000002 G2 4ABCFC2F-6C22-498C-BB38-7151CE678758
36ab08cb-3a76-4b38-992e-000000000002 G3 B0F3FCD5-FECF-4A21-A4A2-DE4102787200
36ab08cb-3a76-4b38-992e-000000000003 P1 973B9426-0711-4742-AD3B-D8C39D6A0DEC
36ab08cb-3a76-4b38-992e-000000000004 P2 A593D93A-3A5F-48AB-8862-A4350E3459E8
Contoh 10 – Mencetak semua VM untuk satu grup CPU
C:\vm\tools>CpuGroups.exe GetGroupVms /GroupId:36ab08cb-3a76-4b38-992e-000000000002
CpuGroupId VmName VmId
------------------------------------ ------ ------------------------------------
36ab08cb-3a76-4b38-992e-000000000002 G2 4ABCFC2F-6C22-498C-BB38-7151CE678758
36ab08cb-3a76-4b38-992e-000000000002 G3 B0F3FCD5-FECF-4A21-A4A2-DE4102787200
Contoh 11 – Mencoba menghapus Grup CPU yang tidak kosong
Hanya grup CPU kosong—yaitu, grup CPU tanpa VM terikat—dapat dihapus. Mencoba menghapus grup CPU yang tidak kosong akan gagal.
C:\vm\tools>CpuGroups.exe DeleteGroup /GroupId:36ab08cb-3a76-4b38-992e-000000000001
(null)
Failed with error 0xc0350070
Contoh 12 – Batalkan ikatan satu-satunya VM dari grup CPU dan hapus grup
Dalam contoh ini, kita akan menggunakan beberapa perintah untuk memeriksa grup CPU, menghapus VM tunggal milik grup tersebut, lalu menghapus grup.
Pertama, mari kita hitung VM dalam grup kita.
C:\vm\tools>CpuGroups.exe GetGroupVms /GroupId:36AB08CB-3A76-4B38-992E-000000000001
CpuGroupId VmName VmId
------------------------------------ ------ ------------------------------------
36AB08CB-3A76-4B38-992E-000000000001 G1 F699B50F-86F2-4E48-8BA5-EB06883C1FDC
Kami melihat bahwa hanya satu VM, bernama G1, milik grup ini. Mari kita hapus VM G1 dari grup kami dengan mengatur ID grup VM ke NULL.
C:\vm\tools>CpuGroups.exe SetVmGroup /VmName:g1 /GroupId:00000000-0000-0000-0000-000000000000
Dan verifikasi perubahan kita...
C:\vm\tools>CpuGroups.exe GetVmGroup /VmName:g1
VmName VmId CpuGroupId
------ ------------------------------------ ------------------------------------
G1 F699B50F-86F2-4E48-8BA5-EB06883C1FDC 00000000-0000-0000-0000-000000000000
Sekarang setelah grup kosong, kita dapat menghapusnya dengan aman.
C:\vm\tools>CpuGroups.exe DeleteGroup /GroupId:36ab08cb-3a76-4b38-992e-000000000001
Dan mengkonfirmasi bahwa kelompok kita sudah pergi.
C:\vm\tools>CpuGroups.exe GetGroups
CpuGroupId CpuCap LpIndexes
------------------------------------ ------ -----------------------------
36AB08CB-3A76-4B38-992E-000000000002 32768 4,5,6,7,8,9,10,11,20,21,22,23
36AB08CB-3A76-4B38-992E-000000000003 65536 12,13,14,15
36AB08CB-3A76-4B38-992E-000000000004 65536 24,25,26,27,28,29,30,31
Contoh 13 – Mengikat VM kembali ke grup CPU aslinya
C:\vm\tools>CpuGroups.exe SetVmGroup /VmName:g1 /GroupId:36AB08CB-3A76-4B38-992E-000000000002
C:\vm\tools>CpuGroups.exe GetGroupVms
CpuGroupId VmName VmId
------------------------------------ -------------------------------- ------------------------------------
36ab08cb-3a76-4b38-992e-000000000002 G2 4ABCFC2F-6C22-498C-BB38-7151CE678758
36ab08cb-3a76-4b38-992e-000000000002 G3 B0F3FCD5-FECF-4A21-A4A2-DE4102787200
36AB08CB-3A76-4B38-992E-000000000002 G1 F699B50F-86F2-4E48-8BA5-EB06883C1FDC
36ab08cb-3a76-4b38-992e-000000000003 P1 973B9426-0711-4742-AD3B-D8C39D6A0DEC
36ab08cb-3a76-4b38-992e-000000000004 P2 A593D93A-3A5F-48AB-8862-A4350E3459E8