283 lines
9 KiB
C
283 lines
9 KiB
C
/* * * * * * * * * * I N C L U D E F I L E S * * * * * * * * * * * * */
|
|
|
|
|
|
#ifndef NT_INCLUDED //Include definitions for other developers
|
|
|
|
#define IN
|
|
#define OUT
|
|
|
|
#define TIME LARGE_INTEGER
|
|
#define _TIME _LARGE_INTEGER
|
|
#define PTIME PLARGE_INTEGER
|
|
#define LowTime LowPart
|
|
#define HighTime HighPart
|
|
|
|
|
|
// begin_winnt begin_ntminiport begin_ntndis
|
|
|
|
//
|
|
// __int64 is only supported by 2.0 and later midl.
|
|
// __midl is set by the 2.0 midl and not by 1.0 midl.
|
|
//
|
|
|
|
#if (!defined(MIDL_PASS) || defined(__midl)) && (!defined(_M_IX86) || (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 64))
|
|
typedef __int64 LONGLONG;
|
|
typedef unsigned __int64 ULONGLONG;
|
|
#else
|
|
typedef double LONGLONG;
|
|
typedef double ULONGLONG;
|
|
#endif
|
|
|
|
typedef LONGLONG *PLONGLONG;
|
|
typedef ULONGLONG *PULONGLONG;
|
|
|
|
|
|
typedef LONGLONG USN;
|
|
typedef char *PSZ ;
|
|
typedef unsigned char UCHAR ;
|
|
typedef unsigned short USHORT ;
|
|
typedef unsigned long ULONG ;
|
|
typedef char CCHAR ;
|
|
typedef char *PCHAR ;
|
|
typedef ULONG KAFFINITY ;
|
|
|
|
|
|
typedef enum _SYSTEM_INFORMATION_CLASS {
|
|
SystemBasicInformation,
|
|
SystemProcessorInformation, // obsolete...delete
|
|
SystemPerformanceInformation,
|
|
SystemTimeOfDayInformation,
|
|
SystemPathInformation,
|
|
SystemProcessInformation,
|
|
SystemCallCountInformation,
|
|
SystemDeviceInformation,
|
|
SystemProcessorPerformanceInformation,
|
|
SystemFlagsInformation,
|
|
SystemCallTimeInformation,
|
|
SystemModuleInformation,
|
|
SystemLocksInformation,
|
|
SystemStackTraceInformation,
|
|
SystemPagedPoolInformation,
|
|
SystemNonPagedPoolInformation,
|
|
SystemHandleInformation,
|
|
SystemObjectInformation,
|
|
SystemPageFileInformation,
|
|
SystemVdmInstemulInformation,
|
|
SystemVdmBopInformation,
|
|
SystemFileCacheInformation,
|
|
SystemPoolTagInformation,
|
|
SystemInterruptInformation,
|
|
SystemDpcBehaviorInformation,
|
|
SystemSpare3Information,
|
|
SystemLoadGdiDriverInformation,
|
|
SystemUnloadGdiDriverInformation,
|
|
SystemTimeAdjustmentInformation,
|
|
SystemSpare6Information,
|
|
SystemNextEventIdInformation,
|
|
SystemEventIdsInformation,
|
|
SystemCrashDumpInformation,
|
|
SystemExceptionInformation,
|
|
SystemCrashDumpStateInformation,
|
|
SystemKernelDebuggerInformation,
|
|
SystemContextSwitchInformation,
|
|
SystemRegistryQuotaInformation,
|
|
SystemExtendServiceTableInformation,
|
|
SystemPrioritySeperation,
|
|
SystemPlugPlayBusInformation,
|
|
SystemDockInformation,
|
|
SystemPowerInformation,
|
|
SystemProcessorSpeedInformation
|
|
} SYSTEM_INFORMATION_CLASS;
|
|
|
|
//
|
|
// System Information Structures.
|
|
//
|
|
|
|
|
|
typedef struct _SYSTEM_BASIC_INFORMATION {
|
|
ULONG Reserved;
|
|
ULONG TimerResolution;
|
|
ULONG PageSize;
|
|
ULONG NumberOfPhysicalPages;
|
|
ULONG LowestPhysicalPageNumber;
|
|
ULONG HighestPhysicalPageNumber;
|
|
ULONG AllocationGranularity;
|
|
ULONG MinimumUserModeAddress;
|
|
ULONG MaximumUserModeAddress;
|
|
KAFFINITY ActiveProcessorsAffinityMask;
|
|
CCHAR NumberOfProcessors;
|
|
} SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
|
|
|
|
typedef struct _SYSTEM_PROCESSOR_INFORMATION {
|
|
USHORT ProcessorArchitecture;
|
|
USHORT ProcessorLevel;
|
|
USHORT ProcessorRevision;
|
|
USHORT Reserved;
|
|
ULONG ProcessorFeatureBits;
|
|
} SYSTEM_PROCESSOR_INFORMATION, *PSYSTEM_PROCESSOR_INFORMATION;
|
|
|
|
typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION {
|
|
LARGE_INTEGER IdleTime;
|
|
LARGE_INTEGER KernelTime;
|
|
LARGE_INTEGER UserTime;
|
|
LARGE_INTEGER DpcTime; // DEVL only
|
|
LARGE_INTEGER InterruptTime; // DEVL only
|
|
ULONG InterruptCount;
|
|
} SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
|
|
|
|
|
|
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;
|
|
ULONG CommittedPages;
|
|
ULONG CommitLimit;
|
|
ULONG 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 Spare0Count;
|
|
ULONG Spare1Count;
|
|
ULONG Spare3Count;
|
|
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;
|
|
|
|
#endif // NT_INCLUDED
|
|
|
|
typedef struct _PERFINFO {
|
|
SYSTEM_PERFORMANCE_INFORMATION SysPerfInfo;
|
|
//
|
|
SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION SysProcPerfInfo;
|
|
//
|
|
SYSTEM_PROCESSOR_INFORMATION SysProcInfo;
|
|
//
|
|
SYSTEM_BASIC_INFORMATION SysBasicInfo;
|
|
//
|
|
// Other info.
|
|
//
|
|
PCHAR Title;
|
|
ULONG Iterations;
|
|
short hTimer;
|
|
} PERFINFO;
|
|
typedef PERFINFO *PPERFINFO;
|
|
|
|
VOID
|
|
FinishBenchmark (
|
|
IN PPERFINFO PerfInfo
|
|
);
|
|
|
|
VOID
|
|
StartBenchmark (
|
|
IN PCHAR Title,
|
|
IN ULONG Iterations,
|
|
IN PPERFINFO PerfInfo,
|
|
IN PSZ p5Cntr1, // 1st Pentium counter - See comments below
|
|
IN PSZ p5Cntr2 // 2nd Pentium counter - See comments below
|
|
);
|
|
//
|
|
// P5Counters:
|
|
// Use the name in the first column when calling StartBenchmark
|
|
//
|
|
// "rdata", "Data Read", 0x00,
|
|
// "wdata", "Data Write", 0x01,
|
|
// "dtlbmiss", "Data TLB miss", 0x02,
|
|
// "rdmiss", "Data Read miss", 0x03,
|
|
// "wdmiss", "Data Write miss", 0x04,
|
|
// "meline", "Write hit to M/E line", 0x05,
|
|
// "dwb", "Data cache line WB", 0x06,
|
|
// "dsnoop", "Data cache snoops", 0x07,
|
|
// "dsnoophit", "Data cache snoop hits", 0x08,
|
|
// "mempipe", "Memory accesses in pipes", 0x09,
|
|
// "bankconf", "Bank conflicts", 0x0a,
|
|
// "misalign", "Misadligned data ref", 0x0b,
|
|
// "iread", "Code Read", 0x0c,
|
|
// "itldmiss", "Code TLB miss", 0x0d,
|
|
// "imiss", "Code cache miss", 0x0e,
|
|
// "segloads", "Segment loads", 0x0f,
|
|
// "segcache", "Segment cache accesses", 0x10,
|
|
// "segcachehit", "Segment cache hits", 0x11,
|
|
// "branch", "Branches", 0x12,
|
|
// "btbhit", "BTB hits", 0x13,
|
|
// "takenbranck", "Taken branch or BTB hits", 0x14,
|
|
// "pipeflush", "Pipeline flushes", 0x15,
|
|
// "iexec", "Instructions executed", 0x16,
|
|
// "iexecv", "Inst exec in vpipe", 0x17,
|
|
// "busutil", "Bus utilization (clks)", 0x18,
|
|
// "wpipestall", "Pipe stalled write (clks)", 0x19,
|
|
// "rpipestall", "Pipe stalled read (clks)", 0x1a,
|
|
// "stallEWBE", "Stalled while EWBE#", 0x1b,
|
|
// "lock", "Locked bus cycle", 0x1c,
|
|
// "io", "IO r/w cycle", 0x1d,
|
|
// "noncachemem", "non-cached memory ref", 0x1e,
|
|
// "agi", "Pipe stalled AGI", 0x1f,
|
|
// "flops", "FLOPs", 0x22,
|
|
// "dr0", "Debug Register 0", 0x23,
|
|
// "dr1", "Debug Register 1", 0x24,
|
|
// "dr2", "Debug Register 2", 0x25,
|
|
// "dr3", "Debug Register 3", 0x26,
|
|
// "int", "Interrupts", 0x27,
|
|
// "rwdata", "Data R/W", 0x28,
|
|
// "rwdatamiss", "Data R/W miss", 0x29,
|
|
//
|