Apakah ada Windows yang setara dengan Unix 'CPU steal time'?

24

Untuk menilai akurasi pemantauan kinerja pada platform virtualisasi, waktu mencuri CPU telah menjadi metrik yang semakin relevan - lihat pemantauan EC2: kasus CPU curian untuk ringkasan instruktif dalam konteks Amazon EC2 dan makalah IBM tentang waktu CPU menghitung untuk penjelasan teknis yang lebih mendalam (termasuk ilustrasi) dari konsep:

Steal time adalah persentase waktu CPU virtual menunggu CPU nyata sementara hypervisor sedang melayani prosesor virtual lain.

Oleh karena itu, ini terpapar di sebagian besar alat pemantauan Unix / Linux terkait saat ini - lihat misalnya kolom % steal atau st in saratau top:

st - Steal Time
Jumlah CPU 'dicuri' dari mesin virtual ini oleh hypervisor untuk tugas-tugas lain (seperti menjalankan mesin virtual lain).

Saya belum dapat menemukan cara untuk menangkap metrik yang sama pada Windows, apakah ini sudah mungkin? (Idealnya untuk Windows 2008 Server R2 AMI pada EC2 dan melalui masing-masing Penghitung Kinerja Windows .)

Steffen Opel
sumber

Jawaban:

33

Sunting: Memperbarui pada 1 Oktober 2013 - Beberapa jawaban asli saya sejak itu menjadi usang.

Saya tidak yakin apakah Anda masih aktif di situs ini atau Anda akan melihat ini, tetapi saya ingin Anda tahu bahwa saya membaca pertanyaan ini hari ini dan itu membuat saya terpesona, jadi saya menghabiskan sepanjang hari (ketika saya seharusnya memiliki telah bekerja) meneliti Hyper-V dan Windows internal dan bahkan menggali konsep virtualisasi itu sendiri dengan harapan bahwa saya mungkin siap untuk menjawab pertanyaan Anda.

Biarkan saya kata pengantar dengan mengatakan bahwa saya datang dari sudut pandang Hyper-V sebagai platform virtualisasi karena di situlah saya memiliki pengalaman paling banyak. Meskipun mungkin ada prinsip-prinsip virtualisasi tertentu, seperti yang kita ketahui, yang tidak dapat disangkal, Microsoft dan VMware dan Xen semuanya memiliki strategi yang berbeda untuk bagaimana mereka merancang hypervisor mereka.

Itulah hal pertama yang membuat pertanyaan Anda menantang. Anda mengajukan pertanyaan Anda seolah-olah itu hypervisor-agnostik, padahal sebenarnya tidak. Amazon EC2, misalnya, menggunakan Xen hypervisor, dan metrik "CPU Steal Time" yang Anda lihat dalam output dari topperintah yang dikeluarkan dari dalam Linux VM yang berjalan di hypervisor itu adalah hasil dari layanan integrasi yang diinstal pada OS tamu tersebut (atau alat yang menyadari virtualisasi pada tamu) bersamaan dengan data yang disediakan oleh hypervisor spesifik tersebut.

Pertama, izinkan saya menjawab pertanyaan Anda langsung: Tidak ada cara untuk melihat dari dalam mesin virtual yang menjalankan Windows berapa banyak waktu yang dimiliki prosesor pada mesin fisik yang digunakan hypervisor untuk melakukan hal-hal lain, kecuali alat virtual tertentu / layanan atau alat yang sadar akan virtualisasi untuk hypervisor khusus Anda dipasang di VM tamu danhypervisor khusus tempat tamu menjalankan memperlihatkan data itu kepada tamu. Bahkan tamu Windows yang menggunakan hypervisor Hyper-V tidak akan memiliki akses langsung ke informasi mengenai waktu yang dihabiskan prosesor fisik pada hypervisor melakukan hal-hal lain. (Mengutip voretaq7, sesuatu yang "memecah dinding keempat.") Meskipun sistem operasi klien dan server Windows berjalan sebagai tamu tervirtualisasi di Hyper-V dengan layanan / alat integrasi yang benar terpasang menggunakan "pencerahan" (yang secara harfiah merupakan kernel perubahan kode yang dibuat khusus untuk VM) yang secara signifikan meningkatkan kinerja mereka dalam menggunakan sumber daya dari host fisik, intinya adalah bahwa hypervisor tidak memilikiuntuk memberikan lebih banyak informasi ke OS tamu daripada yang diinginkan Itu berarti hypervisor tidak harus memberi tahu tamu VM apa lagi yang dilakukannya selain melayani VM itu ... kecuali jika mau. Dan informasi tentang apa lagi yang dilakukan prosesor fisik diperlukan untuk mendapatkan metrik dari perspektif VM seperti "CPU Steal Time: persentase waktu vCPU menunggu CPU fisik."

