Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

Windows内核调试

帖子发起人: Thomson   发起时间: 2009-04-27 22:59 下午   回复: 6

Print Search
帖子排序:    
   2009-04-27, 22:59 下午
Thomson 离线,最后访问时间: 2013/3/31 11:42:42 Thomson

发帖数前10位
注册: 2008-07-03
发 贴: 211
Taskmgr里面的PF usage由哪些部分组成?
Reply Quote

在xp的taskmgr下面看到有一个PF usage,这个数值由哪些部分组成呢? 除了每个process的virtual size,还有其它的吗?


IP 地址: 已记录   报告
   2009-04-27, 23:55 下午
MJ0011 离线,最后访问时间: 2009/12/24 22:33:41 MJ0011

发帖数前10位
注册: 2008-04-24
发 贴: 112
Re: Taskmgr里面的PF usage由哪些部分组成?
Reply Quote
PF Usage(页面文件使用量)是通过ZwQuerySystemInformation(SystemPerformanceInformation)获取的

typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
LARGE_INTEGER IdleProcessTime;
LARGE_INTEGER IoReadTransferCount;
LARGE_INTEGER IoWriteTransferCount;
LARGE_INTEGER IoOtherTransferCount;
ULONG IoReadOperationCount;
ULONG IoWriteOperationCount;
ULONG IoOtherOperationCount;
ULONG AvailablePages;
SYSINF_PAGE_COUNT CommittedPages;
SYSINF_PAGE_COUNT CommitLimit;
SYSINF_PAGE_COUNT PeakCommitment;
ULONG PageFaultCount;
ULONG CopyOnWriteCount;
ULONG TransitionCount;
ULONG CacheTransitionCount;
ULONG DemandZeroCount;
ULONG PageReadCount;
ULONG PageReadIoCount;
ULONG CacheReadCount;
ULONG CacheIoCount;
ULONG DirtyPagesWriteCount;
ULONG DirtyWriteIoCount;
ULONG MappedPagesWriteCount;
ULONG MappedWriteIoCount;
ULONG PagedPoolPages;
ULONG NonPagedPoolPages;
ULONG PagedPoolAllocs;
ULONG PagedPoolFrees;
ULONG NonPagedPoolAllocs;
ULONG NonPagedPoolFrees;
ULONG FreeSystemPtes;
ULONG ResidentSystemCodePage;
ULONG TotalSystemDriverPages;
ULONG TotalSystemCodePages;
ULONG NonPagedPoolLookasideHits;
ULONG PagedPoolLookasideHits;
ULONG AvailablePagedPoolPages;
ULONG ResidentSystemCachePage;
ULONG ResidentPagedPoolPage;
ULONG ResidentSystemDriverPage;
ULONG CcFastReadNoWait;
ULONG CcFastReadWait;
ULONG CcFastReadResourceMiss;
ULONG CcFastReadNotPossible;
ULONG CcFastMdlReadNoWait;
ULONG CcFastMdlReadWait;
ULONG CcFastMdlReadResourceMiss;
ULONG CcFastMdlReadNotPossible;
ULONG CcMapDataNoWait;
ULONG CcMapDataWait;
ULONG CcMapDataNoWaitMiss;
ULONG CcMapDataWaitMiss;
ULONG CcPinMappedDataCount;
ULONG CcPinReadNoWait;
ULONG CcPinReadWait;
ULONG CcPinReadNoWaitMiss;
ULONG CcPinReadWaitMiss;
ULONG CcCopyReadNoWait;
ULONG CcCopyReadWait;
ULONG CcCopyReadNoWaitMiss;
ULONG CcCopyReadWaitMiss;
ULONG CcMdlReadNoWait;
ULONG CcMdlReadWait;
ULONG CcMdlReadNoWaitMiss;
ULONG CcMdlReadWaitMiss;
ULONG CcReadAheadIos;
ULONG CcLazyWriteIos;
ULONG CcLazyWritePages;
ULONG CcDataFlushes;
ULONG CcDataPages;
ULONG ContextSwitches;
ULONG FirstLevelTbFills;
ULONG SecondLevelTbFills;
ULONG SystemCalls;
} SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;

