Bagikan melalui


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 yang lebih langsung seperti Process Status Helper, GlobalMemoryStatusEx, GetSystemTimes, atau GetProcessTimes. Untuk pembuatan profil, Anda dapat mengumpulkan log ETW dengan data pembuatan profil sistem menggunakan tracelog.exe dengan opsi -critsec, -dpcisr, -eflag, atau -ProfileSource, atau Anda dapat menggunakan Profiling Penghitung Perangkat Keras.

Nota

Jangan membingungkan Penghitung Kinerja Windows dengan QueryPerformanceCounter API. Penghitung Kinerja Windows menyediakan abstraksi tingkat tinggi untuk berbagai jenis informasi sistem. Fungsi QueryPerformanceCounter menyediakan akses yang dioptimalkan ke tanda waktu presisi tinggi.

Persiapan

  • 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, set penghitung, penghitung, instans, dan nilai penghitung.

konsumen adalah komponen perangkat lunak yang memanfaatkan data performa. Windows menyertakan 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 mempublikasikan data performa. Penyedia akan menerbitkan data untuk satu atau beberapa set penghitung . 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 file .ini. 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 file .man (manifes XML).

counterset adalah pengelompokan data performa dalam penyedia. Counterset memiliki nama dan satu atau beberapa penghitung . Pengumpulan data dari counterset mengembalikan sejumlah instans . Di beberapa API Windows, counterset disebut sebagai objek performa. Misalnya, penyedia data performa untuk sistem database mungkin menyediakan counterset untuk statistik per database.

penghitung adalah definisi dari satu bagian data performa. Sebuah counter memiliki nama dan tipe. Misalnya, set penghitung "statistik per database" mungkin berisi penghitung bernama "transaksi per detik" dengan tipe PERF_COUNTER_COUNTER.

Instans adalah entitas yang datanya 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 pengukuran 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 sebagai penghitung atau sebagai nilai .

Saran

Mungkin berguna untuk menghubungkan istilah penghitung kinerja ke istilah spreadsheet yang lebih dikenal. counterset seperti tabel. Penghitung mirip dengan 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.

Himpunan penghitung multi-instans berisi data untuk jumlah instans yang bervariasi. Ini umum untuk counterset yang melaporkan tentang entitas dalam sistem. Misalnya, Windows memiliki kumpulan penghitung multi-instans bawaan yang bernama "Informasi Prosesor" yang melaporkan satu instans untuk setiap CPU yang terpasang.

Konsumen akan secara berkala mengumpulkan dan merekam data dari set penghitung penyedia layanan. Misalnya, konsumen dapat mengumpulkan data sekali per detik atau sekali per menit. Data yang dikumpulkan disebut sampel . Sampel terdiri dari penanda waktu beserta data untuk instance dari 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, jadi konsumen harus dapat mentolerir nama instans yang tidak unik. Nama instans tidak peka terhadap huruf besar dan kecil, jadi instans seharusnya tidak memiliki nama yang berbeda hanya dalam penggunaan huruf besar dan kecil.

Nota

Untuk alasan kompatibilitas ke belakang, 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 counterset "Proses" harus dapat mentolerir nama instans yang tidak unik ini dan gangguan data akibatnya. Di Windows 11 dan versi yang lebih baru, Anda dapat menggunakan set penghitung 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 dari nilai mentah penghitung (bilangan bulat 32-bit yang tidak ditandatangani atau bilangan bulat 64-bit yang tidak ditandatangani). Jenis penghitung juga menunjukkan representasi dari nilai mentah penghitung, yang menentukan bagaimana nilai tersebut harus diproses untuk menghasilkan statistik yang berguna.

Meskipun beberapa jenis penghitung sederhana dan memiliki nilai mentah yang berguna secara langsung, banyak jenis penghitung memerlukan pemrosesan tambahan untuk membuat nilai yang diformat 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. Misalnya:

  • PERF_COUNTER_LARGE_RAWCOUNT adalah nilai mentah 64-bit yang tidak memerlukan pemrosesan yang berguna. Ini tepat untuk nilai saat tertentu seperti "byte yang digunakan dari memori".
  • 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 sampel s0 dan s1, nilai yang diformat (laju peristiwa) akan dihitung sebagai (s1.EventCount - s0.EventCount)/(s1.TimestampInSeconds - s0.TimestampInSeconds).

Penyedia diharapkan untuk berperilaku seolah-olah mereka tidak memiliki status tetap, yaitu mengumpulkan data dari counterset tidak boleh secara nyata mempengaruhi keadaan 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

Aplikasi penghitung kinerja memanggil API Windows yang memanggil penyedia untuk mendapatkan data performa.

Konsumen penghitung kinerja meliputi:

  • aplikasi yang disediakan Microsoft seperti Pengelola Tugas (Task Manager), Pemantau Sumber Daya (Resource Monitor), Pemantau Kinerja (Performance Monitor), dan typeperf.exe.
  • Antarmuka API tingkat tinggi yang disediakan oleh Microsoft yang menampilkan data penghitung kinerja seperti Kelas Kinerja WMI.
  • Aplikasi atau skrip Anda sendiri yang menggunakan API penghitung kinerja konsumen .

Sebagian besar konsumen penghitung kinerja menggunakan API dari PDH.dll untuk mengumpulkan data performa. PDH mengelola banyak aspek kompleks dalam pengumpulan penghitung kinerja, seperti menguraikan kueri, mencocokkan instans di berbagai sampel, dan menghitung nilai yang terformat 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 versi 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 performa menggunakan fungsi PerfLib V2 Consumer untuk mengakses data secara langsung 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.

Nota

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 aplikasi konsumennya. Implementasi API registri mengelola memuat DLL penyedia, memanggil DLL untuk mengumpulkan data performa, dan membongkar DLL sesuai kebutuhan. DLL penyedia bertanggung jawab untuk mengumpulkan data performa sebagaimanayang sesuai, misalnya dengan menggunakan API Windows normal, RPC, pipa bernama, memori bersama, atau mekanisme komunikasi antarproses 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.

Nota

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.

Lihat juga

Menggunakan penghitung kinerja

Referensi Penghitung Kinerja