Analisis CPU
Panduan ini menyediakan teknik terperinci yang dapat Anda gunakan untuk menyelidiki masalah terkait Central Processing Units (CPU) yang memengaruhi metrik penilaian.
Bagian metrik atau masalah individual dalam panduan analisis khusus penilaian mengidentifikasi masalah umum untuk penyelidikan. Panduan ini menyediakan teknik dan alat yang dapat Anda gunakan untuk menyelidiki masalah tersebut.
Teknik dalam panduan ini menggunakan Windows Penganalisis Kinerja (WPA) dari Windows Performance Toolkit (WPT). WPT adalah bagian dari Windows Assessment and Deployment Kit (Windows ADK) dan dapat diunduh dari Program Windows Insider. Untuk informasi selengkapnya, lihat Referensi Teknis Toolkit Performa Windows.
Panduan ini diatur ke dalam tiga bagian berikut:
Bagian ini menjelaskan bagaimana sumber daya CPU dikelola di Windows 10. |
|
Bagian ini menjelaskan cara melihat dan menginterpretasikan informasi CPU di Windows ADK Toolkit. |
|
Bagian ini berisi kumpulan teknik yang dapat Anda gunakan untuk menyelidiki dan menyelesaikan masalah umum yang terkait dengan performa CPU. |
Latar
Bagian ini berisi deskripsi sederhana dan diskusi dasar tentang performa CPU. Untuk studi yang lebih komprehensif tentang topik ini, kami merekomendasikan buku Windows Internals, Edisi Kelima.
Komputer modern dapat berisi beberapa CPU yang diinstal dalam soket terpisah. Setiap CPU dapat menghosting beberapa inti prosesor fisik, masing-masing mampu memproses satu atau dua aliran instruksi terpisah secara bersamaan. Prosesor aliran instruksi individu ini dikelola oleh sistem operasi Windows sebagai prosesor logis.
Dalam panduan ini, prosesor dan CPU mengacu pada prosesor logis — yaitu, perangkat keras yang dapat digunakan sistem operasi untuk menjalankan instruksi program.
Windows 10 secara aktif mengelola perangkat keras prosesor dengan dua cara utama: manajemen daya, untuk menyeimbangkan konsumsi dan performa daya; dan penggunaan, untuk menyeimbangkan persyaratan pemrosesan program dan driver.
Manajemen Daya Prosesor
Prosesor tidak selalu ada dalam status operasi. Ketika tidak ada instruksi yang siap dijalankan, Windows akan menempatkan prosesor ke dalam status menganggur target (atau C-State), seperti yang ditentukan oleh Windows Power Manager. Berdasarkan pola penggunaan CPU, status C target prosesor akan disesuaikan dari waktu ke waktu.
Status diam adalah status bernomor dari C0 (aktif; tidak menganggur) melalui status daya yang semakin rendah. Status ini termasuk C1 (dihentikan tetapi jam masih diaktifkan), C2 (dihentikan dan jam dinonaktifkan), dan sebagainya. Implementasi status diam bersifat khusus prosesor. Namun, jumlah status yang lebih tinggi di semua prosesor mencerminkan konsumsi daya yang lebih rendah, tetapi juga waktu tunggu yang lebih lama sebelum prosesor dapat kembali ke pemrosesan instruksi. Waktu yang dihabiskan dalam status diam secara signifikan mempengaruhi penggunaan energi dan masa pakai baterai.
Beberapa prosesor dapat beroperasi dalam status performa (P-) dan pembatasan (T-) bahkan ketika mereka secara aktif memproses instruksi. Status P menentukan frekuensi jam dan tingkat tegangan yang didukung prosesor. Status-T tidak secara langsung mengubah frekuensi jam, tetapi dapat menurunkan kecepatan jam yang efektif dengan melompati aktivitas pemrosesan pada beberapa pecahan tanda centang jam. Bersama-sama, status P dan T saat ini menentukan frekuensi operasi prosesor yang efektif. Frekuensi yang lebih rendah sesuai dengan performa yang lebih rendah dan konsumsi daya yang lebih rendah.
Windows Power Manager menentukan status P dan T yang sesuai untuk setiap prosesor, berdasarkan pola penggunaan CPU dan kebijakan daya sistem. Waktu yang dihabiskan dalam status berkinerja tinggi versus status performa rendah secara signifikan mempengaruhi penggunaan energi dan masa pakai baterai.
Manajemen Penggunaan Prosesor
Windows menggunakan tiga abstraksi utama untuk mengelola penggunaan prosesor.
Proses
Utas
Panggilan Prosedur Yang Ditangguhkan (DPC) dan Rutinitas Layanan Interupsi (ISR)
Proses dan Utas
Semua program mode pengguna di Windows berjalan dalam konteks proses. Proses mencakup atribut dan komponen berikut:
Ruang alamat virtual
Kelas prioritas
Modul program yang dimuat
Informasi lingkungan dan konfigurasi
Setidaknya satu utas
Meskipun proses berisi modul, konteks, dan lingkungan program, proses tersebut tidak dijadwalkan secara langsung untuk dijalankan pada prosesor. Sebagai gantinya, utas yang dimiliki oleh proses dijadwalkan untuk berjalan pada prosesor.
Utas mempertahankan informasi konteks eksekusi. Hampir semua komputasi dikelola sebagai bagian dari utas. Aktivitas utas pada dasarnya memengaruhi pengukuran dan performa sistem.
Karena jumlah prosesor dalam sistem terbatas, semua utas tidak dapat dijalankan secara bersamaan. Windows menerapkan berbagi waktu prosesor, yang memungkinkan utas berjalan selama jangka waktu tertentu sebelum prosesor beralih ke utas lain. Tindakan peralihan antar utas disebut sakelar konteks dan dilakukan oleh komponen Windows yang disebut dispatcher. Dispatcher membuat keputusan penjadwalan utas berdasarkan prioritas, prosesor dan afinitas yang ideal, kuantum, dan status.
Prioritas
Prioritas adalah faktor kunci dalam bagaimana dispatcher memilih utas mana yang akan dijalankan. Prioritas alur adalah bilangan bulat dari 0 hingga 31. Jika utas dapat dieksekusi dan memiliki prioritas yang lebih tinggi daripada utas yang sedang berjalan, utas berprioritas lebih rendah segera didahulukan dan utas berprioritas lebih tinggi dialihkan konteksnya.
Ketika utas berjalan atau siap dijalankan, tidak ada utas berprioritas lebih rendah yang dapat berjalan kecuali ada cukup prosesor untuk menjalankan kedua utas secara bersamaan, atau kecuali utas berprioritas lebih tinggi dibatasi untuk berjalan hanya pada subset prosesor yang tersedia. Utas memiliki prioritas dasar yang dapat ditingkatkan sementara ke prioritas yang lebih tinggi pada waktu-waktu tertentu: misalnya, ketika proses memiliki jendela latar depan, atau ketika I/O selesai.
Prosesor dan Afinitas Ideal
Prosesor dan afinitas ideal utas menentukan prosesor tempat utas tertentu dijadwalkan untuk dijalankan. Setiap utas memiliki prosesor ideal yang diatur baik oleh program atau secara otomatis oleh Windows. Windows menggunakan metodologi round-robin sehingga jumlah utas yang kira-kira sama dalam setiap proses ditetapkan ke setiap prosesor. Jika memungkinkan, Windows menjadwalkan utas untuk berjalan pada prosesor idealnya; namun, utas kadang-kadang dapat berjalan pada prosesor lain.
Afinitas prosesor utas membatasi prosesor tempat utas akan berjalan. Ini adalah pembatasan yang lebih kuat daripada atribut prosesor ideal utas. Program menetapkan afinitas dengan menggunakan SetThreadAffinityMask. Afinitas dapat mencegah utas berjalan pada prosesor tertentu.
Quantum
Sakelar konteks adalah operasi yang mahal. Windows umumnya memungkinkan setiap utas berjalan untuk jangka waktu yang disebut kuantum sebelum beralih ke utas lain. Durasi kuantum dirancang untuk menjaga respons sistem yang jelas. Ini memaksimalkan throughput dengan meminimalkan overhead pengalihan konteks. Durasi kuantum dapat bervariasi antara klien dan server. Durasi kuantum biasanya lebih lama di server untuk memaksimalkan throughput dengan mengorbankan responsivitas yang jelas. Pada komputer klien, Windows menetapkan kuantum yang lebih pendek secara keseluruhan, tetapi menyediakan kuantum yang lebih panjang ke utas yang terkait dengan jendela latar depan saat ini.
Status
Setiap utas ada dalam status eksekusi tertentu pada waktu tertentu. Windows menggunakan tiga status yang relevan dengan performa; ini adalah: Berjalan, Siap, dan Menunggu.
Utas yang saat ini sedang dijalankan berada dalam status Berjalan . Utas yang dapat dijalankan tetapi saat ini tidak berjalan berada dalam status Siap . Utas yang tidak dapat dijalankan karena menunggu peristiwa tertentu berada dalam status Menunggu .
Transisi status ke status diperlihatkan dalam Transisi Status Alur Gambar 1:
Gambar 1 Transisi Status Utas
Gambar 1 Transisi Status Utas dijelaskan sebagai berikut:
Utas dalam status Berjalan memulai transisi ke status Menunggu dengan memanggil fungsi tunggu seperti WaitForSingleObject atau Sleep(> 0).
Operasi utas atau kernel yang sedang berjalan membaca utas dalam status Menunggu (misalnya, SetEvent atau kedaluwarsa timer). Jika prosesor menganggur atau jika utas yang dibaca memiliki prioritas yang lebih tinggi daripada utas yang sedang berjalan, utas yang disiapan dapat beralih langsung ke status Berjalan. Jika tidak, itu dimasukkan ke dalam status Siap.
Utas dalam status Siap dijadwalkan untuk diproses oleh dispatcher ketika utas yang sedang berjalan menunggu, menghasilkan (Tidur(0)), atau mencapai akhir kuantumnya.
Utas dalam status Berjalan dialihkan dan ditempatkan ke status Siap oleh dispatcher ketika didahului oleh utas prioritas yang lebih tinggi, hasil (Tidur(0)), atau ketika kuantumnya berakhir.
Utas yang ada dalam status Menunggu tidak selalu menunjukkan masalah performa. Sebagian besar utas menghabiskan waktu yang signifikan dalam status Menunggu, yang memungkinkan prosesor memasuki status diam dan menghemat energi. Status utas menjadi faktor penting dalam performa hanya ketika pengguna sedang menunggu utas untuk menyelesaikan operasi.
DPC dan ISR
Selain memproses utas, prosesor merespons pemberitahuan dari perangkat keras seperti kartu jaringan atau timer. Ketika perangkat keras memerlukan perhatian prosesor, perangkat tersebut menghasilkan gangguan. Windows merespons gangguan perangkat keras dengan menangguhkan utas yang sedang berjalan dan menjalankan ISR yang terkait dengan gangguan.
Selama menjalankan ISR, prosesor dapat dicegah untuk menangani aktivitas lain, termasuk gangguan lainnya. Untuk alasan ini, ISR harus diselesaikan dengan cepat atau performa sistem dapat menur Untuk mengurangi waktu eksekusi, ISR biasanya menjadwalkan DPC untuk melakukan pekerjaan yang harus dilakukan sebagai respons terhadap gangguan. Untuk setiap prosesor logis, Windows mempertahankan antrean DPC terjadwal. DPC lebih diprioritaskan daripada utas pada tingkat prioritas apa pun. Sebelum prosesor kembali memproses utas, prosesor menjalankan semua DPC dalam antreannya.
Selama prosesor menjalankan DPC dan ISR, tidak ada utas yang dapat berjalan pada prosesor tersebut. Properti ini dapat menyebabkan masalah untuk utas yang harus melakukan pekerjaan pada throughput tertentu atau dengan waktu yang tepat, seperti utas yang memutar audio atau video. Jika waktu prosesor yang digunakan untuk menjalankan DPC dan ISR mencegah utas ini menerima waktu pemrosesan yang memadai, utas mungkin tidak mencapai throughput yang diperlukan atau menyelesaikan item kerjanya tepat waktu.
Alat Windows ADK
Windows ADK menulis informasi dan penilaian perangkat keras untuk menilai file hasil. WPA menyediakan informasi terperinci tentang penggunaan CPU dalam berbagai grafik. Bagian ini menjelaskan cara menggunakan Windows ADK dan WPA untuk mengumpulkan, melihat, dan menganalisis data performa CPU.
File Hasil Penilaian Windows ADK
Karena Windows hanya mendukung sistem multiproscessing simetris, semua informasi di bagian ini berlaku untuk semua CPU dan inti yang diinstal.
Informasi perangkat keras CPU terperinci tersedia di bagian EcoSysInfo
file hasil penilaian di bawah simpul <Processor><Instance id=”0”>
.
Contohnya:
<Processor>
<Instance id="0">
<ProcessorName>The name of the first CPU</ProcessorName>
<TSCFrequency>The maximum frequency of the first CPU</TSCFrequency>
<NumProcs>The total number of processors</NumProcs>
<NumCores>The total number of cores</NumCores>
<NumCPUs>The total number of logical processors</NumCPUs>
...and so on...
Grafik WPA
Setelah memuat jejak ke WPA, Anda dapat menemukan informasi perangkat keras prosesor di bawah bagian Trace/System Configuration/General dan Trace/System Configuration/PnP dari WPA UI.
Catatan Semua prosedur dalam panduan ini terjadi di WPA.
Grafik Status Diam CPU
Jika informasi status menganggur dikumpulkan dalam pelacakan, grafik Status Diam Power/CPU akan ditampilkan di UI WPA. Grafik ini selalu berisi data pada status Diam Target untuk setiap prosesor. Grafik juga akan berisi informasi tentang status Menganggur Aktual setiap prosesor jika status ini didukung oleh prosesor.
Setiap baris dalam tabel berikut ini menjelaskan perubahan status menganggur untuk status Target atau Aktual prosesor. Kolom berikut tersedia untuk setiap baris dalam grafik:
Kolom | Detail |
---|---|
CPU |
Prosesor yang dipengaruhi oleh perubahan status. |
Waktu Entri |
Waktu prosesor memasuki status menganggur. |
Waktu Keluar |
Waktu prosesor keluar dari status menganggur. |
Maks:Durasi(ms) |
Waktu yang dihabiskan dalam status menganggur (agregasi default:maximum). |
Min:Duration(ms) |
Waktu yang dihabiskan dalam status diam (agregasi default:minimum). |
Status Berikutnya |
Status yang ditransisikan prosesor setelah status saat ini. |
Status Sebelumnya |
Status dari mana prosesor bertransisi sebelum status saat ini. |
Status |
Status menganggur saat ini. |
Status (Numerik) |
Status menganggur saat ini sebagai angka (misalnya, 0 untuk C0). |
Jumlah:Durasi(ms) |
Waktu yang dihabiskan dalam status diam (agregasi default:sum). |
Tabel |
Tidak digunakan |
Jenis |
Baik Target (untuk status target yang dipilih Power Manager untuk prosesor) atau Aktual (untuk status menganggur prosesor yang sebenarnya). |
Profil WPA default menyediakan dua prasetel untuk grafik ini: Status menurut Jenis, CPU , dan Diagram Status menurut Jenis, CPU.
Status menurut Jenis, CPU
Status Target dan Aktual dari setiap CPU digrafkan bersama dengan nomor status pada sumbu Y dalam grafik CPU Status menurut Jenis. Gambar 2 Status Menganggur CPU berdasarkan Jenis, CPU menunjukkan status Aktual CPU karena berfluktuasi antara status Aktif dan Diam Target.
Gambar 2 Status Diam CPU berdasarkan Jenis, CPU
Diagram Status menurut Jenis, CPU
Dalam grafik ini, status Target dan Aktual dari setiap CPU disajikan dalam format garis waktu. Setiap status memiliki baris terpisah dalam garis waktu. Gambar 3 Diagram Status Diam CPU menurut Jenis, CPU memperlihatkan data yang sama dengan Gambar 2 Status Diam CPU berdasarkan Jenis, CPU, dalam tampilan garis waktu.
Gambar 3 Diagram Status Diam CPU berdasarkan Jenis, CPU
Grafik Frekuensi CPU
Jika data frekuensi CPU dikumpulkan pada sistem yang mendukung beberapa status P atau T, grafik Frekuensi CPU akan tersedia di UI WPA. Setiap baris dalam tabel berikut menunjukkan waktu pada tingkat frekuensi tertentu untuk prosesor. Kolom Frekuensi (MHz) berisi sejumlah frekuensi terbatas yang sesuai dengan status P dan T yang didukung oleh prosesor. Kolom berikut tersedia untuk setiap baris dalam grafik:
Kolom | Detail |
---|---|
% Durasi |
Durasi dinyatakan sebagai persentase total waktu CPU selama periode waktu yang terlihat saat ini. |
Hitung |
Jumlah perubahan frekuensi (selalu 1 untuk baris individual). |
CPU |
CPU yang dipengaruhi oleh perubahan frekuensi. |
Waktu Entri |
Waktu CPU memasuki status P. |
Waktu Keluar |
Waktu CPU keluar dari status P. |
Frekuensi (MHz) |
Frekuensi CPU selama berada dalam status P. |
Maks:Durasi(ms) |
Waktu yang dihabiskan dalam status P (agregasi default:maximum). |
Min:Duration(ms) |
Waktu yang dihabiskan dalam status P (agregasi default:minimum). |
Jumlah:Durasi(ms) |
Waktu yang dihabiskan dalam status P (agregasi default:sum). |
Tabel |
Tidak digunakan |
Jenis |
Informasi tambahan tentang P-State. |
Profil default menentukan preset Frekuensi menurut CPU untuk grafik ini. Gambar 4 Frekuensi CPU menurut CPU menunjukkan CPU saat transisi antara tiga status P:
Gambar 4 Frekuensi CPU menurut CPU
Grafik Penggunaan CPU (Sampel)
Data yang ditampilkan dalam grafik Penggunaan CPU (Sampel) mewakili sampel aktivitas CPU yang diambil pada interval pengambilan sampel reguler. Di sebagian besar jejak, ini adalah satu milidetik (1ms). Setiap baris dalam tabel mewakili satu sampel.
Berat sampel mewakili signifikansi sampel tersebut, relatif terhadap sampel lain. Beratnya sama dengan tanda waktu sampel saat ini dikurangi tanda waktu sampel sebelumnya. Berat tidak selalu sama persis dengan interval pengambilan sampel karena fluktuasi dalam status sistem dan aktivitas.
Pengambilan Sampel CPU Gambar 5 mewakili bagaimana data dikumpulkan:
Gambar 5 Pengambilan Sampel CPU
Setiap aktivitas CPU yang terjadi di antara sampel tidak direkam oleh metode pengambilan sampel ini. Oleh karena itu, aktivitas dengan durasi yang sangat singkat seperti DPC dan ISR tidak terwakili dengan baik dalam grafik Pengambilan Sampel CPU.
Kolom berikut tersedia untuk setiap baris dalam grafik:
Kolom | Detail |
---|---|
% Berat |
Bobot dinyatakan sebagai persentase dari total waktu CPU yang dihabiskan selama rentang waktu yang terlihat saat ini. |
Alamat |
Alamat memori fungsi yang berada di bagian atas tumpukan. |
Semua Hitungan |
Jumlah sampel yang diwakili oleh baris. Angka ini mencakup sampel yang diambil saat prosesor diam. Untuk baris individual, kolom ini selalu 1. |
Hitung |
Jumlah sampel yang diwakili oleh baris, tidak termasuk sampel yang diambil saat prosesor diam. Untuk baris individual, kolom ini selalu 1 (atau 0, untuk kasus ketika CPU dalam status daya rendah). |
CPU |
Indeks berbasis 0 dari CPU tempat sampel ini diambil. |
Nama Tampilan |
Nama tampilan proses aktif. |
DPC/ISR |
Apakah sampel mengukur penggunaan CPU reguler, DPC/ISR, atau status daya rendah. |
Fungsi |
Fungsi di bagian atas tumpukan. |
Modul |
Modul yang berisi fungsi di bagian atas tumpukan. |
Prioritas |
Prioritas utas yang sedang berjalan. |
Proses |
Nama gambar proses yang memiliki kode yang sedang berjalan. |
Nama Proses |
Nama lengkap (termasuk ID Proses) dari proses yang memiliki kode yang sedang berjalan. |
Tumpukan |
Tumpukan utas yang sedang berjalan. |
ID Utas |
ID utas yang sedang berjalan. |
Fungsi Mulai Utas |
Fungsi yang menjalankan utas dimulai. |
Modul Mulai Utas |
Modul yang berisi Fungsi Mulai Utas. |
TimeStamp |
Waktu sampel diambil. |
Beban |
Waktu (dalam milidetik) yang diwakili oleh sampel (yaitu, waktu sejak sampel terakhir). |
Profil default menyediakan prasetel berikut untuk grafik ini:
Pemanfaatan oleh CPU
Pemanfaatan berdasarkan Prioritas
Pemanfaatan berdasarkan Proses
Pemanfaatan berdasarkan Proses dan Utas
Pemanfaatan oleh CPU
Grafik Pemanfaatan Penggunaan CPU oleh CPU menunjukkan cara kerja didistribusikan antar prosesor. Gambar 6 Pemanfaatan Penggunaan CPU oleh CPU menunjukkan distribusi ini untuk dua CPU:
Gambar 6 Pemanfaatan Penggunaan CPU oleh CPU
Pemanfaatan berdasarkan Prioritas
Prioritas Penggunaan CPU yang dikelompokkan menurut utas menunjukkan bagaimana utas prioritas tinggi berdampak pada utas berprioritas lebih rendah. Gambar 7 Penggunaan CPU (Sampel) Pemanfaatan berdasarkan Prioritas menampilkan grafik ini:
Gambar 7 Penggunaan CPU (Sampel) Pemanfaatan berdasarkan Prioritas
Pemanfaatan berdasarkan Proses
Penggunaan CPU yang dikelompokkan menurut proses menunjukkan penggunaan proses relatif. Gambar 8 Penggunaan CPU (Sampel) Pemanfaatan menurut Proses menunjukkan prasetel ini. Dalam grafik sampel ini, satu proses terbukti memakan lebih banyak waktu CPU daripada proses lainnya.
Gambar 8 Penggunaan CPU (Sampel) Pemanfaatan berdasarkan Proses
Pemanfaatan berdasarkan Proses dan Utas
Penggunaan CPU yang dikelompokkan menurut proses lalu dikelompokkan menurut utas menunjukkan penggunaan relatif proses dan utas di setiap proses. Gambar 9 Penggunaan CPU (Sampel) Pemanfaatan berdasarkan Proses dan Utas menunjukkan prasetel ini. Alur dari satu proses dipilih dalam grafik ini.
Gambar 9 Penggunaan CPU (Sampel) Pemanfaatan berdasarkan Proses dan Utas
Grafik Penggunaan CPU (Tepat)
Grafik Penggunaan CPU (Tepat) merekam informasi yang terkait dengan peristiwa pengalihan konteks. Setiap baris mewakili sekumpulan data yang terkait dengan sakelar konteks tunggal; yaitu, ketika utas mulai berjalan. Data dikumpulkan untuk urutan peristiwa berikut:
Utas baru dialihkan.
Utas baru dibuat siap untuk dijalankan oleh utas yang siap.
Utas baru dialihkan, sehingga mengalihkan utas lama.
Utas baru dialihkan lagi.
Pada Gambar 10 Diagram Tepat Penggunaan CPU, waktu mengalir dari kiri ke kanan. Label diagram sesuai dengan nama kolom dalam grafik Penggunaan CPU (Tepat ). Label untuk kolom Tanda Waktu ditampilkan di bagian atas diagram, dan label untuk kolom Durasi Interval ditampilkan di bagian bawah diagram.
Gambar 10 Diagram Tepat Penggunaan CPU
Jeda garis waktu dalam Gambar 10 Diagram Tepat Penggunaan CPU membagi garis waktu menjadi wilayah yang dapat terjadi secara bersamaan pada CPU yang berbeda. Garis waktu ini dapat tumpang tindih selama urutan peristiwa bernomor tidak dimodifikasi. Misalnya, Rangkaian Siap dapat berjalan pada Prosesor-2 pada saat yang sama ketika utas baru dialihkan dan kemudian kembali ke Prosesor-1).
Informasi dicatat untuk empat target berikut pada garis waktu:
Utas baru, yang merupakan utas yang dialihkan. Ini adalah fokus utama baris ini dalam grafik.
Utas NewPrev, yang mengacu pada waktu sebelumnya bahwa utas baru dialihkan.
Rangkaian siap, yang merupakan utas yang menyiapkan utas baru untuk diproses.
Utas lama, yang merupakan utas yang dialihkan ketika utas baru dialihkan.
Data dalam tabel berikut berkaitan dengan setiap utas target:
Kolom | Detail |
---|---|
% Penggunaan CPU |
Penggunaan CPU utas baru setelah dialihkan. Nilai ini dinyatakan sebagai persentase dari total waktu CPU selama periode waktu yang terlihat saat ini. |
Hitung |
Jumlah sakelar konteks yang diwakili oleh baris. Ini selalu 1 untuk baris individual. |
Count:Waits |
Jumlah tunggu yang diwakili oleh baris. Ini selalu 1 untuk baris individual kecuali ketika utas dialihkan ke status diam; dalam hal ini, diatur ke 0. |
CPU |
CPU tempat sakelar konteks terjadi. |
Penggunaan CPU (ms) |
Penggunaan CPU utas baru setelah sakelar konteks. Ini sama dengan NewInSwitchTime, tetapi ditampilkan dalam milidetik. |
IdealCpu |
CPU ideal yang dipilih oleh penjadwal untuk utas baru. |
LastSwitchOutTime (s) |
Waktu sebelumnya utas baru dialihkan. |
NewInPri |
Prioritas utas baru yang dialihkan. |
NewInSwitchTime |
NextSwitchOutTime dikurangi SwitchInTime |
NewOutPri |
Prioritas utas baru saat dialihkan. |
NewPrevOutPri |
Prioritas utas baru ketika sebelumnya dialihkan. |
NewPrevState |
Status utas baru setelah sebelumnya dialihkan. |
NewPrevWaitMode |
Mode Tunggu utas baru saat sebelumnya dialihkan. |
NewPrevWaitReason |
Alasan bahwa utas baru dialihkan. |
NewPriDecr |
Peningkatan prioritas yang memengaruhi utas. |
NewProcess |
Proses utas baru. |
Nama NewProcess |
Nama proses utas baru, termasuk PID. |
NewQnt |
Tidak digunakan. |
NewState |
Status utas baru setelah dialihkan. |
NewThreadId |
ID utas utas baru. |
NewThreadStack |
Tumpukan utas baru saat dialihkan. |
NewThreadStartFunction |
Fungsi awal utas baru. |
NewThreadStartModule |
Modul awal utas baru. |
NewWaitMode |
Mode tunggu utas baru. |
NewWaitReason |
Alasan bahwa utas baru dialihkan. |
NextSwitchOutTime |
Waktu ketika utas baru berikutnya dialihkan. |
OldInSwitchTime |
Waktu saat utas lama dialihkan sebelum dialihkan. |
OldOutPri |
Prioritas utas lama ketika dialihkan. |
OldProcess |
Proses yang memiliki utas lama. |
Nama OldProcess |
Nama proses yang memiliki utas lama, termasuk PID. |
OldQnt |
Tidak digunakan. |
OldState |
Status utas lama setelah dialihkan. |
OldThreadId |
ID utas utas lama. |
OldThreadStartFunction |
Fungsi awal utas lama. |
OldThreadStartModule |
Modul awal utas lama. |
OldWaitMode |
Mode tunggu utas lama. |
OldWaitReason |
Alasan bahwa utas lama dialihkan. |
PrevCState |
CState sebelumnya dari prosesor. Jika ini bukan 0 (Aktif), prosesor berada dalam status menganggur sebelum utas baru dialihkan konteksnya. |
Siap |
SwitchInTime minusReadyTime (s) |
ThreadId Siap |
ID utas dari utas siap. |
ThreadStartFunction Siap |
Fungsi mulai dari utas yang siap. |
Alur SiapStartModule |
Modul awal utas siap. |
ReadyingProcess |
Proses yang memiliki utas siap. |
Nama ReadyingProcess |
Nama proses yang memiliki utas siap, termasuk PID. |
ReadyThreadStack |
Tumpukan utas siap. |
ReadyTime (s) |
Waktu ketika utas baru sudah disiapan. |
SwitchInTime |
Waktu ketika utas baru dialihkan. |
TimeSinceLast (s) |
SwitchInTime dikurangi LastSwitchOutTime (s) |
Menunggu (s) |
ReadyTime (s) dikurangi LastSwitchOutTime (s) |
Profil default menggunakan prasetel berikut untuk grafik ini:
Garis waktu menurut CPU
Garis waktu menurut Proses, Utas
Penggunaan berdasarkan Prioritas di Pengalihan Konteks Dimulai
Pemanfaatan oleh CPU
Pemanfaatan berdasarkan Proses, Utas
Garis waktu menurut CPU
Penggunaan CPU pada garis waktu per CPU menunjukkan cara kerja didistribusikan di antara prosesor. Garis Waktu Penggunaan CPU Gambar 11 (Tepat) oleh CPU menampilkan garis waktu pada sistem delapan prosesor:
Gambar 11 Garis Waktu Penggunaan CPU (Tepat) oleh CPU
Garis waktu menurut Proses, Utas
Penggunaan CPU pada garis waktu per proses per alur, menunjukkan proses mana yang memiliki utas yang berjalan pada waktu tertentu. Gambar 12 Penggunaan (Tepat) Garis Waktu menurut Proses, Utas menunjukkan garis waktu ini di beberapa proses:
Gambar 12 Penggunaan (Tepat) Garis Waktu menurut Proses, Utas
Penggunaan berdasarkan Prioritas di Pengalihan Konteks Dimulai
Grafik ini mengidentifikasi semburan aktivitas utas berprioritas tinggi di setiap tingkat prioritas. Gambar 13 Penggunaan CPU (Tepat) Penggunaan berdasarkan Prioritas di Pengalihan Konteks Mulai menunjukkan distribusi prioritas:
Gambar 13 Penggunaan CPU (Tepat) Penggunaan berdasarkan Prioritas pada Pengalihan Konteks Dimulai
Pemanfaatan oleh CPU
Dalam grafik ini, penggunaan CPU dikelompokkan dan di grafik oleh CPU untuk menunjukkan bagaimana pekerjaan didistribusikan di antara prosesor. Gambar 14 Penggunaan CPU (Tepat) Pemanfaatan oleh CPU menunjukkan grafik ini untuk sistem yang memiliki delapan prosesor.
Gambar 14 Penggunaan CPU (Presisi) Pemanfaatan oleh CPU
Pemanfaatan berdasarkan Proses, Utas
Dalam grafik ini, penggunaan CPU dikelompokkan terlebih dahulu menurut proses lalu berdasarkan utas. Ini menunjukkan penggunaan relatif proses dan utas dalam setiap proses Gambar 15 Penggunaan CPU (Tepat) Pemanfaatan berdasarkan Proses, Utas menunjukkan distribusi ini di beberapa proses:
Gambar 15 Penggunaan CPU (Presisi) Pemanfaatan berdasarkan Proses, Utas
Grafik DPC/ISR
Grafik DPC/ISR adalah sumber utama untuk informasi DPC/ISR di WPA. Setiap baris dalam grafik mewakili fragmen, yang merupakan periode waktu di mana DPC atau ISR berjalan tanpa gangguan. Data dikumpulkan di awal dan akhir fragmen. Data tambahan dikumpulkan ketika DPC/ISR selesai. Gambar 16 Diagram DPC/ISR menunjukkan cara kerjanya:
Gambar 16 Diagram DPC/ISR
Gambar 16 Diagram DPC/ISR menjelaskan data yang dikumpulkan selama aktivitas berikut:
DPC/ISR-A mulai berjalan.
Gangguan perangkat yang memiliki tingkat interupsi yang lebih tinggi daripada DPC/ISR-A menyebabkan ISR-B mengganggu DPC/ISR A, sehingga mengakhiri fragmen pertama DPC/ISR-A.
ISR-B selesai dan dengan demikian mengakhiri fragmen ISR-B. DPC/ISR-A melanjutkan eksekusi dalam fragmen kedua.
DPC/ISR-A selesai, sehingga mengakhiri fragmen kedua DPC/ISR-A.
Baris untuk setiap fragmen ditampilkan dalam tabel data. Fragmen untuk DPC/ISR-A berbagi informasi yang identik dengan kolom non-fragmen.
Kolom untuk grafik DPC/ISR menjelaskan informasi tingkat fragmen, atau kolom tingkat DPC/ISR. Setiap data dissimilar fragmen dalam kolom tingkat fragmen, dan data yang identik di kolom DPC/ISR.
Kolom | Detail |
---|---|
% Durasi (Terfragmentasi) |
Durasi (terfragmentasi) yang dinyatakan sebagai persentase dari total waktu CPU selama periode waktu yang terlihat saat ini. |
% Durasi Eksklusif |
Durasi eksklusif yang dinyatakan sebagai persentase dari total waktu CPU selama periode waktu yang terlihat saat ini. |
% Durasi Inklusif |
Durasi inklusif yang dinyatakan sebagai persentase dari total waktu CPU selama periode waktu yang terlihat saat ini. |
Alamat |
Alamat memori fungsi DPC atau ISR. |
Hitungan (DPC/ISR) |
Jumlah DPC/ISR yang diwakili oleh baris ini. Ini selalu 1 untuk baris yang mewakili fragmen akhir DPC/ISR; jika tidak, jumlah ini adalah 0. |
Hitungan (Fragmen) |
Jumlah fragmen yang diwakili oleh baris. Ini selalu 1 untuk baris individual. |
CPU |
Indeks prosesor logis tempat DPC atau ISR dijalankan. |
Jenis DPC |
Untuk DPC, jenis DPC,- baik Reguler atau Timer. Nilai ini kosong untuk ISR. |
Waktu Masuk DPC/ISR (s) |
Waktu dalam jejak ketika DPC/ISR dimulai. |
Waktu Keluar DPC/ISR |
Waktu dari awal pelacakan hingga ketika DPC/ISR selesai. |
Durasi (Terfragmentasi) (ms) |
Waktu Keluar Fragmen (s) minus Fragmen Enter Time (s) dalam milidetik. |
Durasi Eksklusif (ms) |
Jumlah durasi terfragmentasi dalam ms. untuk semua fragmen DPC/ISR ini. |
Fragmen |
Jika DPC/ISR baris ini memiliki beberapa fragmen, nilai ini True; jika tidak, itu adalah False. |
Fragmen |
Jika ini bukan satu-satunya fragmen untuk DPC/ISR ini, nilai ini True; jika tidak, itu adalah False. |
Fragmen Masukkan Waktu (s) |
Waktu fragmen mulai berjalan. |
Waktu Keluar Fragmen (s) |
Waktu fragmen berhenti berjalan. |
Fungsi |
Fungsi DPC atau ISR yang berjalan. |
Durasi Inklusif (mdtk) |
Waktu Keluar DPC/ISR dikurangi Waktu Masuk DPC/ISR dalam milidetik. |
MessageIndex |
Indeks interupsi untuk interupsi yang disinyalir pesan. |
Modul |
Modul yang berisi fungsi DPC atau ISR. |
Tampilkan Nilai |
Nilai pengembalian DPC/ISR |
Jenis |
Jenis peristiwa; ini- baik DPC atau Interupsi (ISR). |
Vektor |
Nilai vektor interupsi pada perangkat. |
Profil default menggunakan prasetel berikut untuk grafik ini:
[DPC,ISR,DPC/ISR] Durasi menurut CPU
[DPC,ISR,DPC/ISR] Durasi menurut Modul, Fungsi
[DPC,ISR,DPC/ISR] Garis waktu menurut Modul, Fungsi
[DPC,ISR,DPC/ISR] Durasi menurut CPU
Peristiwa DPC/ISR dikumpulkan oleh CPU tempat peristiwa dijalankan dan diurutkan menurut durasi. Grafik ini menunjukkan alokasi aktivitas DPC di seluruh CPU. Gambar 17 Durasi DPC/ISR oleh CPU menunjukkan grafik ini untuk sistem yang memiliki delapan prosesor.
Gambar 17 Durasi DPC/ISR menurut CPU
[DPC,ISR,DPC/ISR] Durasi menurut Modul, Fungsi
Peristiwa DPC/ISR dikumpulkan dalam grafik ini oleh modul dan fungsi rutinitas DPC/ISR, dan diurutkan menurut durasi. Ini menunjukkan rutinitas DPC/ISR mana yang menggunakan Durasi Gambar 18 DPC/ISR paling lama menurut Modul, Fungsi menunjukkan periode waktu yang menimbulkan aktivitas DPC/ISR dalam dua modul:
Gambar 18 Durasi DPC/ISR menurut Modul, Fungsi
[DPC,ISR,DPC/ISR] Garis waktu menurut Modul, Fungsi
Peristiwa DPC/ISR dikumpulkan dalam grafik ini oleh modul dan fungsi rutinitas DPC/ISR. Mereka diberi grafik sebagai garis waktu. Grafik ini memberikan tampilan terperinci tentang periode waktu di mana DPC/ISR berjalan. Grafik ini juga dapat menunjukkan bagaimana DPC/ISR tunggal dapat difragmentasi. Gambar 19 Garis Waktu DPC/ISR menurut Modul, Fungsi menunjukkan garis waktu aktivitas dalam tiga modul:
Gambar 19 Garis Waktu DPC/ISR menurut Modul, Fungsi
Pohon Tumpukan
Pohon tumpukan ditampilkan dalam tabel Penggunaan CPU (Sampel), Penggunaan CPU (Tepat) dan DPC/ISR di WPA, dan dalam masalah yang dilaporkan dalam laporan penilaian. Pohon tumpukan menggambarkan tumpukan panggilan yang terkait dengan beberapa peristiwa selama periode waktu tertentu. Setiap simpul di pohon mewakili segmen tumpukan yang dibagikan oleh subset peristiwa. Pohon dibangun dari tumpukan individu dan ditunjukkan dalam Gambar 20 Tumpukan dari Tiga Peristiwa:
Gambar 20 Tumpukan dari Tiga Peristiwa
Gambar 21 Segmen Umum yang Diidentifikasi menunjukkan seberapa umum urutan diidentifikasi untuk grafik ini:
Gambar 21 Segmen Umum Diidentifikasi
Gambar 22 Pohon Dibangun dari Tumpukan menunjukkan bagaimana segmen umum digabungkan untuk membentuk simpul pohon:
Gambar 22 Pohon Dibangun dari Tumpukan
Kolom Tumpukan di UI WPA berisi expander untuk setiap simpul non-daun. Dalam masalah yang dilaporkan penilaian, pohon ditampilkan bersama dengan bobot agregat. Beberapa cabang dapat dihapus dari grafik jika bobotnya tidak memenuhi ambang yang ditentukan. Tumpukan sampel di bawah ini menunjukkan bagaimana peristiwa yang diwakili di atas ditampilkan sebagai bagian dari masalah yang dilaporkan penilaian.
5ms ModuleA!Function1
5ms ModuleA!Function2
5ms ModuleA!Function3
|
4ms |-ModuleA!Function4
4ms | ModuleB!Function1
| |
1ms | |-ModuleB-Function2
1ms | | ModuleB-Function3
| |
3ms | |-ModuleB!Function3
3ms | ModuleB!Function4
|
1ms |-ModuleA!Function5
1ms ModuleC!Function1
1ms ModuleC!Function2
Simpul <itself>
dalam tumpukan mewakili waktu fungsi itu sendiri berada di bagian atas tumpukan. Simpul <itself>
tidak menyertakan waktu yang dihabiskan dalam fungsi yang dipanggil oleh fungsi induk. Durasi itu disebut waktu eksklusif yang dihabiskan dalam fungsi .
Misalnya, Function1 memanggil Function2. Function2 menghabiskan 2ms dalam perulangan intensif CPU dan disebut fungsi lain yang berjalan selama 4ms. Ini dapat diwakili oleh tumpukan berikut:
6ms ModuleA!Function1
|
2ms |-<itself>
4ms |-ModuleA!Function2
4ms ModuleB!Function3
4ms ModuleB-Function4
Teknik
Bagian ini menjelaskan pendekatan standar untuk analisis performa. Ini menyediakan teknik yang dapat Anda gunakan untuk menyelidiki masalah performa umum terkait CPU.
Analisis performa adalah proses empat langkah:
Tentukan skenario dan masalahnya.
Identifikasi komponen yang terlibat dan rentang waktu yang relevan.
Buat model tentang apa yang seharusnya terjadi.
Gunakan model untuk mengidentifikasi masalah dan menyelidiki akar penyebabnya.
Tentukan Skenario dan Masalah
Langkah pertama dalam analisis performa adalah menentukan skenario dan masalah dengan jelas. Banyak masalah performa memengaruhi skenario yang diukur oleh metrik penilaian. Contohnya:
Skenario 1: Sumber daya fisik tidak sepenuhnya digunakan. Misalnya, server tidak dapat sepenuhnya menggunakan koneksi jaringan karena tidak dapat mengenkripsi paket dengan cukup cepat.
Skenario 2: Sumber daya fisik sedang digunakan lebih dari yang seharusnya. Misalnya, sistem menggunakan sumber daya CPU yang signifikan selama periode diam yang menggunakan daya baterai.
Skenario 3: Aktivitas tidak diselesaikan pada tingkat yang diperlukan. Misalnya, bingkai dihilangkan selama pemutaran video karena bingkai tidak didekode dengan cukup cepat.
Skenario 4: Aktivitas tertunda. Misalnya, pengguna meluncurkan Internet Explorer tetapi membutuhkan waktu lebih lama dari yang diharapkan untuk membuka tab.
Skenario 3 dan 4 karena terkait dengan sumber daya CPU tercakup dalam panduan ini. Skenario 1 dan 2 berada di luar cakupan dan tidak tercakup. Untuk menganalisis masalah ini, Anda dapat memulai dengan pengamatan ambigu seperti "terlalu lambat" dan mengajukan pertanyaan tambahan untuk mengidentifikasi skenario dan masalah yang tepat.
Mengidentifikasi Komponen dan Periode Waktu
Setelah skenario dan masalah diidentifikasi, Anda dapat mengidentifikasi komponen yang terlibat dan periode waktu yang diminati. Komponen termasuk sumber daya perangkat keras, proses, dan utas.
Anda sering dapat menemukan rentang waktu yang diminati dengan mengidentifikasi aktivitas terkait dalam panduan analisis. Aktivitas adalah interval antara peristiwa mulai dan peristiwa berhenti yang dapat Anda pilih dan perbesar tampilannya, di WPA. Jika aktivitas tidak ditentukan, Anda dapat menemukan rentang waktu dengan mencari peristiwa umum tertentu yang terkait dengan skenario, atau dengan mencari perubahan dalam pemanfaatan sumber daya yang mungkin menandai awal dan akhir skenario. Misalnya, jika CPU menganggur selama dua detik dan kemudian sepenuhnya digunakan selama empat detik dan kemudian menganggur lagi selama dua detik, empat detik pemanfaatan penuh mungkin menjadi area yang menarik dalam jejak yang menangkap pemutaran video.
Buat model
Untuk memahami akar penyebab masalah, Anda harus memiliki model tentang apa yang seharusnya terjadi. Model dimulai dengan masalah atau tujuan terkait untuk metrik; misalnya, "Operasi ini seharusnya selesai dalam waktu kurang dari 5 detik."
Model yang lebih lengkap berisi informasi tentang performa komponen. Misalnya, komunikasi apa yang diharapkan antar komponen? Pemanfaatan sumber daya apa yang khas? Berapa lama operasi biasanya berlangsung?
Informasi untuk model sering dapat ditemukan dalam panduan analisis penilaian. Jika sumber daya tersebut tidak tersedia, Anda dapat menghasilkan jejak dari perangkat keras dan perangkat lunak serupa yang tidak menunjukkan masalah performa, untuk membuat model.
Gunakan Model untuk Mengidentifikasi Masalah, lalu Selidiki Akar Penyebabnya
Setelah memiliki model, Anda dapat membandingkan jejak dengan model untuk mengidentifikasi masalah. Misalnya, model untuk aktivitas tertentu yang disebut Tangguhkan Perangkat mungkin menyarankan bahwa seluruh aktivitas harus selesai dalam tiga detik, sementara setiap instans sub-aktivitas yang disebut Suspend <Device Name> harus memakan waktu tidak lebih dari 100ms. Jika dua instans sub-aktivitas Menangguhkan <Nama> Perangkat masing-masing membutuhkan waktu 800ms, Anda harus menyelidiki instans tersebut.
Setiap penyimpangan dari model dapat dianalisis untuk menemukan akar penyebabnya. Anda harus memeriksa status utas yang terlibat dan mencari akar penyebab umum. Beberapa akar penyebab utama terkait CPU, untuk aktivitas yang tidak selesai pada tingkat yang diperlukan atau tertunda, dijelaskan di sini:
Penggunaan CPU langsung: Utas yang sesuai menerima sumber daya CPU penuh tetapi program yang diperlukan tidak dijalankan dengan cukup cepat. Ini dapat disebabkan oleh kerusakan program atau oleh perangkat keras yang lambat.
Gangguan Utas: Utas tidak mendapatkan cukup waktu berjalan karena utas lain berjalan sebagai gantinya. Dalam hal ini, utas dianggap kelaparan atau didahului.
Gangguan DPC/ISR: Utas tidak mendapatkan cukup waktu berjalan karena CPU sibuk memproses DPC atau ISR.
Dalam banyak kasus, salah satu akar penyebab ini tidak terlalu mempengaruhi utas, dan utas menghabiskan sebagian besar waktunya dalam keadaan menunggu. Dalam hal ini, Anda harus mengidentifikasi dan menyelidiki peristiwa yang menunggu utas. Jenis investigasi rekursif ini disebut analisis tunggu, dan dimulai dengan mengidentifikasi jalur penting.
Teknik Lanjutan: Analisis Tunggu dan Jalur Kritis
Aktivitas adalah jaringan operasi, beberapa berurutan dan beberapa paralel, yang mengalir dari peristiwa awal ke peristiwa akhir. Setiap pasangan peristiwa mulai/akhir dalam pelacakan dapat dilihat sebagai aktivitas. Jalur terpanjang melalui jaringan operasi ini dikenal sebagai jalur kritis. Mengurangi durasi operasi apa pun di jalur kritis secara langsung mengurangi durasi aktivitas keseluruhan, meskipun juga dapat mengubah jalur kritis.
Gambar 23 Operasi Aktivitas menunjukkan aktivitas tiga utas. Thread-1 mengirimkan peristiwa mulai aktivitas lalu menunggu Thread-2 dan Thread-3 untuk menyelesaikan tugas mereka. Thread-2 menyelesaikan tugasnya terlebih dahulu, diikuti oleh Thread-3. Ketika kedua utas telah menyelesaikan tugas mereka, Thread-1 akan disiapan dan menyelesaikan peristiwa aktivitas.
Gambar 23 Operasi Aktivitas
Dalam skenario ini, jalur kritis mencakup bagian dari Thread-3 dan Thread-1. Ini ditelusuri di Gambar 24 Jalur Kritis. Karena Thread-2 tidak berada di jalur kritis, waktu yang diperlukan untuk menyelesaikan tugasnya tidak memengaruhi waktu aktivitas secara keseluruhan.
Gambar 24 Jalur Kritis
Jalur kritis adalah jawaban harfiah tingkat rendah untuk pertanyaan mengapa aktivitas membutuhkan waktu sebanyak itu. Setelah segmen utama jalur kritis diketahui, mereka dapat dianalisis untuk menemukan masalah yang berkontribusi pada penundaan keseluruhan.
Pendekatan Umum untuk Menemukan Jalur Kritis
Langkah pertama untuk menemukan jalur penting adalah meninjau model skenario untuk memahami tujuan dan implementasi aktivitas.
Memahami aktivitas dapat membantu mengidentifikasi operasi, proses, dan utas tertentu yang mungkin berada di jalur penting. Misalnya, penundaan aktivitas Init Resume Explorer Startup Cepat dapat disebabkan oleh aplikasi RunOnce dan proses inisialisasi Explorer, yang keduanya memerlukan sejumlah besar I/O.
Setelah Anda meninjau model skenario, periksa untuk melihat apakah penilaian melaporkan masalah untuk aktivitas yang terpengaruh. Sering kali, perkiraan jalur kritis disertakan dalam masalah keterlambatan yang dilaporkan penilaian. Jalur kritis ditampilkan sebagai urutan tindakan tunggu dan siap. Ini dapat dibaca dari awal hingga akhir sebagai urutan peristiwa, dengan segmen utama tertunda dari jalur kritis di tengah daftar. Entri terakhir dalam daftar adalah tindakan yang membaca utas yang menyelesaikan aktivitas.
Jika Anda harus mencari jalur penting secara manual, kami sarankan Anda mengidentifikasi proses dan utas yang menyelesaikan aktivitas dan bekerja mundur dari seketika aktivitas selesai. Anda dapat mengidentifikasi proses dan utas yang memulai aktivitas, serta proses dan utas yang menyelesaikan aktivitas, melalui grafik Aktivitas di WPA.
Grafik Aktivitas ditampilkan saat pelacakan dimuat melalui file XML hasil penilaian. Untuk mengidentifikasi proses dan utas yang terkait dengan aktivitas tertentu, perluas grafik ke Aktivitas yang menarik lalu alihkan tampilan ke Graph+Table. Atur mode grafik ke Tabel. Kolom Mulai Proses, Mulai Id Utas, Proses Akhir, dan Id Utas Akhir ditampilkan untuk setiap aktivitas dalam tabel.
Setelah Anda mengetahui proses awal dan akhir, utas, dan implementasi aktivitas, jalur kritis dapat dilacak mundur. Mulailah dengan menganalisis utas yang menyelesaikan aktivitas, untuk menentukan bagaimana utas tersebut menghabiskan sebagian besar waktunya: berjalan, siap, atau menunggu.
Waktu berjalan yang signifikan menunjukkan bahwa penggunaan CPU langsung mungkin telah berkontribusi pada durasi jalur kritis. Waktu yang dihabiskan dalam mode siap menunjukkan bahwa utas lain berkontribusi pada durasi jalur kritis dengan mencegah utas di jalur kritis dijalankan. Waktu yang dihabiskan untuk titik tunggu ke I/O, timer, atau utas dan proses lainnya pada jalur kritis tempat utas saat ini menunggu.
Setiap utas yang membaca utas saat ini mungkin merupakan tautan lain di jalur kritis, dan juga dapat dianalisis sampai durasi jalur kritis diperhitungkan.
Prosedur: Menemukan Jalur Kritis di WPA
Prosedur berikut mengasumsikan bahwa Anda telah mengidentifikasi aktivitas dalam grafik Aktivitas yang ingin Anda temukan jalur pentingnya.
Anda dapat mengidentifikasi proses yang menyelesaikan aktivitas dengan mengarahkan mouse ke atas aktivitas di grafik Aktivitas .
Tambahkan grafik Penggunaan CPU (Tepat). Perbesar ke aktivitas yang terpengaruh, dan terapkan preset Pemanfaatan menurut Proses, Alur .
Klik kanan header kolom dan buat kolom ReadyThreadStack dan Penggunaan CPU (ms) terlihat. Hapus kolom Siap (kami) [Maks] dan Tunggu (kami) [Maks].
Perluas proses target dan urutkan masing-masing menurut Penggunaan CPU (ms), Siap (kami) [Jumlah], dan Tunggu (kami) [Jumlah].
Cari NewThreadIds dalam proses yang memiliki jumlah waktu tertinggi yang dihabiskan dalam status Berjalan, Siap, atau Menunggu.
Utas yang menghabiskan waktu yang signifikan dalam status Berjalan atau Siap mungkin mewakili penggunaan CPU langsung pada jalur kritis. Perhatikan ID utas mereka.Utas yang menghabiskan waktu yang signifikan dalam status Menunggu mungkin menunggu I/O, timer, atau pada utas lain di jalur kritis.
Untuk menemukan apa yang ditunggu utas, perluas grup NewThreadId untuk menampilkan ReadyThreadStack.
Perluas [Root].
Tumpukan yang dimulai dengan KiDispatchInterrupt tidak terkait dengan utas lain. Untuk menentukan apa yang ditunggu utas dalam tumpukan ini, perluas KiDispatchInterrupt dan lihat fungsi pada tumpukan anak. IopfCompleteRequest menunjukkan bahwa utas yang sudah dibaca sedang menunggu I/O. KiTimerExpiration menunjukkan bahwa utas yang sudah dibaca sedang menunggu timer.
Perluas tumpukan yang tidak dimulai dengan KiDispatchInterrupt hingga Anda melihat ReadyingProcess dan ReadyingThread. Jika proses sudah diperluas, perluas NewThreadId yang sesuai dengan ReadyingThread. Ulangi langkah ini sampai Anda menemukan utas yang berjalan, siap, menunggu alasan lain, atau menunggu proses yang berbeda. Jika utas menunggu proses yang berbeda, ulangi prosedur ini dengan menggunakan proses tersebut.
Contoh
Contoh ini menyajikan penundaan dalam aktivitas Init Penjelajah Resume Startup Cepat. Pencarian di panel Masalah menunjukkan bahwa tujuh masalah jenis penundaan dilaporkan untuk aktivitas ini. Masing-masing masalah ini dapat ditinjau sebagai segmen dari jalur kritis. Segmen kunci berikut diidentifikasi:
Alur 3872 TestBootStrapper.exe proses (3024) didahului selama 2,1 detik.
Thread 3872 proses TestBootStrapper.exe (3024) menggunakan waktu CPU 1 detik.
Thread 3872 proses TestBootStrapper.exe (3024) menyiram sarang registri selama 544 milidetik.
Thread 3872 proses TestBootStrapper.exe (3024) tidur selama 513 milidetik.
Utas 4052 dan 4036 Explorer.exe dibaca dari disk, menyebabkan penundaan 461 milidetik.
Thread 3872 proses TestBootStrapper.exe (3024) kelaparan selama 187 milidetik.
Utas 3872 proses TestBootStrapper.exe menulis 3,5MB ke disk, menyebabkan penundaan 178 milidetik.
Masalah menunjukkan bahwa aktivitas ini tertunda 5,2 detik. Penundaan ini berkontribusi besar dari proporsi aktivitas secara keseluruhan durasi 6,3 detik. Aplikasi TestBootStrapper.exe terutama bertanggung jawab atas penundaan, terutama karena mendahului tugas pemrosesan lainnya.
Menyelidiki Masalah di Jalur Kritis
Perbesar ke wilayah yang terpengaruh dan tambahkan kolom ReadyThreadStack dan Penggunaan CPU (ms).
Dalam hal ini, Explorer.exe adalah proses yang menyelesaikan aktivitas. Perluas proses explorer.exe dan urutkan masing-masing menurut Penggunaan CPU (ms), Siap (kami) [Jumlah], dan Tunggu (kami) [Jumlah], seperti yang ditunjukkan pada gambar berikut:
Gambar 25 Aktivitas berdasarkan Penggunaan CPU (ms)
Gambar 26 Aktivitas berdasarkan Siap (kami)
Gambar 27 Aktivitas berdasarkan Tunggu (kami)
Mengurutkan menurut kolom Penggunaan CPU (ms) memperlihatkan baris anak teratas 299 milidetik. Mengurutkan menurut kolom Siap (kami) [Jumlah] memperlihatkan baris anak atas 46ms. Mengurutkan menurut kolom Tunggu (us) [Jumlah] memperlihatkan baris anak teratas 5749 milidetik dan baris kedua 4902 milidetik. Karena baris ini berkontribusi secara signifikan terhadap penundaan, Anda harus menyelidikinya lebih lanjut.
Perluas tumpukan untuk mengungkapkan utas siap, seperti yang ditunjukkan pada gambar berikut:
Gambar 28 Proses Siap dan Rangkaian Siap untuk Utas
Gambar 29 Proses Siap dan Rangkaian Siap untuk Utas lain
Dalam contoh ini, utas pertama menghabiskan sebagian besar waktunya menunggu proses RunOnce.exe keluar. Anda harus menyelidiki mengapa proses RunOnce.exe membutuhkan begitu banyak waktu untuk diselesaikan. Utas kedua menunggu pada utas pertama, dan mungkin merupakan tautan yang tidak signifikan dalam rantai tunggu yang sama.
Ulangi langkah-langkah dalam prosedur ini untuk RunOnce.exe. Kolom kontribusi utama adalah Tunggu (kami), dan memiliki empat kemungkinan kontributor.
Perluas setiap kontributor untuk melihat bahwa tiga kontributor pertama masing-masing menunggu kontributor keempat. Situasi ini membuat tiga kontributor pertama tidak signifikan untuk rantai tunggu. Kontributor keempat menunggu proses lain, TestBootStrapper.exe.
Skenario ini ditunjukkan pada Gambar 30 Proses Siap dan Rangkaian Siap untuk Utas di RunOnce.exe:
Gambar 30 Proses Siap dan Rangkaian Siap untuk Utas di RunOnce.exe
Ulangi langkah-langkah dalam prosedur ini untuk TestBootStrapper.exe. Hasilnya ditunjukkan dalam tiga angka berikut:
Gambar 31 Utas berdasarkan Penggunaan CPU (ms)
Gambar 32 Utas berdasarkan Siap (kami)
Gambar 33 Utas menurut Tunggu (kami)
Thread 3872 menghabiskan sekitar 1 detik berjalan, 2 detik siap, dan 1,3 detik menunggu. Karena utas ini juga merupakan rangkaian siap untuk utas 3872, waktu berjalan dan siap mungkin berkontribusi pada penundaan. Penilaian melaporkan masalah berikut yang waktunya cocok dengan penundaan:
Thread 3872 proses TestBootStrapper.exe (3024) didahului selama 2,1 detik.
Thread 3872 proses TestBootStrapper.exe (3024) kelaparan selama 187 milidetik.
Thread 3872 proses TestBootStrapper.exe (3024) menggunakan waktu CPU 1 detik.
Untuk menemukan masalah berkontribusi lainnya, lihat peristiwa tempat utas 3872 menunggu. Perluas ReadyThreadStack untuk melihat kontributor ke 1,3 detik menunggu, seperti yang ditunjukkan pada Gambar 34 Kontributor untuk Waktu Tunggu:
Gambar 34 Kontributor untuk Waktu Tunggu
KiRetireDpcList biasanya terkait I/O dan KiTimerExpiration adalah timer. Anda dapat melihat bagaimana I/Os dan timer dimulai dengan menghapus ReadyThreadStack lalu melihat NewThreadStack. Tampilan ini memperlihatkan tiga fungsi terkait, seperti yang ditunjukkan pada Gambar 35 I/Os dan Timer di NewThreadStack:
Gambar 35 I/Os dan Timer di NewThreadStack
Tampilan ini mengungkapkan detail berikut:
Thread 3872 proses TestBootStrapper.exe (3024) menyiram sarang registri selama 544 milidetik.
Thread 3872 proses TestBootStrapper.exe (3024) tidur selama 513 milidetik.
Utas 3872 proses TestBootStrapper.exe menulis 3,5MB ke disk, sehingga menyebabkan penundaan 178 milidetik.
Ketika Anda mulai menyelidiki jalur kritis, Anda menganalisis penyebab tunggu paling signifikan di Explorer.exe dan mengabaikan bagian mana pun dari jalur kritis yang terjadi setelah penyebab tunggu itu. Untuk mengambil bagian yang sebelumnya diabaikan dari jalur kritis ini, Anda harus melihat garis waktu. Tambahkan Penggunaan CPU (Presisi) dan terapkan Garis Waktu menurut Proses, Preset utas .
Filter untuk menyertakan hanya proses yang diidentifikasi sebagai bagian dari jalur kritis. Grafik yang dihasilkan ditampilkan dalam Gambar 36 Garis Waktu Jalur Kritis:
Gambar 36 Garis Waktu Jalur Kritis
Gambar 36 Garis Waktu Jalur Kritis menunjukkan bahwa Explorer.exe melakukan lebih banyak pekerjaan setelah berhenti menunggu RunOnce.exe. Perbesar ke periode waktu setelah rantai tunggu yang dianalisis sebelumnya dan lakukan analisis lain. Dalam hal ini, analisis mengungkapkan sejumlah besar utas yang bersifat internal untuk Explorer.exe dan tidak ada jejak yang jelas melalui jalur kritis. Dalam hal ini, analisis lebih lanjut tidak mungkin menghasilkan wawasan yang dapat ditindak lanjuti.
Penggunaan CPU Langsung
Aktivitas sering tertunda karena utas di jalur kritis menggunakan waktu CPU yang signifikan. Dengan menggunakan model status utas, Anda dapat melihat bahwa masalah ini ditandai oleh utas pada jalur penting yang menghabiskan jumlah waktu yang luar biasa dalam status Berjalan. Pada beberapa perangkat keras, penggunaan CPU berat ini dapat berkontribusi pada penundaan.
Identifikasi Masalah
Banyak penilaian menggunakan heuristik untuk mengidentifikasi masalah terkait penggunaan CPU langsung. Penggunaan CPU yang signifikan pada jalur kritis dilaporkan sebagai masalah dalam bentuk berikut:
Penggunaan CPU berdasarkan proses P menunda aktivitas A yang terkena dampak selama x detik
Di mana P adalah proses yang berjalan, A adalah aktivitas, dan x adalah waktu dalam detik.
Jika masalah ini dilaporkan untuk aktivitas yang menimbulkan keterlambatan, penggunaan CPU langsung mungkin menjadi penyebabnya.
Menyelidiki Penggunaan CPU Langsung
Anda dapat mengidentifikasi masalah secara manual dengan mencari CPU individual yang menimbulkan penggunaan CPU 100% dalam grafik Penggunaan CPU (Sampel).
Perbesar ke area yang menarik dalam grafik dan pilih prasetel Pemanfaatan menurut Proses dan Utas .
Secara default, tabel menampilkan baris di bagian atas yang memiliki penggunaan CPU agregat tertinggi. Utas ini juga ditampilkan di bagian atas grafik Penggunaan CPU (Sampel ).
Catatan Pada sistem yang memiliki beberapa prosesor, utas yang menggunakan 100% dari satu prosesor akan tampak mengonsumsi 100/(jumlah prosesor logis). Pada sistem semacam ini, hanya utas diam virtual (PID 0, TID 0) yang dapat menunjukkan pemanfaatan prosesor yang lebih besar dari 100/(jumlah prosesor logis). Jika proses dan utas yang mengonsumsi CPU terbanyak sesuai dengan utas apa pun di jalur kritis, penggunaan CPU langsung mungkin merupakan faktor.
Contoh masalah Penggunaan CPU Langsung yang Dilaporkan Penilaian
Penggunaan CPU oleh proses TestUM.exe (4024) menunda aktivitas yang terkena dampak, proses matikan startup cepat TestIM.exe, selama 2,1 detik. Contoh ini ditunjukkan pada Gambar 37 Utas 3208:
Gambar 37 Utas 3208
Investigasi
Setelah Anda menemukan bahwa penggunaan CPU langsung berkontribusi pada penundaan pada jalur penting, Anda harus mengidentifikasi modul dan fungsi tertentu yang berkontribusi pada penundaan.
Teknik: Meninjau Masalah Penggunaan CPU Langsung yang Dilaporkan Penilaian
Anda dapat memperluas masalah penggunaan CPU langsung yang dilaporkan penilaian untuk menampilkan jalur penting yang terpengaruh oleh penggunaan CPU langsung. Jika Anda memperluas simpul yang terkait dengan penggunaan CPU, tumpukan yang terkait dengan penggunaan CPU dan modul terkait akan ditampilkan. Tampilan ini ditampilkan di Gambar 38 Segmen Penggunaan CPU yang Diperluas:
Gambar 38 Segmen Penggunaan CPU diperluas
Teknik: Menjelajahi Tumpukan Masalah Penggunaan CPU Langsung secara Manual
Jika penilaian tidak melaporkan masalah, atau jika Anda memerlukan verifikasi tambahan, Anda dapat menggunakan grafik Penggunaan CPU (Sampel) untuk mengumpulkan informasi secara manual tentang modul dan fungsi yang terlibat dalam masalah penggunaan CPU. Untuk melakukan ini, Anda harus memperbesar ke area yang menarik dan melihat tumpukan yang diurutkan menurut Penggunaan CPU.
Menjelajahi Tumpukan Masalah Penggunaan CPU Langsung secara Manual
Pada menu Pelacakan, klik Muat Simbol.
Perbesar garis waktu untuk menampilkan hanya bagian dari jalur penting yang terpengaruh oleh masalah CPU.
Terapkan preset Pemanfaatan berdasarkan Proses dan Utas .
Tambahkan kolom Tumpukan ke tampilan, lalu seret kolom ini ke kanan ID Utas (kiri bilah).
Perluas proses dan utas untuk menampilkan pohon tumpukan.
Baris dalam tumpukan diurutkan dalam urutan menurun menurut % Berat Penggunaan CPU. Ini menempatkan tumpukan yang paling menarik di atasnya. Saat Anda memperluas tumpukan, tonton kolom % Bobot untuk memastikan bahwa fokus Anda tetap pada baris yang memiliki penggunaan tertinggi.
Untuk mengekstrak salinan tumpukan, pilih semua baris, klik kanan, dan klik Salin Pilihan.
Resolusi
Anda dapat menerapkan perbaikan pada tingkat konfigurasi dan komponen untuk mengatasi penggunaan CPU yang tinggi.
Penggunaan CPU langsung berdampak lebih tinggi pada komputer yang memiliki prosesor ujung bawah. Dalam kasus ini, Anda dapat menambahkan lebih banyak daya pemrosesan ke komputer. Atau, Anda mungkin dapat menghapus modul masalah dari jalur kritis atau dari sistem. Jika Anda dapat mengubah komponen, pertimbangkan upaya desain ulang untuk mencapai salah satu hasil berikut:
Menghapus kode intensif CPU dari jalur kritis
Gunakan algoritma yang lebih efisien CPU
Tangguhkan atau cache berfungsi
Gangguan Utas
Penggunaan CPU dengan utas yang tidak berada di jalur kritis (dan yang mungkin tidak terkait dengan aktivitas), dapat menyebabkan utas yang berada di jalur kritis tertunda. Model status utas menunjukkan bahwa masalah ini ditandai oleh utas pada jalur kritis yang menghabiskan sejumlah waktu yang tidak biasa dalam status Siap.
Identifikasi Masalah
Banyak penilaian menggunakan heuristik untuk mengidentifikasi masalah terkait gangguan. Ini dilaporkan dalam salah satu dari dua formulir berikut:
Proses P kelaparan. Kelaparan menyebabkan penundaan pada aktivitas yang terkena dampak A x ms.
Proses P didahului. Pemisahan menyebabkan penundaan aktivitas yang terkena dampak A x ms.
Di mana P adalah proses, A adalah aktivitas, dan x adalah waktu dalam ms.
Formulir pertama mencerminkan gangguan dari utas pada tingkat prioritas yang sama dengan utas pada jalur kritis. Bentuk kedua mencerminkan gangguan dari utas yang berada pada tingkat prioritas yang lebih tinggi daripada utas pada jalur kritis.
Jika jenis masalah ini dilaporkan untuk aktivitas yang tertunda, gangguan utas dapat menjadi penyebabnya. Anda dapat menggunakan grafik Penggunaan CPU (Tepat) untuk mengidentifikasi masalah secara manual.
Identifikasi Masalah Gangguan Utas
Perbesar ke interval dan terapkan preset Pemanfaatan menurut CPU . Pemanfaatan 100% di semua CPU menunjukkan masalah gangguan.
Terapkan Pemanfaatan menurut Proses, Prasetel utas, dan urutkan menurut kolom Siap (kami) pertama. (Ini adalah kolom yang menyertakan Jumlah agregasi.)
Perluas proses aktivitas yang terpengaruh dan lihat Waktu siap untuk utas di jalur kritis. Nilai ini adalah waktu maksimum penundaan dapat dikurangi dengan menyelesaikan masalah Gangguan utas apa pun. Nilai dengan besarnya relatif signifikan terhadap penundaan yang diselidiki menunjukkan bahwa ada masalah gangguan utas.
Gambar 39 Pemanfaatan CPU Mendekati 100% dan Gambar 40 Masalah Gangguan Utas mewakili skenario ini:
Gambar 39 Pemanfaatan CPU Mendekati 100%
Gambar 40 Masalah Gangguan Utas
Investigasi
Setelah masalah diidentifikasi, Anda harus menentukan mengapa utas yang terpengaruh menghabiskan begitu banyak waktu dalam status Siap.
Teknik: Menentukan Mengapa Utas Menghabiskan Waktu dalam Status Siap
Anda dapat menggunakan grafik Penggunaan CPU (Tepat) untuk menentukan mengapa utas menghabiskan waktu dalam status Siap. Anda harus terlebih dahulu menentukan apakah utas dibatasi untuk prosesor tertentu. Meskipun Anda tidak dapat langsung mendapatkan informasi ini, Anda dapat memeriksa riwayat penggunaan CPU utas selama periode pemanfaatan CPU yang tinggi. Ini adalah periode ketika utas cenderung sering beralih antar prosesor.
Menentukan Pembatasan Prosesor Utas
Perbesar ke wilayah yang terpengaruh.
Tambahkan grafik Penggunaan CPU (Presisi) dan terapkan Pemanfaatan menurut Proses, Preset utas.
Gunakan dialog Tingkat Lanjut untuk menambahkan kolom Cpu yang memiliki mode agregasi Jumlah Unik di sebelah kanan NewThreadId.
Filter grafik untuk memperlihatkan hanya utas tempat Anda tertarik.
Nilai dalam kolom Cpu mencerminkan jumlah prosesor tempat utas berjalan selama interval waktu saat ini. Selama periode pemanfaatan CPU 100%, jumlah ini memperkirakan jumlah prosesor tempat utas ini diizinkan untuk dijalankan. Jika nilainya kurang dari jumlah prosesor yang tersedia, utas mungkin dibatasi untuk CPU tertentu.
Gambar 41 Utas Terbatas memberikan contoh grafik ini:
Gambar 41 Utas Terbatas
Setelah Anda mengetahui pembatasan prosesor utas, Anda dapat menentukan utas yang didahulukan atau kelaparan. Untuk melakukan ini, Anda harus mengidentifikasi interval yang dihabiskan utas dalam status Siap dan kemudian memeriksa utas atau proses lain apa yang berjalan selama interval tersebut.
Menentukan Thread yang Didahului atau Kelaparan
Buat grafik yang menunjukkan kapan utas berada dalam status Siap dan terapkan preset Pemanfaatan menurut Proses, Utas .
Buka Editor Tampilan, klik Tingkat Lanjut, dan pilih tab Konfigurasi Grafik.
Atur Waktu Mulai ke ReadyTime (s) dan atur Durasi ke Siap (kami), seperti yang ditunjukkan pada Gambar 42 Kolom Waktu Siap. Klik OK.
Gambar 42 Kolom Waktu Siap
Di Editor Tampilan, ganti kolom Penggunaan CPU (%) dengan kolom Siap (kami) [Jumlah].
Pilih utas yang menarik untuk menghasilkan grafik yang mirip dengan Gambar 43 Ready Time Graph:
Gambar 43 Grafik Waktu Siap
Dalam hal ini, utas menghabiskan waktu yang signifikan dalam status Siap. Untuk menentukan prioritas umumnya, tambahkan agregasi Rata-rata ke kolom NewInPri .
Dalam hal ini, prioritas rata-rata utas adalah tepat 8. Angka ini menunjukkan bahwa itu mungkin utas latar belakang yang tidak pernah menerima elevasi prioritas.
Setelah prioritas rata-rata diketahui, lihat aktivitas CPU untuk CPU tempat utas diizinkan untuk dijalankan.
Dalam hal ini, utas ditentukan untuk memiliki afinitas untuk CPU 1 saja.
Tambahkan grafik Penggunaan CPU (Presisi) lain dan terapkan prasetel Pemanfaatan oleh CPU. Pilih CPU yang relevan.
Buka tampilan Tingkat Lanjut dan tambahkan filter untuk prioritas yang Anda temukan sebelumnya untuk memfilter utas tersebut. Skenario ini ditampilkan dalam Gambar 44 Filter Utas:
Gambar 44 Filter Utas
Dalam Gambar 45 Penggunaan CPU, Waktu Siap, dan Aktivitas Utas Lainnya, grafik teratas menunjukkan penggunaan CPU utas 3548. Grafik tengah menunjukkan waktu alur siap, dan grafik bawah menunjukkan aktivitas pada CPU tempat utas diizinkan untuk dijalankan (dalam hal ini, Cpu1).
Gambar 45 Penggunaan CPU, Waktu Siap, dan Aktivitas Utas Lainnya
Perbesar ke wilayah tempat utas siap, tetapi tidak berjalan, selama sebagian besar waktu selama interval tersebut.
Dalam grafik Penggunaan CPU, tambahkan NewInPri di sebelah kiri bilah dan periksa hasilnya.
Alur atau proses yang memiliki prioritas yang sama dengan prioritas utas target menunjukkan waktu bahwa utas kelaparan. Utas atau proses yang memiliki prioritas lebih tinggi daripada prioritas utas target menunjukkan waktu bahwa utas didahului. Anda dapat menghitung total waktu utas didahulukan dengan menambahkan waktu semua utas dan tindakan preemptive.
Gambar 46 Penggunaan berdasarkan Prioritas Ketika Utas Target Siap menunjukkan bahwa 730ms dari waktu utas didahului, dan 300ms dari waktu utas kelaparan. (Gambar ini diperbesar ke interval 1192ms.)
Gambar 46 Penggunaan berdasarkan Prioritas Ketika Utas Target Siap
Untuk menentukan utas mana yang bertanggung jawab atas preemption dan kelaparan utas ini, tambahkan kolom NewProcess di sebelah kanan kolom NewInPri dan tinjau tingkat prioritas tempat proses berjalan. Dalam hal ini, preemption dan kelaparan terutama disebabkan oleh utas lain dalam proses yang sama dan oleh TestResidentApp.exe. Anda dapat berasumsi bahwa proses ini menerima elevasi prioritas berkala di atas prioritas dasarnya.
Resolusi
Anda dapat mengatasi masalah pendahuluan atau kelaparan dengan mengubah konfigurasi atau komponen. Pertimbangkan solusi berikut:
Hapus proses bermasalah dari sistem.
Sesuaikan prioritas dasar proses bermasalah...
Ubah waktu ketika proses bermasalah berjalan; misalnya, tunda waktu mulai mereka terjadi ketika komputer di-boot ulang.
Jika komponen masalah dapat diubah, desain ulang menjadi kurang intensif CPU atau untuk dijalankan dengan prioritas yang lebih rendah.
Gangguan DPC/ISR
Ketika waktu prosesor yang berlebihan dikonsumsi dengan menjalankan DPC dan ISR, mungkin tidak ada cukup waktu CPU yang tersedia untuk menjalankan utas. Situasi ini dapat menyebabkan penundaan serupa pada gangguan utas. Ketika utas harus menyelesaikan operasi pada tingkat frekuensi tinggi reguler, seperti dalam pemutaran video atau animasi, gangguan oleh DPC dan ISR dapat menyebabkan masalah operasional.
Identifikasi Masalah
Banyak penilaian menggunakan heuristik untuk mengidentifikasi masalah terkait DPC/ISR. Aktivitas DPC/ISR diidentifikasi mencurigakan ketika dilaporkan sebagai masalah dalam bentuk berikut:
DPC D melebihi ambang batas m milidetik x kali selama P. Instans n dari DPC ini berjalan untuk total gabungan t milidetik.
Di mana D adalah DPC, m adalah jumlah milidetik yang mengatur ambang batas, x adalah berapa kali DPC melebihi ambang batas, P adalah proses saat ini, n adalah jumlah instans yang dijalankan DPC, dan t adalah total waktu dalam milidetik bahwa DPC melewati ambang batas.
Misalnya, masalah berikut dilaporkan oleh penilaian:
DPC sdbus.sys! SdbusWorkerDpc melebihi tujuan 3,0 milidetik 153 kali selama Masa Pakai Mesin Media. 153 instans DPC ini berjalan dengan total gabungan 864 milidetik
Jika masalah ini dilaporkan untuk aktivitas yang menunjukkan peristiwa masalah atau penundaan, aktivitas DPC/ISR mungkin menjadi penyebabnya.
Mengidentifikasi gangguan DPC/ISR secara manual
Untuk mengidentifikasi gangguan DPC/ISR secara manual, buka jejak di WPA dan identifikasi peristiwa masalah yang menarik. Ini adalah peristiwa umum khusus penilaian seperti Microsoft-Windows-Dwm-Core:SCHEDULE_GLITCH atau Microsoft-Windows-MediaEngine:DroppedFrame.
Di samping grafik peristiwa, tambahkan Durasi DPC/ISR menurut grafik CPU . Jika puncak dalam Durasi DPC/ISR oleh grafik CPU berbaris dengan peristiwa masalah, DPC/ISR mungkin menjadi faktor dalam menyebabkan masalah.
Untuk data tambahan, perbesar ke periode waktu yang terjadi 100ms sebelum beberapa peristiwa masalah ditampilkan. Jika aktivitas DPC/ISR yang signifikan ditampilkan pada satu atau beberapa prosesor di wilayah 100ms sebelum peristiwa masalah terjadi, Anda dapat menyimpulkan bahwa peristiwa masalah disebabkan oleh aktivitas DPC/IRS.
Untuk menentukan apakah gangguan DPC/ISR menyebabkan penundaan, perbesar ke wilayah yang menunjukkan utas yang sedang berjalan. Catat CPU atau CPU tempat utas ini berjalan.
Dalam grafik DPC/ISR, terapkan Durasi DPC/ISR dengan prasetel CPU dan lihat aktivitas DPC/ISR pada CPU yang relevan dalam rentang waktu tersebut.
Gambar 47 Peristiwa Masalah dan Aktivitas DPC/ISR menunjukkan bahwa utas 864 iexplore.exe relevan dengan aktivitas yang terpengaruh. Thread 864 berada dalam status Berjalan pada CPU2 untuk 10,65% dari rentang waktu yang dilihat. Namun, grafik DPC/ISR menunjukkan bahwa CPU2 sibuk menjalankan DPC/ISR selama 10% dari waktu tersebut.
Catatan Sebagian besar DPC/ISR tidak memiliki dampak yang tinggi seperti yang ditunjukkan dalam contoh ini.
Gambar 47 Peristiwa Masalah dan Aktivitas DPC/ISR
Pada Gambar 48 DPC/ISR Yang Tidak Terkait dengan Peristiwa Masalah, DPC/ISR dinyatakan tidak terkait dengan masalah performa:
Gambar 48 DPC/ISR Tidak Terkait dengan Peristiwa Masalah
Pada Gambar 49 Keterlambatan yang disebabkan oleh Gangguan DPC/ISR, DPC/ISR ditunjukkan untuk menyebabkan masalah performa:
Gambar 49 Keterlambatan yang disebabkan oleh Gangguan DPC/ISR
Investigasi
Setelah Anda menentukan bahwa DPC/ISR terkait dengan masalah atau keterlambatan, Anda harus menentukan DPC/ISR tertentu mana yang terlibat dan mengapa mereka sering terjadi atau menjalankan untuk jangka waktu yang berlebihan.
Teknik: Meninjau Masalah DPC/ISR yang Dilaporkan Penilaian
Dalam masalah DPC/ISR yang dilaporkan penilaian, Anda dapat memperluas masalah yang menampilkan proses utama yang didahulukan oleh DPC atau ISR. Perluas tumpukan untuk melihat aktivitas DPC untuk proses yang paling terkait dengan aktivitas yang terkena dampak, seperti yang ditunjukkan, perluas tumpukan untuk memahami apa yang dilakukan DPC. Gambar 50 Expanded DPC Stack menunjukkan tumpukan yang diperluas:
Gambar 50 Tumpukan DPC yang Diperluas
Teknik: Temukan DPC/ISR Durasi Tertinggi dan Tinjau Tumpukan
Jika penilaian tidak melaporkan DPC/ISR menjadi masalah, Anda dapat menggunakan grafik DPC/ISR dan Penggunaan CPU (Sampel) untuk mendapatkan informasi tumpukan untuk DPC yang paling relevan. Kami menyarankan agar Anda menemukan DPC/ISR yang menarik, perhatikan modul dan fungsinya, lalu temukan sampel dalam grafik Penggunaan CPU (Sampel) untuk mendapatkan informasi tumpukan lengkap.
Temukan DPC/ISR Durasi Tertinggi dan Tinjau Tumpukan
Perbesar ke interval minat.
Dalam grafik DPC/ISR, pilih Durasi DPC/ISR prasetel menurut Modul, Fungsi.
Jika simbol dimuat, peristiwa DPC/ISR diurutkan menurut total durasi dan kemudian dipecah menurut Modul dan Fungsi. Baris teratas dalam daftar berisi peristiwa DPC/ISR yang mungkin menyebabkan masalah peristiwa. Catat nama modul dan fungsi.
Dalam grafik Penggunaan CPU (Sampel) , pilih prasetel Pemanfaatan menurut Proses. Secara default, prasetel ini menyembunyikan aktivitas DPC/ISR.
Buka Editor Tampilan, dan klik Tingkat Lanjut.
Pada tab Filter , ubah sembunyikan baris yang cocok dengan pengaturan filter untuk Pertahankan baris yang cocok dengan filter. Ini akan memungkinkan aktivitas DPC/ISR ditampilkan.
Hapus kolom Proses dan tambahkan kolom Tumpukan untuk menampilkan DPC/ISR yang diurutkan menurut tumpukan.
Bersihkan pilihan baris saat ini.
Klik kanan sel di kolom Tumpukan lalu klik Temukan di kolom ini.
Masukkan modul dan fungsi yang Anda catat di Langkah 2 prosedur ini.
Centang Tambahkan ke pilihan saat ini, dan klik Temukan Semua untuk memilih semua instans fungsi.
Setelah semua baris dipilih, klik kanan dan klik Kupu-kupu/Lihat Panggilan.
Tampilan ini memperlihatkan aktivitas fungsi khusus ini, diurutkan menurut total durasi. Tampilan ini mirip dengan tampilan tumpukan dalam tampilan terperinci dari masalah yang dilaporkan penilaian. Kolom Bobot memperkirakan waktu inklusif yang dihabiskan oleh setiap fungsi pada tumpukan, dalam milidetik.
Tampilan ini diperlihatkan dalam Gambar 51 Callees dari DPC yang Diurutkan berdasarkan Perkiraan Durasi:
Gambar 51 Callees dari DPC yang Diurutkan berdasarkan Perkiraan Durasi
Teknik: Tinjau DPC/ISR yang Berjalan Lama
Durasi total DPC/ISR penting, tetapi DPC/ISR individu yang berjalan lama lebih cenderung menyebabkan penundaan. Dalam grafik DPC/ISR, kolom Durasi Inklusif (ms), diurutkan dalam urutan menurun, menampilkan durasi maksimum masing-masing DPC/ISR. DPC /ISR Panjang yang tersedia di beberapa profil penilaian memungkinkan Anda memfilter tampilan ini untuk hanya menampilkan DPC/ISR yang memiliki durasi inklusif yang lebih besar dari 1m.
Catatan Jika preset ini tidak tersedia, Anda dapat membuka bagian Tampilkan Editor, Tingkat Lanjut , untuk menambahkan filter.
Resolusi
Aktivitas DPC/ISR sering mencerminkan masalah perangkat keras atau perangkat lunak yang harus dikoreksi pada tingkat perangkat keras atau komponen. Pada tingkat konfigurasi, Anda dapat mengganti perangkat keras atau meningkatkan driver terkait ke versi tetap. Pada tingkat komponen, perangkat keras dan driver harus mengikuti praktik terbaik untuk DPC/ISR dari MSDN, dan harus menggunakan DPC berulir jika memungkinkan. DPC utas tidak berjalan pada tingkat pengiriman pada edisi klien Windows. Untuk informasi selengkapnya tentang praktik terbaik untuk DPC/ISR, lihat Panduan tentang perilaku ISR dan DPC dan Pengenalan DPC Utas.
Topik terkait
Power Management dan ACPI - Arsitektur dan Dukungan Driver
PPM di Windows Vista dan Windows Server 2008
Penjadwalan, Konteks Utas, dan IRQL