Bagaimana OS tamu bisa tahu itu, jika bahkan tidak menyadari bahwa itu sebenarnya divirtualisasi?

Dengan kata lain, tanpa alat integrasi yang tepat diinstal pada tamu, OS tamu bahkan tidak akan tahu bahwa CPU-nya sebenarnya adalah v CPU. Bahkan tidak akan tahu bahwa ada kekuatan lain di luar dirinya sendiri "mencuri" siklus CPU darinya, oleh karena itu metrik tidak akan ada pada VM tamu.

VMware telah mulai mengekspos data ini untuk tamu Windows dan juga dari ESXi 5.0. Alat integrasi VMware juga perlu diperbarui pada tamu. Ini referensi ; mereka menyebutnya "CPU Stolen Time".

Hypervisor seperti Hyper-V tidak memberikan tamu akses langsung ke sumber daya fisik seperti prosesor fisik atau inti prosesor. Sebaliknya hypervisor memberi mereka vDevs - perangkat virtual - seperti vCPUs.

Contoh utama mengapa: Katakanlah OS tamu mesin virtual membuat panggilan untuk mem-flush TLB (terjemahan look-selain buffer) yang merupakan komponen fisik dari CPU fisik. Jika OS tamu diizinkan untuk menghapus seluruh TLB pada prosesor fisik, itu akan memiliki efek kinerja negatif untuk semua VM lain yang juga berbagi TLB fisik yang sama. Dalam kasus Windows, panggilan itu di OS tamu diterjemahkan ke dalam panggilan "hypercall" atau "tercerahkan" yang ditafsirkan oleh hypervisor sehingga hanya bagian dari TLB yang relevan dengan mesin virtual yang disiram.


(Menariknya, itu mengisyaratkan kepada saya bahwa VM tamu yang tidak memiliki alat dan / atau layanan integrasi yang tepat dapat memiliki kemampuan untuk mempengaruhi kinerja semua VM lain di host yang sama, tetapi itu sepenuhnya di luar lingkup topik ini .)


Semua itu untuk mengatakan bahwa Anda masih dapat mendeteksi di host Hyper-V waktu yang dihabiskan prosesor virtual menunggu prosesor nyata tersedia sehingga dapat dijadwalkan untuk berjalan. Tetapi Anda hanya dapat melihat data itu pada hypervisor Windows Hyper-V. Jika mungkin untuk melihat ini di hypervisors lain, saya mendesak orang lain untuk memberi tahu kami bagaimana melihatnya di hypervisor itu dan juga jika terkena tamu. (Sunting 10/1/2013 Terima kasih evilensky untuk melakukan hal itu!)

Mesin uji saya adalah Hyper-V Server 2012, yang merupakan edisi gratis dari Server 2012 yang hanya menjalankan Core dan peran Hyper-V. Secara efektif sama dengan Windows Server 2012 yang menjalankan Hyper-V.

Jalankan Perfmon di partisi orang tua Anda, alias host fisik. Muat penghitung ini:

Hyper-V Hypervisor Virtual Processor\CPU Wait Time Per Dispatch\*

Anda akan melihat bahwa akan ada instance penghitung itu untuk setiap mesin virtual pada hypervisor itu, serta _Total. Definisi Microsoft dari penghitung Perfmon itu adalah:

