標籤:2周
問題描述:explorer一直以38.8k的(峰值為77.5k)的速度規律性的讀取IO,讀取次數94/s。結果是一直佔用cpu核心程式的時間,引起頁錯誤。沒有記憶體變化,說明它一直沒有讀到需要的資料。不停的頁錯誤,說明它不是讀真實的物理裝置,而是在讀那倆個頁。
問題分析:發起請求-----不在working set----引起page fault----kernel trap gate----1.若為硬fault,訪問page backing store;2.軟,不訪問-----added to ws
由於無法載入page,使得線程迴圈請求。所以最簡單粗暴的辦法,就是關掉線程。
可疑線程如下:
1492 28 stobject.dll!CSysTray::SysTrayThreadProc
ntkrnlpa.exe!KiSwapContext+0x2f
ntkrnlpa.exe!KiSwapThread+0x8a
ntkrnlpa.exe!KeWaitForSingleObject+0x1c2
ntkrnlpa.exe!KiSuspendThread+0x18
ntkrnlpa.exe!KiDeliverApc+0x124
ntkrnlpa.exe!KiSwapThread+0xa8
ntkrnlpa.exe!KeWaitForSingleObject+0x1c2
win32k.sys!xxxSleepThread+0x192
win32k.sys!xxxRealInternalGetMessage+0x418
win32k.sys!NtUserGetMessage+0x27
ntkrnlpa.exe!KiFastCallEntry+0xfc
ntdll.dll!KiFastSystemCallRet
USER32.dll!NtUserGetMessage+0xc
stobject.dll!SysTrayMain+0x180
stobject.dll!CSysTray::SysTrayThreadProc+0x4f
kernel32.dll!BaseThreadStart+0x37
1424 5 SHLWAPI.dll!WrapperThreadProc
ntkrnlpa.exe!KiSwapContext+0x2f
ntkrnlpa.exe!KiSwapThread+0x8a
ntkrnlpa.exe!KeWaitForSingleObject+0x1c2
ntkrnlpa.exe!KiSuspendThread+0x18
ntkrnlpa.exe!KiDeliverApc+0x124
ntkrnlpa.exe!KiSwapThread+0xa8
ntkrnlpa.exe!KeWaitForSingleObject+0x1c2
win32k.sys!xxxSleepThread+0x192
win32k.sys!xxxRealWaitMessageEx+0x12
win32k.sys!NtUserWaitMessage+0x14
ntkrnlpa.exe!KiFastCallEntry+0xfc
ntdll.dll!KiFastSystemCallRet
USER32.dll!NtUserWaitMessage+0xc
Explorer.EXE!CTray::MainThreadProc+0x29
SHLWAPI.dll!WrapperThreadProc+0x94
kernel32.dll!BaseThreadStart+0x37
1604 1 BrowseUI.dll!BrowserProtectedThreadProc
學習資料
working set:the amount of memory in a given time interval,effective use of caches。 the working set strategy prevents thrashing while keeping the degree of multiprogramming as high as possible. Thus it optimizes CPU utilization and throughput.
ws可以從data和code分,也可以從share跟private分。
ws特點:通過TLB定位,pageable,不含Address Windowing Extensions(AWE)以及large page allocations。相關函數GetProcessMemoryInfo、Get(Set)ProcessWorkingSetSizeEx、EmptyWorkingSet、VirtualUnlock、UnmapViewOfFile。在psapi.h中還發現了一個函數QueryWorkingSet,返回了ws中每個頁的屬性跟位置。常態操作它的是系統的memory manager。當working set被全部進程拋棄的時候,進入transition page狀態,等待著重利用。
通過工具(E:\book\0code\working-set)讀出結果如下(尚未完善,待續)
650) this.width=650;" src="http://s1.51cto.com/wyfs02/M01/86/C3/wKiom1fJjM6w1C55AAA2XkydlJE459.jpg" title="660.JPG" alt="wKiom1fJjM6w1C55AAA2XkydlJE459.jpg" />
process:
進程除了自己的結構之外,子系統部分csrss.exe/win32k.sys分別在使用者跟核心維護著對應的結構:CSR_PROCESS、W32PROCESS。參考連結http://forum.sysinternals.com/topic15457.html
windows-------------兩周2016-09-02