Tentang Penghitung Kinerja
Penghitung Kinerja Windows menyediakan lapisan abstraksi tingkat tinggi dengan antarmuka yang konsisten untuk mengumpulkan berbagai jenis data sistem seperti statistik prosesor, memori, dan penggunaan disk. Administrator sistem menggunakan penghitung kinerja untuk memantau masalah performa atau perilaku. Pengembang perangkat lunak menggunakan penghitung kinerja untuk memeriksa penggunaan sumber daya komponen mereka.
Penting
Penghitung Kinerja Windows dioptimalkan untuk penemuan dan pengumpulan data administratif/diagnostik. Mereka tidak sesuai untuk pengumpulan data frekuensi tinggi atau untuk pembuatan profil aplikasi karena tidak dirancang untuk dikumpulkan lebih dari sekali per detik. Untuk akses overhead yang lebih rendah ke informasi sistem, Anda mungkin lebih suka API langsung seperti Pembantu Status Proses, GlobalMemoryStatusEx, GetSystemTimes, atau GetProcessTimes. Untuk pembuatan profil, Anda dapat mengumpulkan log ETW dengan data pembuatan profil sistem menggunakan tracelog.exe dengan -critsec
opsi , , -dpcisr
-eflag
, atau -ProfileSource
, atau Anda dapat menggunakan Profiling Penghitung Perangkat Keras.
Catatan
Jangan bingung dengan Penghitung Kinerja Windows dengan API QueryPerformanceCounter. Penghitung Kinerja Windows menyediakan abstraksi tingkat tinggi untuk berbagai jenis informasi sistem. Fungsi QueryPerformanceCounter menyediakan akses yang dioptimalkan ke tanda waktu presisi tinggi.
Memulai
- Gunakan Alat Penghitung Kinerja saat Anda ingin mengumpulkan atau melihat data performa dari sistem.
- Gunakan API Pengumpulan Penghitung Kinerja saat Anda ingin menulis skrip atau program yang mengumpulkan data performa dari sistem lokal.
- Gunakan Kelas Penghitung Kinerja WMI saat Anda ingin mengumpulkan data performa dari sistem lokal atau jarak jauh menggunakan WMI.
- Gunakan API Penyedia Penghitung Kinerja saat Anda ingin menerbitkan data performa dari komponen perangkat lunak Anda.
Konsep
Sistem Penghitung Kinerja Windows diatur ke dalam konsumen, penyedia, counterset, penghitung, instans, dan nilai penghitung.
Konsumen adalah komponen perangkat lunak yang menggunakan data performa. Windows mencakup beberapa alat bawaan yang memanfaatkan data performa. Ini termasuk Task Manager, Resource Monitor, Performance Monitor, typeperf.exe, logman.exe, dan relog.exe. Pengembang dapat menulis skrip dan aplikasi yang mengakses penghitung kinerja melalui API penghitung kinerja.
Penyedia adalah komponen perangkat lunak yang menghasilkan dan menerbitkan data performa. Penyedia akan menerbitkan data untuk satu atau beberapa counterset. Misalnya, sistem database mungkin mendaftarkan dirinya sebagai penyedia data performa.
- Penyedia V1 adalah komponen perangkat lunak yang menerbitkan data performa melalui DLL performa yang berjalan dalam proses konsumen. Penyedia V1 diinstal ke sistem melalui
.ini
file. Arsitektur penyedia V1 tidak digunakan lagi. Penyedia baru harus menggunakan arsitektur penyedia V2. - Penyedia V2 adalah komponen perangkat lunak yang menerbitkan data performa melalui API penyedia penghitung kinerja. Penyedia V2 diinstal ke sistem melalui
.man
file (manifes XML).
Counterset adalah pengelompokan data performa dalam penyedia. Counterset memiliki nama dan satu atau beberapa penghitung. Mengumpulkan data dari counterset mengembalikan sejumlah instans. Di beberapa API Windows, counterset disebut objek performa. Misalnya, penyedia data performa untuk sistem database mungkin menyediakan counterset untuk statistik per database.
Penghitung adalah definisi dari satu bagian data performa. Penghitung memiliki nama dan jenis. Misalnya, counterset "statistik per database" mungkin berisi penghitung bernama "transaksi per detik" dengan jenis PERF_COUNTER_COUNTER
.
Instans adalah entitas tentang data performa mana yang dilaporkan. Instans memiliki nama (string) dan satu atau beberapa nilai penghitung. Misalnya, counterset "statistik per database" mungkin berisi satu instans per database. Nama instans akan menjadi nama database, dan setiap instans akan berisi nilai penghitung untuk penghitung "transaksi per detik", "penggunaan memori", dan penghitung "penggunaan disk".
Nilai penghitung adalah nilai dari satu bagian data penghitung kinerja. Nilai penghitung adalah bilangan bulat yang tidak ditandatangani, baik 32-bit atau 64-bit tergantung pada jenis penghitung yang sesuai. Saat berbicara tentang instans, nilai penghitung terkadang disebut penghitung atau nilai.
Tip
Mungkin berguna untuk menghubungkan istilah penghitung kinerja ke istilah spreadsheet yang lebih akrab. Counterset seperti meja. Penghitung seperti kolom. Instans seperti baris. Nilai penghitung seperti sel dalam tabel.
Counterset instans tunggal selalu berisi data untuk tepat satu instans. Ini umum untuk counterset yang melaporkan statistik sistem-global. Misalnya, Windows memiliki counterset instans tunggal bawaan bernama "Memori" yang melaporkan penggunaan memori global.
Penghitung multi-instans berisi data untuk jumlah variabel instans. Ini umum untuk counterset yang melaporkan tentang entitas dalam sistem. Misalnya, Windows memiliki counterset multi-instans bawaan bernama "Informasi Prosesor" yang melaporkan satu instans untuk setiap CPU yang diinstal.
Konsumen akan secara berkala mengumpulkan dan merekam data dari counterset penyedia. Misalnya, konsumen dapat mengumpulkan data sekali per detik atau sekali per menit. Data yang dikumpulkan disebut sampel. Sampel terdiri dari tanda waktu bersama dengan data untuk instans counterset. Data untuk setiap instans mencakup nama instans (string) dan sekumpulan nilai penghitung (bilangan bulat, satu nilai untuk setiap penghitung dalam counterset).
Nama instans biasanya harus unik dalam sampel, yaitu penyedia tidak boleh mengembalikan dua instans dengan nama yang sama sebagai bagian dari satu sampel. Beberapa penyedia lama tidak mengikuti aturan ini, sehingga konsumen harus dapat mentolerir nama instans yang tidak unik. Nama instans tidak peka huruf besar/kecil, jadi instans tidak boleh memiliki nama yang berbeda hanya jika terjadi.
Catatan
Untuk alasan kompatibilitas mundur, counterset "Proses" mengembalikan nama instans yang tidak unik berdasarkan nama file EXE. Ini dapat menyebabkan hasil yang membingungkan, terutama ketika proses dengan nama yang tidak unik dimulai atau dimatikan, karena ini biasanya akan mengakibatkan gangguan data karena pencocokan nama instans yang salah antar sampel. Konsumen dari counterset "Proses" harus dapat mentolerir nama instans yang tidak unik ini dan gangguan data yang dihasilkan.
Di Windows 11 dan yang lebih baru, Anda dapat menggunakan counterset Process V2
untuk menghindari masalah ini.
Nama instans harus stabil di seluruh sampel, yaitu penyedia harus menggunakan nama instans yang sama untuk entitas yang sama setiap kali counterset dikumpulkan.
Setiap penghitung memiliki jenis. Jenis penghitung menunjukkan jenis nilai mentah penghitung (bilangan bulat 32-bit yang tidak ditandatangani atau bilangan bulat 64-bit yang tidak ditandatangani). Jenis penghitung juga menunjukkan apa yang diwakili nilai mentah penghitung, yang menentukan bagaimana nilai mentah harus diproses untuk menghasilkan statistik yang berguna.
Meskipun beberapa jenis penghitung sederhana dan memiliki nilai mentah yang secara langsung berguna, banyak jenis penghitung memerlukan pemrosesan tambahan untuk membuat nilai yang diformat yang berguna. Untuk menghasilkan nilai yang diformat, beberapa jenis penghitung memerlukan nilai mentah dari dua sampel, beberapa jenis penghitung memerlukan tanda waktu, dan beberapa jenis penghitung memerlukan nilai mentah dari beberapa penghitung. Contohnya:
PERF_COUNTER_LARGE_RAWCOUNT
adalah nilai mentah 64-bit yang tidak memerlukan pemrosesan untuk berguna. Ini sesuai untuk nilai point-in-time seperti "Byte memori yang digunakan".PERF_COUNTER_RAWCOUNT_HEX
adalah nilai mentah 32-bit yang hanya memerlukan pemformatan heksadesimal sederhana agar berguna. Ini sesuai untuk titik waktu atau mengidentifikasi informasi seperti "Bendera" atau "Alamat Dasar".PERF_COUNTER_BULK_COUNT
adalah nilai mentah 64-bit yang menunjukkan jumlah peristiwa dan digunakan untuk menghitung laju di mana peristiwa terjadi. Agar berguna, jenis penghitung ini memerlukan dua sampel yang dipisahkan tepat waktu. Nilai yang diformat adalah laju peristiwa, yaitu berapa kali peristiwa terjadi per detik selama interval antara dua sampel. Mengingat dua sampels0
dans1
, nilai yang diformat (tingkat peristiwa) akan dihitung sebagai(s1.EventCount - s0.EventCount)/(s1.TimestampInSeconds - s0.TimestampInSeconds)
.
Penyedia diharapkan untuk berperilaku seolah-olah mereka stateless, yaitu mengumpulkan data dari counterset tidak boleh jelas mempengaruhi status penyedia. Misalnya, penyedia tidak boleh mengatur ulang nilai penghitung ke 0 ketika counterset dikumpulkan dan tidak boleh menggunakan tanda waktu koleksi sebelumnya untuk menyesuaikan nilai dalam koleksi saat ini. Sebaliknya, ia harus memberikan nilai penghitung mentah sederhana dengan jenis yang akurat sehingga konsumen dapat menghitung statistik yang berguna berdasarkan nilai mentah dan tanda waktunya.
Arsitektur API Performa
Konsumen penghitung kinerja meliputi:
- Aplikasi yang disediakan Microsoft seperti Task Manager, Resource Monitor, Performance Monitor, dan typeperf.exe.
- Permukaan API tingkat tinggi yang disediakan Microsoft yang mengekspos data penghitung kinerja seperti Kelas Performa WMI.
- Aplikasi atau skrip Anda sendiri yang menggunakan API konsumen penghitung kinerja.
Sebagian besar konsumen penghitung kinerja menggunakan API dari PDH.dll untuk mengumpulkan data performa. PDH mengelola banyak aspek kompleks dari pengumpulan penghitung kinerja seperti mengurai kueri, mencocokkan instans di beberapa sampel, dan menghitung nilai yang diformat dari data penghitung mentah. Implementasi PDH menggunakan API registri saat menggunakan data dari penyedia V1 dan menggunakan API konsumen V2 saat menggunakan data dari penyedia V2.
Beberapa konsumen penghitung kinerja yang lebih lama menggunakan API registri untuk mengumpulkan data performa dari kunci registri khusus HKEY_PERFORMANCE_DATA
. Ini tidak disarankan untuk kode baru karena memproses data dari registri rumit dan rawan kesalahan. Implementasi API registri secara langsung mendukung pengumpulan data dari penyedia V1. Ini secara tidak langsung mendukung pengumpulan data dari penyedia V2 melalui lapisan terjemahan yang menggunakan API konsumen V2.
Beberapa konsumen penghitung kinerja menggunakan fungsi PerfLib V2 Consumer untuk langsung mengakses data dari penyedia V2. Ini lebih kompleks daripada menggunakan data menggunakan API PDH, tetapi pendekatan ini dapat berguna jika API PDH tidak dapat digunakan karena masalah performa atau dependensi. Implementasi PerfLib V2 secara langsung mendukung pengumpulan data dari penyedia V2. Ini tidak mendukung pengumpulan data dari penyedia V1.
Catatan
Windows OneCore tidak menyertakan PDH.dll dan tidak menyertakan dukungan untuk menggunakan data penghitung kinerja melalui API registri. Konsumen yang berjalan di OneCore harus menggunakan fungsi Konsumen PerfLib V2.
Penyedia V1 diimplementasikan sebagai DLL penyedia yang dimuat ke dalam proses konsumen. Implementasi API registri mengelola pemuatan DLL penyedia, memanggil DLL untuk mengumpulkan data performa, dan membongkar DLL sebagaimana mewajarkan. DLL penyedia bertanggung jawab untuk mengumpulkan data performa yang sesuai, misalnya dengan menggunakan API Windows normal, RPC, pipa bernama, memori bersama, atau mekanisme komunikasi antarproseduran lainnya.
Penyedia V2 diimplementasikan sebagai program mode pengguna (seringkali layanan Windows) atau driver mode kernel. Biasanya kode penyedia data performa diintegrasikan langsung ke dalam komponen yang ada (yaitu driver atau layanan melaporkan statistik tentang dirinya sendiri). Implementasi PerfLib V2 mengelola permintaan dan respons melalui ekstensi kernel PCW.sys sehingga penyedia biasanya tidak perlu mengimplementasikan komunikasi antarproseksi apa pun untuk menyediakan data performa.
Catatan
API dan alat Penghitung Kinerja Windows mencakup dukungan terbatas untuk mengakses penghitung kinerja dari komputer lain melalui Remote Registry (untuk penyedia V1) dan RPC (untuk penyedia V2). Dukungan ini seringkali sulit digunakan dalam hal kontrol autentikasi (alat dan API hanya dapat mengautentikasi sebagai pengguna saat ini) serta dalam hal konfigurasi sistem (titik akhir dan layanan yang diperlukan dinonaktifkan secara default). Dalam banyak kasus, lebih baik mengakses penghitung kinerja sistem jarak jauh melalui WMI daripada melalui dukungan akses jarak jauh bawaan.
Audiens pengembang
Penghitung kinerja sering dikonsumsi oleh administrator untuk mengidentifikasi masalah performa atau perilaku sistem yang abnormal, oleh pengembang untuk mempelajari penggunaan sumber daya komponen perangkat lunak, dan oleh pengguna individu untuk memahami bagaimana program bersifat pada sistem mereka. Penggunaan dapat terjadi melalui alat GUI seperti Task Manager atau Monitor Performa, alat baris perintah seperti typeperf.exe atau logman.exe, melalui pembuatan skrip melalui WMI dan PowerShell, atau melalui API C/C++ dan .NET.
Penyedia penghitung kinerja biasanya diimplementasikan sebagai driver mode kernel atau layanan mode pengguna. Penyedia penghitung kinerja biasanya ditulis dalam C atau C++.
Persyaratan run-time
Untuk informasi tentang persyaratan run-time untuk elemen pemrograman tertentu, lihat bagian Persyaratan dari halaman referensi untuk elemen tersebut.
Untuk riwayat versi, lihat Apa yang Baru.