為什麼我的 24 個 CPU 中有 1 個是 100% 固定的?
我有一個 HP ProLiant DL380 G7 系統,它使用 2 個 6 核 CPU,啟用了超執行緒,總共有 24 個邏輯 CPU(如 Windows 所示)。
執行我們的應用程序時,系統總 CPU 使用率很好,但 24 個 CUP 中的一個被固定為 100%:
**編輯:**這是這段時間內系統程序的 PerfMon 數據,以及使用率高的處理器:
這是正常的嗎?如果沒有,有沒有辦法確定哪些程序正在使用該邏輯 CPU?Windows PerfMon、ResMon、任務管理器和程序資源管理器沒有任何幫助,除了確定 CPU 處於 100%。
正如其他人已經指出的那樣,我們可以從該螢幕截圖中看到,如此努力工作的 CPU 將所有時間都花在核心模式下。(紅色。)
以管理員身份執行 Powershell,鍵入:
Get-Process | Select Name, PrivilegedProcessorTime | ` Sort-Object PrivilegedProcessorTime -Descending
列表頂部的程序是目前使用最多核心模式 CPU 時間的程序。如果該程序不是“系統”,那麼您剛剛找出了導致此 CPU 使用的使用者模式程序。如果特權處理器時間最高的程序是系統,我懷疑它是,那麼它有點複雜。
打開程序資源管理器。或者,設置您的符號伺服器。確保您以完整的 UAC 高度執行。右鍵點擊系統“程序”並轉到屬性。然後轉到“執行緒”選項卡。按 CPU 使用率對執行緒進行排序。導致所有這些核心模式工作的執行緒應該在這裡。如果您查看“開始地址”下列出的模組,它應該會為您提供有關工作相關內容的線索。例如,如果它是 NDIS.sys,那就是網路介面驅動程序。如果您設置了符號伺服器,您應該會看到模組中的函式名稱(除非該模組不是 Microsoft,否則您只會看到與模組起始地址的數字偏移量。
或者,使用 Windows Performance Toolkit 中的 Xperf 來分析中斷、DPC 等。
xperf -on PROC_THREAD+LOADER+DPC+INTERRUPT
並停止錄製
xperf -d logfile.etl
Xperf 取代了舊的 Kernrate 工具,可以為您提供一些非常詳細的數據。
當 CPU 在核心模式下工作時,它主要是在執行中斷服務程序。(ISR) 當一個中斷發生時,使用者模式的工作在那個處理器上被掛起,並且 CPU 執行註冊到那個中斷的 ISR。如果您發現您的 CPU 在這些中斷上花費了過多的時間,這通常表明需要更新有故障的設備驅動程序。
不過,這種情況讓我(不是雙關語)感到困擾的是,似乎任何執行此操作的核心執行緒似乎都與那個核心相關聯。我想知道為什麼調度程序似乎只安排執行緒在那個看似任意的核心上執行。所以我有一種感覺,我們需要找到編寫這個設備驅動程序的人,並向他們展示如何進行執行緒化 DPC,而不是顯式地設置核心執行緒的親和性等。