知道一个CPU虚拟地址,如何能得到这个地址cache类型。
Windows内核调试
知道一个CPU虚拟地址,如何能得到这个地址cache类型。
Coding
2009-11-05, 16:15 下午
Win32k.sys!memmove占用了极其高的CPU资源。我想去验证一下src和dst的cache类型。
我应该看那几个Windbg的命令,有个思路就可以了,谢谢
Re: 知道一个CPU虚拟地址,如何能得到这个地址cache类型。
Coding
2009-11-10, 15:51 下午
查了IA32手册等资料,我是在一块Atom上看得,对于不同类型的cpu判断memory type是不一样。
首先是用!pte拿到page table entry
1: kd> !pte 0f2c430c
VA 0f2c430c
PDE at 00000000C06003C8 PTE at 00000000C0079620
contains 000000001C690867 contains 800000001CE9586F
然后看page talbe entry中 PAT(bit 7), PCD(bit 4), PWT(bit 3)
1: kd> .formats 1CE9586F
Evaluate expression:
Hex: 1ce9586f
Decimal: 485054575
Octal: 03472254157
Binary: 00011100 11101001 01011000 01101111
那么这里的话
pat = 0
pcd = 0
pwt = 1
用!pat可以看到这个时候的memory type是USWC, 没有文档说USWC具体是什么,不过八成应该是Write Combining
1: kd> !pat
PAT_Index PCD PWT Memory Type
0 0 0 WB
0 0 1 USWC
0 1 0 WEAK_UC
0 1 1 STRONG_UC
1 0 0 WB
1 0 1 USWC
1 1 0 WEAK_UC
1 1 1 STRONG_UC