Waktu rata-rata (dalam nanodetik) dihabiskan menunggu prosesor virtual untuk dikirim ke prosesor logis.

Jelas, Anda ingin nomor itu serendah mungkin. Untuk komputer, menunggu hampir tidak pernah merupakan hal yang baik.

Counter kinerja lainnya pada hypervisor yang Anda akan ingin menyelidiki adalah Hyper-V Hypervisor Root Virtual Processor\% Guest Run Time, % Hypervisor Run Time, dan % Total Run Time. Penghitung ini memberi Anda persentase yang dapat digunakan untuk menentukan fakta seperti berapa banyak waktu yang dihabiskan prosesor "nyata" untuk melakukan hal - hal selain melayani VM atau semua VM.

Jadi kesimpulannya, metrik yang Anda cari di mesin virtual tamu tergantung pada hypervisor yang digunakannya, apakah hypervisor itu memilih untuk memberikan data tentang bagaimana ia menghabiskan waktu selain melayani VM itu, dan jika tamu itu OS memiliki alat / layanan / driver integrasi virtualisasi yang tepat untuk cukup sadar untuk menyadari bahwa hypervisor membuat data tersebut tersedia.

Saya tahu tidak ada cara pada tamu Windows, alat integrasi diinstal atau tidak, untuk melihat berapa banyak waktu, dalam hal detik atau persentase, yang host VM telah habiskan untuk memperbaikinya atau tidak melayani masing-masing dengan total waktu prosesor fisik. (Sunting 10/1/2013: ESXi 5.0 atau lebih baik memaparkan data ini ke VM tamu melalui alat integrasi. Namun tetap tidak ada pada Hyper-V.)

Ryan Ries
sumber
1
+1 - jawaban epik epik
Mark Henderson
1
+1 untuk eksplorasi menyeluruh, sangat dihargai. Jadi mengenai EC2 ini tampaknya bermuara pada tamu Unix / Linux yang menjalankan dalam Xen paravirtualmode, yang merupakan domain paravirtualized (yaitu bukan virtualisasi penuh, OS tamu dimodifikasi untuk berjalan pada host), di mana mencuri waktu tersedia, vs Windows / FreeBSD / ... tamu menjalankan Xen HVM, yang merupakan perangkat keras yang ditiru domain (yaitu OS tamu tidak dimodifikasi untuk berjalan di host), di mana tampaknya tidak - jadi jawaban negatif yang pasti, kira itulah yang penting. Apakah saya membaca Anda dengan benar sehingga pada akhirnya bisa ditambahkan?
Steffen Opel
2
Secara teori, itu bisa, tetapi jangan menahan nafas. Seperti saya katakan, itu mensyaratkan bahwa hypervisor khusus vendor dan OS tamu khusus vendor melakukan upaya terkoordinasi untuk membuat data tentang host fisik tersedia dan dapat diakses dari dalam VM tamu. wiki.xen.org/wiki/Xen_Kernel_Feature_Matrix
Ryan Ries
2
Tangential: VMware hypervisors akan merujuk pada mencuri tim sebagai waktu siap - jumlah waktu CPU virtual sedang menunggu untuk dilayani oleh sumber daya fisik.
Yolo Perdiem
1
ini adalah topik terkenal di mainframe. Metrik telah tersedia selama beberapa dekade. Ini disebut "tunggu cpu".
2

FWIW, saya hanya melihat melalui counter Perfmon dari server Windows 2008r2 yang berjalan di bawah Hyper-V dan tidak melihat apa pun yang terkait mencuri waktu (atau untuk virtualisasi sama sekali dalam hal ini).

uSlackr
sumber
Terima kasih telah memeriksa - ternyata Penghitung Virtualisasi untuk Hyper-V seharusnya benar-benar tersedia, mungkin mereka harus diinstal / diaktifkan terlebih dahulu? Namun saya masih tidak dapat mengidentifikasi / menyimpulkan metrik yang serupa / terkait.
Steffen Opel