使用其中的CommittedPages * (内存页面大小/1024)计算出来的
实际就是系统中的提交页面数量
IP 地址: 已记录   报告
   2009-04-28, 00:09 上午
MJ0011 离线,最后访问时间: 2009/12/24 22:33:41 MJ0011

发帖数前10位
注册: 2008-04-24
发 贴: 112
Re: Taskmgr里面的PF usage由哪些部分组成?
Reply Quote
验证了一下~

HMODULE hlib = LoadLibrary("ntdll.dll");
PVOID p = GetProcAddress(hlib , "ZwQuerySystemInformation");

SYSTEM_PERFORMANCE_INFORMATION info ;
SYSTEM_BASIC_INFORMATION basinfo ;
ULONG cb = sizeof(info);
ULONG cb1 = sizeof(basinfo);

__asm
{
push 0
push cb1
lea eax ,basinfo
push eax
push 0 //SystemBasicInformation
call p
push 0
push cb
lea eax ,info
push eax
push 2 //SystemPerformanceInformation
call p
}
LONG mbs = info.CommittedPages * (basinfo.PageSize /1024) /1024;

printf("pf usage : %u MB(s)\n",mbs);

getchar();
IP 地址: 已记录   报告
   2009-04-28, 12:40 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: Taskmgr里面的PF usage由哪些部分组成?
Reply Quote
回答的精彩,不仅说其然,而且说其何以然:-)
IP 地址: 已记录   报告
   2009-04-28, 13:42 下午
WANGyu 离线,最后访问时间: 2012/9/10 3:34:00 王宇

发帖数前10位
男
注册: 2007-05-08
发 贴: 306
Re: Taskmgr里面的PF usage由哪些部分组成?
Reply Quote

嗯,应该就是这么计算的。

专门去找了一下实现 ( ..\private\windows\shell\taskman ),但是没找着...

在 shell 文件夹下,最多的就是计算内存大小,方法也类似:

    //
    // Memory
    //

    Status = NtQuerySystemInformation(
                SystemBasicInformation,
                &BasicInfo,
                sizeof(BasicInfo),
                NULL
                );

    if (!NT_SUCCESS(Status)) {

        return;
    }

    dwTotalPhys = BasicInfo.NumberOfPhysicalPages *
                                          (BasicInfo.PageSize / 1024);


IP 地址: 已记录   报告
   2009-04-28, 22:59 下午
Thomson 离线,最后访问时间: 2013/3/31 11:42:42 Thomson

发帖数前10位
注册: 2008-07-03
发 贴: 211
Re: Taskmgr里面的PF usage由哪些部分组成?
Reply Quote
谢谢MJ0011, 回答很精彩...

另外,关于PF usage的获得,NtQuerySystemInformation应该就是根据nt!MmTotalCommittedPages换算出来的,那么这个值里面都包括哪些内存呢? 直接commit的private类型的肯定算在里面,还包括其它的吗?有没有一个列表什么的.(最好是有一个什么公式可以计算出这个值)

我看到好多处都在改这个变量.
IP 地址: 已记录   报告
   2009-04-29, 09:55 上午
WANGyu 离线,最后访问时间: 2012/9/10 3:34:00 王宇

发帖数前10位
男
注册: 2007-05-08
发 贴: 306
Re: Taskmgr里面的PF usage由哪些部分组成?
Reply Quote
下了个 ba 看了看,集中在几个函数:MiChargeCommitment、MiChargeCommitmentCantExpand 还有 MiInitializeLoadedModuleList。

其中以 ExAllocatePoolWithTag -> MiAllocatePoolPages -> MiChargeCommitmentCantExpand 分支最频繁。

MiInitializeLoadedModuleList 函数主要是从 PsLoadedModuleList 开始计算
CommittedPages += (DataTableEntry1->SizeOfImage >> PAGE_SHIFT);

MmTotalCommittedPages += CommittedPages;

需要啃代码了...
IP 地址: 已记录   报告
高端调试 » 软件调试 » Windows内核调试 » Re: Taskmgr里面的PF usage由哪些部分组成?

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.