Tentang pilihan jenis penjadwal hypervisor Hyper-V
Dokumen ini menjelaskan perubahan penting pada penggunaan jenis penjadwal hypervisor default dan direkomendasikan Hypervisor. Perubahan ini berdampak pada keamanan sistem dan performa virtualisasi. Administrator host virtualisasi harus meninjau dan memahami perubahan dan implikasi yang dijelaskan dalam dokumen ini, dan mengevaluasi dampak dengan cermat, panduan penyebaran yang disarankan dan faktor risiko yang terlibat untuk paling memahami cara menyebarkan dan mengelola host Hyper-V dalam menghadapi lanskap keamanan yang berubah dengan cepat.
Penting
Kerentanan keamanan saluran samping yang saat ini diketahui terlihat dalam beberapa arsitektur prosesor dapat dieksploitasi oleh VM tamu berbahaya melalui perilaku penjadwalan jenis penjadwal klasik hypervisor warisan saat dijalankan pada host dengan Simultaneous Multithreading (SMT) diaktifkan. Jika berhasil dieksploitasi, beban kerja berbahaya dapat mengamati data di luar batas partisinya. Kelas serangan ini dapat dimitigasi dengan mengonfigurasi hypervisor Hyper-V untuk menggunakan jenis penjadwal inti hypervisor dan mengonfigurasi ulang VM tamu. Dengan penjadwal inti, hypervisor membatasi VP VM tamu untuk berjalan pada inti prosesor fisik yang sama, oleh karena itu sangat mengisolasi kemampuan VM untuk mengakses data ke batas inti fisik tempat ia berjalan. Ini adalah mitigasi yang sangat efektif terhadap serangan saluran samping ini, yang mencegah VM mengamati artefak apa pun dari partisi lain, baik akar atau partisi tamu lainnya. Oleh karena itu, Microsoft mengubah pengaturan konfigurasi default dan yang direkomendasikan untuk host virtualisasi dan VM tamu.
Latar belakang
Dimulai dengan Windows Server 2016, Hyper-V mendukung beberapa metode penjadwalan dan pengelolaan prosesor virtual, yang disebut sebagai jenis penjadwal hypervisor. Deskripsi terperinci tentang semua jenis penjadwal hypervisor dapat ditemukan di Memahami dan menggunakan jenis penjadwal hypervisor Hyper-V.
Catatan
Jenis penjadwal hypervisor baru pertama kali diperkenalkan dengan Windows Server 2016, dan tidak tersedia dalam rilis sebelumnya. Semua versi Hyper-V sebelum Windows Server 2016 hanya mendukung penjadwal klasik. Dukungan untuk penjadwal inti baru-baru ini diterbitkan.
Tentang jenis penjadwal hypervisor
Artikel ini berfokus khusus pada penggunaan jenis penjadwal inti hypervisor baru versus penjadwal "klasik" warisan, dan bagaimana jenis penjadwal ini bersinggungan dengan penggunaan Multi-Threading Simetris, atau SMT. Penting untuk memahami perbedaan antara penjadwal inti dan klasik dan bagaimana setiap tempat bekerja dari VM tamu pada prosesor sistem yang mendasar.
Penjadwal klasik
Penjadwal klasik mengacu pada metode penjadwalan round robin yang adil pada prosesor virtual (VP) di seluruh sistem - termasuk VP root serta VP milik VM tamu. Penjadwal klasik telah menjadi jenis penjadwal default yang digunakan pada semua versi Hyper-V (hingga Windows Server 2019, seperti yang dijelaskan di sini). Karakteristik performa penjadwal klasik dipahami dengan baik, dan penjadwal klasik ditunjukkan untuk secara ably mendukung kelebihan langganan beban kerja - yaitu, kelebihan langganan rasio VP:LP host dengan margin yang wajar (tergantung pada jenis beban kerja yang divirtualisasi, pemanfaatan sumber daya keseluruhan, dll.).
Saat dijalankan pada host virtualisasi dengan SMT diaktifkan, penjadwal klasik akan menjadwalkan VP tamu dari VM apa pun pada setiap utas SMT milik inti secara independen. Oleh karena itu, VM yang berbeda dapat berjalan pada inti yang sama pada saat yang sama (satu VM berjalan pada satu utas inti saat VM lain berjalan di utas lain).
Penjadwal inti
Penjadwal inti memanfaatkan properti SMT untuk memberikan isolasi beban kerja tamu, yang berdampak pada keamanan dan performa sistem. Penjadwal inti memastikan bahwa VP dari VM dijadwalkan pada rangkaian SMT saudara. Ini dilakukan secara simetris sehingga jika IP berada dalam grup dua, VP dijadwalkan dalam grup dua, dan inti CPU sistem tidak pernah dibagikan antara VM.
Dengan menjadwalkan VP tamu pada pasangan SMT yang mendasarinya, penjadwal inti menawarkan batas keamanan yang kuat untuk isolasi beban kerja, dan juga dapat digunakan untuk mengurangi varianbilitas performa untuk beban kerja sensitif latensi.
Perhatikan bahwa ketika VP dijadwalkan untuk komputer virtual tanpa SMT diaktifkan, VP akan mengonsumsi seluruh inti saat berjalan, dan rangkaian SMT saudara inti akan dibiarkan menganggur. Ini diperlukan untuk memberikan isolasi beban kerja yang benar, tetapi berdampak pada performa sistem secara keseluruhan, terutama karena IP sistem menjadi terlalu berlangganan - yaitu, ketika total rasio VP:LP melebihi 1:1. Oleh karena itu, menjalankan VM tamu yang dikonfigurasi tanpa beberapa utas per inti adalah konfigurasi sub-optimal.
Manfaat menggunakan penjadwal inti
Penjadwal inti menawarkan manfaat berikut:
Batas keamanan yang kuat untuk isolasi beban kerja tamu - VP Tamu dibatasi untuk berjalan pada pasangan inti fisik yang mendasarinya, mengurangi kerentanan terhadap serangan pengintaian saluran samping.
Mengurangi varianbilitas beban kerja - Varianbilitas throughput beban kerja tamu berkurang secara signifikan, menawarkan konsistensi beban kerja yang lebih besar.
Penggunaan SMT di VM tamu - OS dan aplikasi yang berjalan di komputer virtual tamu dapat menggunakan perilaku SMT dan antarmuka pemrograman (API) untuk mengontrol dan mendistribusikan pekerjaan di seluruh utas SMT, seperti yang mereka lakukan saat menjalankan non-virtual.
Penjadwal inti saat ini digunakan pada host virtualisasi Azure, khususnya untuk memanfaatkan batas keamanan yang kuat dan variabilitas beban kerja yang rendah. Microsoft percaya bahwa jenis penjadwal inti harus dan akan terus menjadi jenis penjadwalan hypervisor default untuk sebagian besar skenario virtualisasi. Oleh karena itu, untuk memastikan pelanggan kami aman secara default, Microsoft membuat perubahan ini untuk Windows Server 2019 sekarang.
Dampak performa penjadwal inti pada beban kerja tamu
Meskipun diperlukan untuk secara efektif mengurangi kelas kerentanan tertentu, penjadwal inti juga dapat berpotensi mengurangi performa. Pelanggan mungkin melihat perbedaan dalam karakteristik performa dengan VM mereka dan dampaknya terhadap kapasitas beban kerja keseluruhan host virtualisasi mereka. Dalam kasus di mana penjadwal inti harus menjalankan VP non-SMT, hanya salah satu aliran instruksi di inti logis yang mendasarinya yang dijalankan sementara yang lain harus diam. Ini akan membatasi total kapasitas host untuk beban kerja tamu.
Dampak performa ini dapat diminimalkan dengan mengikuti panduan penyebaran dalam dokumen ini. Administrator host harus dengan hati-hati mempertimbangkan skenario penyebaran virtualisasi spesifik mereka dan menyeimbangkan toleransi mereka untuk risiko keamanan terhadap kebutuhan akan kepadatan beban kerja maksimum, konsolidasi host virtualisasi yang berlebihan, dll.
Perubahan pada konfigurasi default dan yang direkomendasikan untuk Windows Server 2016 dan Windows Server 2019
Menyebarkan host Hyper-V dengan postur keamanan maksimum memerlukan penggunaan jenis penjadwal inti hypervisor. Untuk memastikan pelanggan kami aman secara default, Microsoft mengubah pengaturan default dan yang direkomendasikan berikut.
Catatan
Sementara dukungan internal hypervisor untuk jenis penjadwal disertakan dalam rilis awal Windows Server 2016, Windows Server 1709, dan Windows Server 1803, pembaruan diperlukan untuk mengakses kontrol konfigurasi yang memungkinkan pemilihan jenis penjadwal hypervisor. Lihat Memahami dan menggunakan jenis penjadwal hypervisor Hyper-V untuk detail tentang pembaruan ini.
Perubahan host virtualisasi
Hypervisor akan menggunakan penjadwal inti secara default dimulai dengan Windows Server 2019.
Microsoft reccommends mengonfigurasi penjadwal inti di Windows Server 2016. Jenis penjadwal inti hypervisor didukung di Windows Server 2016, namun defaultnya adalah penjadwal klasik. Penjadwal inti bersifat opsional dan harus diaktifkan secara eksplisit oleh administrator host Hyper-V.
Perubahan konfigurasi komputer virtual
Pada Windows Server 2019, komputer virtual baru yang dibuat menggunakan VM default versi 9.0 akan secara otomatis mewarisi properti SMT (diaktifkan atau dinonaktifkan) dari host virtualisasi. Artinya, jika SMT diaktifkan pada host fisik, VM yang baru dibuat juga akan mengaktifkan SMT, dan akan mewarisi topologi SMT host secara default, dengan VM memiliki jumlah utas perangkat keras yang sama per inti dengan sistem yang mendasar. Ini akan tercermin dalam konfigurasi VM dengan HwThreadCountPerCore = 0, di mana 0 menunjukkan VM harus mewarisi pengaturan SMT host.
Komputer virtual yang ada dengan versi VM 8.2 atau yang lebih lama akan mempertahankan pengaturan prosesor VM asli mereka untuk HwThreadCountPerCore, dan default untuk tamu versi VM 8.2 adalah HwThreadCountPerCore = 1. Ketika tamu ini berjalan pada host Windows Server 2019, mereka akan diperlakukan sebagai berikut:
Jika VM memiliki jumlah VP yang kurang dari atau sama dengan jumlah inti LP, VM akan diperlakukan sebagai VM non-SMT oleh penjadwal inti. Ketika VP tamu berjalan pada satu utas SMT, utas SMT saudara inti akan diam. Ini tidak optimal, dan akan mengakibatkan hilangnya performa secara keseluruhan.
Jika VM memiliki lebih banyak VP daripada inti LP, VM akan diperlakukan sebagai VM SMT oleh penjadwal inti. Namun, VM tidak akan mengamati indikasi lain bahwa itu adalah komputer virtual SMT. Misalnya, penggunaan instruksi CPUID atau API Windows untuk mengkueri toplogi CPU oleh OS atau aplikasi tidak akan menunjukkan bahwa SMT diaktifkan.
Ketika VM yang ada secara eksplisit diperbarui dari versi VM eariler ke versi 9.0 melalui operasi Update-VM, VM akan mempertahankan nilainya saat ini untuk HwThreadCountPerCore. VM tidak akan mengaktifkan paksa SMT.
Pada Windows Server 2016, Microsoft merekomendasikan untuk mengaktifkan SMT untuk VM tamu. Secara default, VM yang dibuat pada Windows Server 2016 akan menonaktifkan SMT, yaitu HwThreadCountPerCore diatur ke 1, kecuali diubah secara eksplisit.
Catatan
Windows Server 2016 tidak mendukung pengaturan HwThreadCountPerCore ke 0.
Mengelola konfigurasi SMT komputer virtual
Konfigurasi SMT komputer virtual tamu diatur berdasarkan per VM. Administrator host dapat memeriksa dan mengonfigurasi konfigurasi SMT VM untuk memilih dari opsi berikut:
Mengonfigurasi VM untuk berjalan sebagai diaktifkan SMT, secara opsional mewarisi topologi SMT host secara otomatis
Mengonfigurasi VM untuk dijalankan sebagai non-SMT
Konfigurasi SMT untuk VM ditampilkan di panel Ringkasan di konsol Hyper-V Manager. Mengonfigurasi pengaturan SMT VM dapat dilakukan dengan menggunakan Pengaturan VM atau PowerShell.
Mengonfigurasi pengaturan VM SMT menggunakan PowerShell
Untuk mengonfigurasi pengaturan SMT untuk komputer virtual tamu, buka jendela PowerShell dengan izin yang memadai, dan ketik:
Set-VMProcessor -VMName <VMName> -HwThreadCountPerCore <0, 1, 2>
Mana:
0 = Mewarisi topologi SMT dari host (pengaturan HwThreadCountPerCore=0 ini tidak didukung di Windows Server 2016)
1 = Non-SMT
Nilai > 1 = jumlah utas SMT yang diinginkan per inti. Mungkin tidak melebihi jumlah utas SMT fisik per inti.
Untuk membaca pengaturan SMT untuk komputer virtual tamu, buka jendela PowerShell dengan izin yang memadai, dan ketik:
(Get-VMProcessor -VMName <VMName>).HwThreadCountPerCore
Perhatikan bahwa VM tamu yang dikonfigurasi dengan HwThreadCountPerCore = 0 menunjukkan bahwa SMT akan diaktifkan untuk tamu, dan akan mengekspos jumlah utas SMT yang sama kepada tamu seperti yang ada di host virtualisasi yang mendasar, biasanya 2.
VM tamu dapat mengamati perubahan pada topologi CPU di seluruh skenario mobilitas VM
OS dan aplikasi dalam VM mungkin melihat perubahan pada pengaturan host dan VM sebelum dan sesudah peristiwa siklus hidup VM seperti migrasi langsung atau operasi penyimpanan dan pemulihan. Selama operasi di mana status VM disimpan dan dipulihkan, pengaturan HwThreadCountPerCore VM dan nilai yang direalisasikan (yaitu, kombinasi komputasi dari pengaturan VM dan konfigurasi host sumber) dimigrasikan. VM akan terus berjalan dengan pengaturan ini pada host tujuan. Pada titik VM dimatikan dan dimulai kembali, ada kemungkinan bahwa nilai yang direalisasikan yang diamati oleh VM akan berubah. Ini harus jinak, karena OS dan perangkat lunak lapisan aplikasi harus mencari informasi topologi CPU sebagai bagian dari alur mulai dan kode inisialisasi normal mereka. Namun, karena urutan inisialisasi waktu boot ini dilewati selama migrasi langsung atau operasi simpan/pulihkan, VM yang mengalami transisi status ini dapat mengamati nilai awal yang direalisasikan komputasi sampai dimatikan dan dimulai kembali.
Pemberitahuan mengenai konfigurasi VM yang tidak optimal
Komputer virtual yang dikonfigurasi dengan lebih banyak VP daripada ada inti fisik pada host menghasilkan konfigurasi yang tidak optimal. Penjadwal hypervisor akan memperlakukan VM ini seolah-olah mereka sadar SMT. Namun, OS dan perangkat lunak aplikasi dalam VM akan disajikan topologi CPU yang menunjukkan SMT dinonaktifkan. Ketika kondisi ini terdeteksi, Proses Hyper-V Worker akan mencatat peristiwa pada host virtualisasi yang memperingatkan administrator host bahwa konfigurasi VM tidak optimal, dan merekomendasikan SMT diaktifkan untuk VM.
Cara mengidentifikasi VM yang tidak dikonfigurasi secara optimal
Anda dapat mengidentifikasi VM non-SMT dengan memeriksa Log Sistem di Pemantau Peristiwa untuk peristiwa Proses Hyper-V Worker ID 3498, yang akan dipicu untuk VM setiap kali jumlah VP di VM lebih besar dari jumlah inti fisik. Peristiwa proses pekerja dapat diperoleh dari Pemantau Peristiwa, atau melalui PowerShell.
Mengkueri peristiwa VM proses pekerja Hyper-V menggunakan PowerShell
Untuk mengkueri ID peristiwa proses pekerja Hyper-V 3498 menggunakan PowerShell, masukkan perintah berikut dari prompt PowerShell.
Get-WinEvent -FilterHashTable @{ProviderName="Microsoft-Windows-Hyper-V-Worker"; ID=3498}
Dampak konfigurasi SMT tamu pada penggunaan pencerahan hypervisor untuk sistem operasi tamu
Hypervisor Microsoft menawarkan beberapa pencerahan, atau petunjuk, yang dapat dikueri dan digunakan OS yang berjalan di VM tamu untuk memicu pengoptimalan, seperti yang mungkin menguntungkan performa atau meningkatkan penanganan berbagai kondisi saat menjalankan virtualisasi. Satu pencerahan yang baru-baru ini diperkenalkan menyangkut penanganan penjadwalan prosesor virtual dan penggunaan mitigasi OS untuk serangan saluran samping yang mengeksploitasi SMT.
Catatan
Microsoft merekomendasikan agar administrator host mengaktifkan SMT untuk VM tamu untuk mengoptimalkan performa beban kerja.
Detail pencerahan tamu ini disediakan di bawah ini, namun kunci yang diambil untuk administrator host virtualisasi adalah bahwa komputer virtual harus memiliki HwThreadCountPerCore yang dikonfigurasi agar sesuai dengan konfigurasi SMT fisik host. Ini memungkinkan hypervisor melaporkan bahwa tidak ada berbagi inti non-arsitektur. Oleh karena itu, setiap pengoptimalan pendukung OS tamu yang memerlukan pencerahan dapat diaktifkan. Pada Windows Server 2019, buat VM baru dan biarkan nilai default HwThreadCountPerCore (0). VM lama yang dimigrasikan dari host Windows Server 2016 dapat diperbarui ke versi konfigurasi Windows Server 2019. Setelah melakukannya, Microsoft merekomendasikan pengaturan HwThreadCountPerCore = 0. Pada Windows Server 2016, Microsoft merekomendasikan pengaturan HwThreadCountPerCore agar sesuai dengan konfigurasi host (biasanya 2).
Detail pencerahan NoNonArchitecturalCoreSharing
Mulai Windows Server 2016, hypervisor mendefinisikan pencerahan baru untuk menjelaskan penanganan penjadwalan dan penempatan VP ke OS tamu. Pencerahan ini didefinisikan dalam Spesifikasi Fungsional Tingkat Atas Hypervisor v5.0c.
Hypervisor synthetic CPUID leaf CPUID.0x40000004.EAX:18[NoNonArchitecturalCoreSharing = 1] menunjukkan bahwa prosesor virtual tidak akan pernah berbagi inti fisik dengan prosesor virtual lain, kecuali untuk prosesor virtual yang dilaporkan sebagai rangkaian SMT saudara. Misalnya, VP tamu tidak akan pernah berjalan pada utas SMT bersama VP root yang berjalan secara bersamaan pada utas SMT saudara pada inti prosesor yang sama. Kondisi ini hanya dimungkinkan saat menjalankan virtualisasi, sehingga mewakili perilaku SMT non-arsitektur yang juga memiliki implikasi keamanan serius. OS tamu dapat menggunakan NoNonArchitecturalCoreSharing = 1 sebagai indikasi bahwa aman untuk mengaktifkan pengoptimalan, yang dapat membantu menghindari overhead performa pengaturan STIBP.
Dalam konfigurasi tertentu, hypervisor tidak akan menunjukkan bahwa NoNonArchitecturalCoreSharing = 1. Sebagai contoh, jika host mengaktifkan SMT dan dikonfigurasi untuk menggunakan penjadwal klasik hypervisor, NoNonArchitecturalCoreSharing akan menjadi 0. Hal ini dapat mencegah tamu yang tercerahkan mengaktifkan pengoptimalan tertentu. Oleh karena itu, Microsoft menyarankan agar administrator host yang menggunakan SMT mengandalkan penjadwal inti hypervisor dan memastikan bahwa komputer virtual dikonfigurasi untuk mewarisi konfigurasi SMT mereka dari host untuk memastikan performa beban kerja yang optimal.
Ringkasan
Lanskap ancaman keamanan terus berkembang. Untuk memastikan pelanggan kami aman secara default, Microsoft mengubah konfigurasi default untuk hypervisor dan komputer virtual mulai dari Windows Server 2019 Hyper-V, dan memberikan panduan dan rekomendasi yang diperbarui untuk pelanggan yang menjalankan Windows Server 2016 Hyper-V. Administrator host virtualisasi harus:
Membaca dan memahami panduan yang disediakan dalam dokumen ini
Evaluasi dan sesuaikan penyebaran virtualisasi mereka dengan hati-hati untuk memastikan mereka memenuhi tujuan keamanan, performa, kepadatan virtualisasi, dan responsivitas beban kerja untuk persyaratan unik mereka
Pertimbangkan untuk mengonfigurasi ulang host Hyper-V Windows Server 2016 yang ada untuk memanfaatkan manfaat keamanan yang kuat yang ditawarkan oleh penjadwal inti hypervisor
Perbarui VM non-SMT yang ada untuk mengurangi dampak performa dari batasan penjadwalan yang diberlakukan oleh isolasi VP yang mengatasi kerentanan keamanan perangkat keras