docs: record PDH counter types of all collectors for agents (#2713)

Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de>
This commit is contained in:
Jan-Otto Kröpke
2026-10-15 15:49:01 +00:00
committed by GitHub
parent b64cc3621c
commit 6e242d7af2
25 changed files with 2986 additions and 0 deletions
+19
View File
@@ -186,6 +186,25 @@ go build -o windows_exporter.dev.exe ./cmd/windows_exporter/
Adjust the collector list for the change. Leave the existing exporter instance
running unless the user requests changes to it.
To check a collector's metric types against Windows, list each counter of the
PDH object with its type and raw value. Windows PowerShell 5.1 can do this
through .NET; `RawValue` and `BaseValue` are what `pdh.CounterTypeRaw` returns
as first and second value:
```powershell
$cat = [System.Diagnostics.PerformanceCounterCategory]'DirectoryServices'
$cat.GetCounters('NTDS') | ForEach-Object {
$s = $_.NextSample()
'{0} | {1} | raw={2} base={3}' -f $_.CounterName, $_.CounterType, $s.RawValue, $s.BaseValue
}
```
Every PDH-based collector except `exchange`, `smtp` and `vmware` has such a
dump in the `AGENTS.md` of its directory, including roles that are rarely
available on development machines (AD DS, AD CS, AD FS, DFSR, Hyper-V, IIS,
SQL Server, NPS, RemoteFX sessions). Check a type or unit question there
first.
## Dashboards, rules and runbooks
Read [`contrib/mixin/README.md`](contrib/mixin/README.md) and
+311
View File
@@ -0,0 +1,311 @@
# `ad` collector
The collector reads the PDH object `DirectoryServices` (instance `NTDS`, the
only instance) with `pdh.CounterTypeRaw`. The object exists only on a domain
controller, so most development machines and CI runners cannot read it. The
notes below were recorded on a Windows Server 2025 DC (forest with one DC,
light lab traffic) so that changes can be checked without one. Re-check them on
a DC when one is available.
## Raw counter types
`pdh.CounterTypeRaw` returns the raw first value and, for fractions, the base
as second value. On this object the raw value of every type is either a
cumulative count or an instantaneous value:
- `PERF_COUNTER_COUNTER` (`RateOfCountsPerSecond32`): every counter whose name
ends in `/sec`, plus `Transitive operations milliseconds run` and
`DirSync session throttling rate`. The raw value is a cumulative count since
NTDS start; publish it as a counter.
- `PERF_RAW_FRACTION` (`RawFraction`): the 23 `DS % {Reads,Searches,Writes}
{from DRA,KCC,LDAP,LSA,NSPI,NTDSAPI,SAM}` and `DS % ... Other` counters (no
`DS % Reads from LDAP` exists). The raw value is a cumulative count of
operations from that origin; the base equals the raw value of
`DS Directory Reads/sec`, `DS Directory Searches/sec` or
`DS Directory Writes/sec`. Publish the numerator as a counter.
- `PERF_SAMPLE_FRACTION` (`SampleFraction`): `DS Name Cache hit rate`. Raw is
cumulative hits, base (`,secondvalue`) is cumulative lookups; both counters.
- `PERF_COUNTER_LARGE_RAWCOUNT` (`NumberOfItems64`):
`PDC successful password update notifications` and
`PDC failed password update notifications`, both cumulative.
- `PERF_COUNTER_RAWCOUNT` (`NumberOfItems32`): everything else. The type does
not say whether the value is a gauge, so go by the name:
- Cumulative since NTDS start: every name ending in `since boot`
(`DRA ... Since Boot` bytes, `DRA number of ... NC replication calls`,
`DRA total time of ...` (milliseconds), `DRA total number of
{Busy,MissingParent,NotEnoughAttrs/MissingObject,Preempted} failures`,
`RID Pool request successes/failures`, `RID Pool invalidations`,
`{Info,Warning,Error} eventlogs`, `{Warning,Error,Fatal} events`),
`DRA Sync Requests Made`, `DRA Sync Requests Successful`,
`DRA Sync Failures on Schema Mismatch`, `LDAP {Add,Modify,Modify DN,Delete}
Operations`, `LDAP Outbound Bytes`, `LDAP busy retries`, `Links added`,
`Links visited`, `Logical link deletes`, `Physical link deletes`,
`Objects visited`, `Objects returned`, `Replicate Single Object operations`,
and the `DRA Highest USN {Committed,Issued} ({High,Low} part)` pairs
(monotonic, combine as `high<<32 + low`).
- Instantaneous: thread counts (`DS Threads in Use`, `ATQ Threads
{LDAP,Other,Total}`, `LDAP Active Threads`, `LDAP Threads Sleeping on
BUSY`, `DRA Threads Getting NC Changes [Holding Semaphore]`), sessions
(`LDAP Client Sessions`, `AB Client Sessions`, `DirSync sessions in
progress`), queue and list sizes (`DS Monitor List Size`,
`DS Notify Queue Size`, `ATQ Outstanding Queued Requests`,
`DS Security Descriptor Propagations Events`,
`DS Security Descriptor Propagator Runtime Queue`,
`DRA Pending Replication Operations/Synchronizations`,
`DRA Inbound ... Remaining [in Packet]`, `LDAP batch slots available`,
`LDAP Page Search Cache size/entries count`), `Approximate highest DNT`,
and latencies in milliseconds: `ATQ Estimated Queue Delay`,
`ATQ Request Latency`, `ATQ Queue Latency`, `LDAP Bind Time` (last
successful bind), `SAM Account/Resource Group Evaluation Latency` (mean of
the last 100 evaluations) and
`DS Security Descriptor Propagator Average Exclusion Time`.
Most `X` / `X/sec` pairs report the same raw value (for example
`LDAP Add Operations` and `LDAP Add Operations/sec`). `Objects visited/sec` and
`Objects returned/sec` do not: they stayed 0 while `Objects visited` and
`Objects returned` counted. Read the plain counter for those.
## Sample
Raw values from the DC, about one hour after NTDS start:
```text
LDAP Searches/sec 1968 DS Directory Searches/sec 1524
LDAP Successful Binds/sec 213 DS % Searches from LDAP 1231 / 1524
Negotiated Binds/sec 209 DS % Writes from LSA 12 / 228
NTLM Binds/sec 2 DS % Searches from LSA 9 / 1524
LDAP New Connections/sec 233 DS Name Cache hit rate 69119 / 90091
LDAP Client Sessions 12 DRA Highest USN Committed 61682 (high 0)
DS Monitor List Size 24 Approximate highest DNT 5376
ATQ Threads Total 6 LDAP batch slots available 192
LDAP Outbound Bytes 5706176 Warning events since boot 8256
```
The DC had no replication partner, so all `DRA` counters were 0.
## Checking a change without a DC
`ad_test.go` skips when `DirectoryServices` is missing, so a passing test on a
machine without AD DS checks nothing. To check emitted
values, build `perfDataCounterValues` rows by hand from the types above (a
fraction's base goes into the `,secondvalue` field) and gather the metrics
through a registry. The mapping from struct field to metric and label is the
part most likely to be wrong: compare each `MustNewConstMetric` call with the
`perfdata` tag of the field it reads.
## Counter reference
Recorded on Windows Server 2025 (build 26100). `Raw` and `Base` are the first and second
values that `pdh.CounterTypeRaw` returns for the sample instance.
### `DirectoryServices`
Multi-instance. Instances: `NTDS`. Sample instance: `NTDS`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `AB ANR/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `AB Browses/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `AB Client Sessions` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `AB Matches/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `AB Property Reads/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `AB Proxy Lookups/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `AB Searches/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Approximate highest DNT` | `PERF_COUNTER_RAWCOUNT` | 5376 | |
| `ATQ Estimated Queue Delay` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `ATQ Outstanding Queued Requests` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `ATQ Queue Latency` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `ATQ Request Latency` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `ATQ Threads LDAP` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `ATQ Threads Other` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `ATQ Threads Total` | `PERF_COUNTER_RAWCOUNT` | 6 | |
| `Base searches/sec` | `PERF_COUNTER_COUNTER` | 1081 | |
| `Database adds/sec` | `PERF_COUNTER_COUNTER` | 71 | |
| `Database deletes/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Database modifys/sec` | `PERF_COUNTER_COUNTER` | 157 | |
| `Database recycles/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Digest Binds/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `DirSync session throttling rate` | `PERF_COUNTER_COUNTER` | 0 | |
| `DirSync sessions in progress` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA Highest USN Committed (High part)` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA Highest USN Committed (Low part)` | `PERF_COUNTER_RAWCOUNT` | 61683 | |
| `DRA Highest USN Issued (High part)` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA Highest USN Issued (Low part)` | `PERF_COUNTER_RAWCOUNT` | 61683 | |
| `DRA Inbound Bytes Compressed (Between Sites, After Compression) Since Boot` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA Inbound Bytes Compressed (Between Sites, After Compression)/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `DRA Inbound Bytes Compressed (Between Sites, Before Compression) Since Boot` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA Inbound Bytes Compressed (Between Sites, Before Compression)/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `DRA Inbound Bytes Not Compressed (Within Site) Since Boot` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA Inbound Bytes Not Compressed (Within Site)/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `DRA Inbound Bytes Total Since Boot` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA Inbound Bytes Total/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `DRA Inbound Full Sync Objects Remaining` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA Inbound Link Value Updates Remaining in Packet` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA Inbound Link Values/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `DRA Inbound Object Updates Remaining in Packet` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA Inbound Objects Applied/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `DRA Inbound Objects Filtered/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `DRA Inbound Objects/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `DRA Inbound Properties Applied/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `DRA Inbound Properties Filtered/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `DRA Inbound Properties Total/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `DRA Inbound Sync Link Deletion/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `DRA Inbound Total Updates Remaining in Packet` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA Inbound Values (DNs only)/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `DRA Inbound Values Total/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `DRA number of NC replication calls since boot` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA number of successful NC replication calls since boot` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA Outbound Bytes Compressed (Between Sites, After Compression) Since Boot` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA Outbound Bytes Compressed (Between Sites, After Compression)/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `DRA Outbound Bytes Compressed (Between Sites, Before Compression) Since Boot` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA Outbound Bytes Compressed (Between Sites, Before Compression)/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `DRA Outbound Bytes Not Compressed (Within Site) Since Boot` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA Outbound Bytes Not Compressed (Within Site)/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `DRA Outbound Bytes Total Since Boot` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA Outbound Bytes Total/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `DRA Outbound Objects Filtered/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `DRA Outbound Objects/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `DRA Outbound Properties/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `DRA Outbound Values (DNs only)/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `DRA Outbound Values Total/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `DRA Pending Replication Operations` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA Pending Replication Synchronizations` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA Sync Failures on Schema Mismatch` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA Sync Requests Made` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA Sync Requests Successful` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA Threads Getting NC Changes` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA Threads Getting NC Changes Holding Semaphore` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA total number of Busy failures since boot` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA total number of MissingParent failures since boot` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA total number of NotEnoughAttrs/MissingObject failures since boot` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA total number of Preempted failures since boot` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA total time of applying replication package since boot` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA total time of NC replication calls since boot` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA total time of successful NC replication calls since boot` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA total time of successfully applying replication package since boot` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA total time on waiting async replication packages since boot` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DRA total time on waiting sync replication packages since boot` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DS % Reads from DRA` | `PERF_RAW_FRACTION` | 0 | 2227 |
| `DS % Reads from KCC` | `PERF_RAW_FRACTION` | 80 | 2227 |
| `DS % Reads from LSA` | `PERF_RAW_FRACTION` | 70 | 2227 |
| `DS % Reads from NSPI` | `PERF_RAW_FRACTION` | 0 | 2227 |
| `DS % Reads from NTDSAPI` | `PERF_RAW_FRACTION` | 0 | 2227 |
| `DS % Reads from SAM` | `PERF_RAW_FRACTION` | 1977 | 2227 |
| `DS % Reads Other` | `PERF_RAW_FRACTION` | 100 | 2227 |
| `DS % Searches from DRA` | `PERF_RAW_FRACTION` | 0 | 2003 |
| `DS % Searches from KCC` | `PERF_RAW_FRACTION` | 28 | 2003 |
| `DS % Searches from LDAP` | `PERF_RAW_FRACTION` | 1637 | 2003 |
| `DS % Searches from LSA` | `PERF_RAW_FRACTION` | 9 | 2003 |
| `DS % Searches from NSPI` | `PERF_RAW_FRACTION` | 0 | 2003 |
| `DS % Searches from NTDSAPI` | `PERF_RAW_FRACTION` | 161 | 2003 |
| `DS % Searches from SAM` | `PERF_RAW_FRACTION` | 95 | 2003 |
| `DS % Searches Other` | `PERF_RAW_FRACTION` | 73 | 2003 |
| `DS % Writes from DRA` | `PERF_RAW_FRACTION` | 0 | 228 |
| `DS % Writes from KCC` | `PERF_RAW_FRACTION` | 0 | 228 |
| `DS % Writes from LDAP` | `PERF_RAW_FRACTION` | 115 | 228 |
| `DS % Writes from LSA` | `PERF_RAW_FRACTION` | 12 | 228 |
| `DS % Writes from NSPI` | `PERF_RAW_FRACTION` | 0 | 228 |
| `DS % Writes from NTDSAPI` | `PERF_RAW_FRACTION` | 9 | 228 |
| `DS % Writes from SAM` | `PERF_RAW_FRACTION` | 91 | 228 |
| `DS % Writes Other` | `PERF_RAW_FRACTION` | 1 | 228 |
| `DS Client Binds/sec` | `PERF_COUNTER_COUNTER` | 136 | |
| `DS Client Name Translations/sec` | `PERF_COUNTER_COUNTER` | 81 | |
| `DS Directory Reads/sec` | `PERF_COUNTER_COUNTER` | 2227 | |
| `DS Directory Searches/sec` | `PERF_COUNTER_COUNTER` | 2003 | |
| `DS Directory Writes/sec` | `PERF_COUNTER_COUNTER` | 228 | |
| `DS Monitor List Size` | `PERF_COUNTER_RAWCOUNT` | 24 | |
| `DS Name Cache hit rate` | `PERF_SAMPLE_FRACTION` | 80335 | 101578 |
| `DS Notify Queue Size` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DS Search sub-operations/sec` | `PERF_COUNTER_COUNTER` | 10617 | |
| `DS Security Descriptor Propagations Events` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DS Security Descriptor Propagator Average Exclusion Time` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DS Security Descriptor Propagator Runtime Queue` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `DS Security Descriptor sub-operations/sec` | `PERF_COUNTER_COUNTER` | 17 | |
| `DS Server Binds/sec` | `PERF_COUNTER_COUNTER` | 1 | |
| `DS Server Name Translations/sec` | `PERF_COUNTER_COUNTER` | 13 | |
| `DS Threads in Use` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Error eventlogs since boot` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Error events since boot` | `PERF_COUNTER_RAWCOUNT` | 46 | |
| `External Binds/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Fast Binds/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Fatal events since boot` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Info eventlogs since boot` | `PERF_COUNTER_RAWCOUNT` | 18 | |
| `LDAP Active Threads` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `LDAP Add Operations` | `PERF_COUNTER_RAWCOUNT` | 66 | |
| `LDAP Add Operations/sec` | `PERF_COUNTER_COUNTER` | 66 | |
| `LDAP batch slots available` | `PERF_COUNTER_RAWCOUNT` | 192 | |
| `LDAP Bind Time` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `LDAP busy retries` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `LDAP busy retries/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `LDAP Client Sessions` | `PERF_COUNTER_RAWCOUNT` | 8 | |
| `LDAP Closed Connections/sec` | `PERF_COUNTER_COUNTER` | 269 | |
| `LDAP Delete Operations` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `LDAP Delete Operations/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `LDAP Modify DN Operations` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `LDAP Modify DN Operations/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `LDAP Modify Operations` | `PERF_COUNTER_RAWCOUNT` | 45 | |
| `LDAP Modify Operations/sec` | `PERF_COUNTER_COUNTER` | 45 | |
| `LDAP New Connections/sec` | `PERF_COUNTER_COUNTER` | 277 | |
| `LDAP New SSL Connections/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `LDAP Outbound Bytes` | `PERF_COUNTER_RAWCOUNT` | 6254589 | |
| `LDAP Outbound Bytes/sec` | `PERF_COUNTER_COUNTER` | 6254589 | |
| `LDAP Page Search Cache entries count` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `LDAP Page Search Cache size` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `LDAP Searches/sec` | `PERF_COUNTER_COUNTER` | 2482 | |
| `LDAP Successful Binds/sec` | `PERF_COUNTER_COUNTER` | 257 | |
| `LDAP Threads Sleeping on BUSY` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `LDAP UDP operations/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `LDAP Writes/sec` | `PERF_COUNTER_COUNTER` | 111 | |
| `Link Values Cleaned/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Links added` | `PERF_COUNTER_RAWCOUNT` | 3 | |
| `Links added/sec` | `PERF_COUNTER_COUNTER` | 3 | |
| `Links visited` | `PERF_COUNTER_RAWCOUNT` | 2550 | |
| `Links visited/sec` | `PERF_COUNTER_COUNTER` | 2550 | |
| `Logical link deletes` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Logical link deletes/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Negotiated Binds/sec` | `PERF_COUNTER_COUNTER` | 253 | |
| `NTLM Binds/sec` | `PERF_COUNTER_COUNTER` | 2 | |
| `Objects returned` | `PERF_COUNTER_RAWCOUNT` | 24196 | |
| `Objects returned/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Objects visited` | `PERF_COUNTER_RAWCOUNT` | 31489 | |
| `Objects visited/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Onelevel searches/sec` | `PERF_COUNTER_COUNTER` | 287 | |
| `PDC failed password update notifications` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `PDC password update notifications/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `PDC successful password update notifications` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Phantoms Cleaned/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Phantoms Visited/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Physical link deletes` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Physical link deletes/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Replicate Single Object operations` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Replicate Single Object operations/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `RID Pool invalidations since boot` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `RID Pool request failures since boot` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `RID Pool request successes since boot` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `SAM Account Group Evaluation Latency` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `SAM Display Information Queries/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `SAM Domain Local Group Membership Evaluations/sec` | `PERF_COUNTER_COUNTER` | 1002 | |
| `SAM Enumerations/sec` | `PERF_COUNTER_COUNTER` | 6 | |
| `SAM GC Evaluations/sec` | `PERF_COUNTER_COUNTER` | 1 | |
| `SAM Global Group Membership Evaluations/sec` | `PERF_COUNTER_COUNTER` | 160 | |
| `SAM Machine Creation Attempts/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `SAM Membership Changes/sec` | `PERF_COUNTER_COUNTER` | 7 | |
| `SAM Non-Transitive Membership Evaluations/sec` | `PERF_COUNTER_COUNTER` | 4700 | |
| `SAM Password Changes/sec` | `PERF_COUNTER_COUNTER` | 1 | |
| `SAM Resource Group Evaluation Latency` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `SAM Successful Computer Creations/sec: Includes all requests` | `PERF_COUNTER_COUNTER` | 0 | |
| `SAM Successful User Creations/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `SAM Transitive Membership Evaluations/sec` | `PERF_COUNTER_COUNTER` | 1498 | |
| `SAM Universal Group Membership Evaluations/sec` | `PERF_COUNTER_COUNTER` | 336 | |
| `SAM User Creation Attempts/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Simple Binds/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Subtree searches/sec` | `PERF_COUNTER_COUNTER` | 635 | |
| `Tombstones Garbage Collected/sec` | `PERF_COUNTER_COUNTER` | 37 | |
| `Tombstones Visited/sec` | `PERF_COUNTER_COUNTER` | 41 | |
| `Transitive operations milliseconds run` | `PERF_COUNTER_COUNTER` | 0 | |
| `Transitive operations/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Transitive suboperations/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Warning eventlogs since boot` | `PERF_COUNTER_RAWCOUNT` | 5 | |
| `Warning events since boot` | `PERF_COUNTER_RAWCOUNT` | 10302 | |
+55
View File
@@ -0,0 +1,55 @@
# `adcs` collector
The collector reads the PDH object `Certification Authority` with
`pdh.CounterTypeRaw`. It exists only on a server running Active Directory
Certificate Services (`CertSvc`). These notes were recorded on a Windows
Server 2025 enterprise root CA so that changes can be checked without one.
- Instances are certificate template names, plus `_Total`. An enterprise CA
has the default templates loaded, so the object has instances even before
any request was made, for example `Administrator`, `DirectoryEmailReplication`,
`DomainController`, `DomainControllerAuthentication`, `EFS`, `EFSRecovery`,
`KerberosAuthentication`, `Machine`, `SubCA`, `User` and `WebServer`. The
collector publishes them as `cert_template` and drops `_Total`.
- All 13 counters exist on every instance:
- `Requests/sec`, `Retrievals/sec`, `Failed Requests/sec`,
`Issued Requests/sec`, `Pending Requests/sec`, `Challenge Responses/sec`
and `Signed Certificate Timestamp Lists/sec` are `PERF_COUNTER_COUNTER`
(`RateOfCountsPerSecond32`); the raw value is a cumulative count since
CertSvc start.
- The six `... processing time (ms)` / `... signing time (ms)` counters are
`PERF_COUNTER_RAWCOUNT` (`NumberOfItems32`): the duration of the last
operation in milliseconds, a gauge.
- The separate object `Certification Authority Connections` (instance
`_Total`) has one counter, `Active connections` (`NumberOfItems32`). The
collector does not read it.
- A fresh CA reports 0 for every counter. Issuing a certificate changes the
CA database, so do not request certificates on a shared machine just to get
non-zero values.
## Counter reference
Recorded on Windows Server 2025 (build 26100). `Raw` and `Base` are the first and second
values that `pdh.CounterTypeRaw` returns for the sample instance.
### `Certification Authority`
Multi-instance. Instances: `_Total`, `Administrator`, `DirectoryEmailReplication`, `DomainController`, `DomainControllerAuthentication`, `EFS`, `EFSRecovery`, `KerberosAuthentication`, ... (12 in total). Sample instance: `Administrator`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Challenge Response processing time (ms)` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Challenge Responses/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Failed Requests/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Issued Requests/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Pending Requests/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Request cryptographic signing time (ms)` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Request policy module processing time (ms)` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Request processing time (ms)` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Requests/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Retrieval processing time (ms)` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Retrievals/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Signed Certificate Timestamp List processing time (ms)` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Signed Certificate Timestamp Lists/sec` | `PERF_COUNTER_COUNTER` | 0 | |
+117
View File
@@ -0,0 +1,117 @@
# `adfs` collector
The collector reads the single-instance PDH object `AD FS` with
`pdh.CounterTypeRaw`. It exists only on a server running the AD FS service
(`adfssrv`). These notes were recorded on a Windows Server 2025 AD FS farm with
one node (WID configuration database) so that changes can be checked without
one.
## Raw counter types
- Each event has a cumulative counter of type `PERF_COUNTER_LARGE_RAWCOUNT`
(`NumberOfItems64`), for example `Token Requests`, and most have a twin with
a `/Sec` suffix of type `PERF_COUNTER_BULK_COUNT`
(`RateOfCountsPerSecond64`) with the same raw value. Read the plain name and
publish it as a counter. Some failure counters have no `/Sec` twin, and some
twins differ in spelling (`OAuth Client Authentications Failures` vs.
`OAuth Client Authentication Failures/Sec`), so copy names from a counter
dump, not from the twin.
- `Average Config Database Query Time`, `Average Artifact Database Query Time`
and `Average Search Latency for Alternate Login ID` are
`PERF_AVERAGE_TIMER` (`AverageTimer32`). The raw value is the summed
duration in ticks of the counter's time base (`PdhGetCounterTimeBase`,
10 MHz on the test host, same as `QueryPerformanceFrequency`); the base
(`,secondvalue`) is the number of operations. `pdh.CounterTypeRaw` does not
convert this type, and `internal/pdh` reads the time base only for
`PERF_ELAPSED_TIME`. Seconds are `raw / time base`; do not hardcode a scale
factor.
- Sample after about one hour: `Average Config Database Query Time` raw
11521176, base 306, which is 1.152 s in total, 3.8 ms per query.
`Federation Metadata Requests` was 1, all authentication counters 0.
## Counters
The object has about 150 counters on Server 2025. Besides the ones in
`types.go`, it has (each with `/Sec` twin unless noted): `Additional
Authentications` (MFA), `Device Authentication Failures`, `Federated
Authentication Failures`, `Microsoft Passport Authentication Failures`,
`Microsoft Passport Request [Failures]`, `Primary Device Authentications` and
`... Failures`, `Azure Primary Authentications` and `... Failures`,
`Alternate Login Id Authentications`, `Artifact Resolution Requests`,
`MSIS HTTP Token Requests`, `OAuth On Behalf Of Token Requests` and
`... Request Failures`, `OAuth VPN Certificate Token Requests` and
`... Request Failures`, `OAuth Device Flow {successful,failed} {device code,
usercode retrieval} requests`, `WebFinger Requests [Failures]`,
`UserInfo Requests [Failures]`, `Windows Hello Certificate Request [Failures]`,
`Token Requests/Sec`, the `Token Binding Requests ...` counters and the
`WIA` evaluation counters (no `/Sec` twins).
Other AD FS objects (`AD FS Domain Connection Counters`, `AD FS Attribute Store
Counters`, `AD FS Local Claims Provider Connections`, `AD FS Cryptographic
Counters`, `AD FS External Authentication Provider Counters`, `AD FS Inter-node
Communication Counters`) are multi-instance and had no instances on the
one-node farm. Their counters are `AverageTimer32` averages with
`NumberOfItems64` failure counts.
## Counter reference
Recorded on Windows Server 2025 (build 26100). `Raw` and `Base` are the first and second
values that `pdh.CounterTypeRaw` returns for the sample instance.
### `AD FS`
Single-instance.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `AD Login Connection Failures` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Artifact Database Connection Failures` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Average Artifact Database Query Time` | `PERF_AVERAGE_TIMER` | 0 | 0 |
| `Average Config Database Query Time` | `PERF_AVERAGE_TIMER` | 11893699 | 333 |
| `Certificate Authentications` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Configuration Database Connection Failures` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Device Authentications` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `External Authentication Failures` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `External Authentications` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Extranet Account Lockouts` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Federated Authentications` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Federation Metadata Requests` | `PERF_COUNTER_LARGE_RAWCOUNT` | 1 | |
| `Microsoft Passport Authentications` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `OAuth AuthZ Requests` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `OAuth Client Authentications` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `OAuth Client Authentications Failures` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `OAuth Client Credentials Request Failures` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `OAuth Client Credentials Requests` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `OAuth Client Private Key Jwt Authentication Failures` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `OAuth Client Private Key Jwt Authentications` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `OAuth Client Secret Basic Authentication Failures` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `OAuth Client Secret Basic Authentications` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `OAuth Client Secret Post Authentication Failures` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `OAuth Client Secret Post Authentications` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `OAuth Client Windows Integrated Authentication Failures` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `OAuth Client Windows Integrated Authentications` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `OAuth Logon Certificate Request Failures` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `OAuth Logon Certificate Token Requests` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `OAuth Password Grant Request Failures` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `OAuth Password Grant Requests` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `OAuth Token Requests` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Passive Requests` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Password Change Failed Requests` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Password Change Successful Requests` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `SAML-P Token Requests` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `SSO Authentication Failures` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `SSO Authentications` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Token Requests` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `U/P Authentication Failures` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `U/P Authentications` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Windows Integrated Authentications` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `WS-Fed Token Requests` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `WS-Trust Token Requests` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
Not read by the collector:
- `PERF_AVERAGE_TIMER`: `Average Search Latency for Alternate Login ID`
- `PERF_COUNTER_BULK_COUNT`: `Additional Authentications/Sec`, `Alternate Login Id Authentications/Sec`, `Artifact Resolution Requests/Sec`, `Azure Primary Authentication Failures/Sec`, `Azure Primary Authentications/Sec`, `Certificate Authentications/Sec`, `Device Authentications/Sec`, `External Authentications/Sec`, `Federated Authentications/Sec`, `Federation Metadata Requests/Sec`, `Microsoft Passport Authentications Failures/Sec`, `Microsoft Passport Authentications/Sec`, `Microsoft Passport Request Failures/Sec`, `Microsoft Passport Request/Sec`, `MSIS HTTP Token Requests/Sec`, `OAuth AuthZ Requests/Sec`, `OAuth Client Authentication Failures/Sec`, `OAuth Client Authentications/Sec`, `OAuth Client Credentials Request Failures/Sec`, `OAuth Client Credentials Requests/Sec`, `OAuth Client Private Key Jwt Authentication Failures/Sec`, `OAuth Client Private Key Jwt Authentications/Sec`, `OAuth Client Secret Basic Authentication Failures/Sec`, `OAuth Client Secret Basic Authentications/Sec`, `OAuth Client Secret Post Authentication Failures/Sec`, `OAuth Client Secret Post Authentications/Sec`, `OAuth Client Windows Integrated Authentication Failures/Sec`, `OAuth Client Windows Integrated Authentications/Sec`, `OAuth Device Flow failed device code requests/sec`, `OAuth Device Flow failed usercode retrieval requests/sec`, `OAuth Device Flow successful device code requests/sec`, `OAuth Device Flow successful usercode retrieval requests/sec`, `OAuth Logon Certificate Request Failures/Sec`, `OAuth Logon Certificate Token Requests/Sec`, `OAuth On Behalf Of Request Failures/Sec`, `OAuth On Behalf Of Token Requests/Sec`, `OAuth Password Grant Requests Failures/Sec`, `OAuth Password Grant Requests/Sec`, `OAuth Token Requests/Sec`, `OAuth VPN Certificate Request Failures/Sec`, `OAuth VPN Certificate Token Requests/Sec`, `Passive Requests/Sec`, `Primary Device Authentications/Sec`, `SAML-P Token Requests/Sec`, `SSO Authentications/Sec`, `Token Requests/Sec`, `U/P Authentication Failures/Sec`, `U/P Authentications/Sec`, `UserInfo Requests Failures/Sec`, `UserInfo Requests/Sec`, `WebFinger Requests Failures/Sec`, `WebFinger Requests/Sec`, `Windows Hello Certificate Request Failures/Sec`, `Windows Hello Certificate Request/Sec`, `Windows Integrated Authentications/Sec`, `WS-Fed Token Requests/Sec`, `WS-Trust Token Requests/Sec`
- `PERF_COUNTER_LARGE_RAWCOUNT`: `Additional Authentications`, `Alternate Login Id Authentications`, `Artifact Resolution Requests`, `Azure Primary Authentication Failures`, `Azure Primary Authentications`, `Device Authentication Failures`, `Failed WIA Evaluation Requests`, `Federated Authentication Failures`, `Microsoft Passport Authentication Failures`, `Microsoft Passport Request Failures`, `Microsoft Passport Request`, `MSIS HTTP Token Requests`, `OAuth Device Flow failed device code requests`, `OAuth Device Flow failed usercode retrieval requests`, `OAuth Device Flow successful device code requests`, `OAuth Device Flow successful usercode retrieval requests`, `OAuth On Behalf Of Request Failures`, `OAuth On Behalf Of Token Requests`, `OAuth VPN Certificate Request Failures`, `OAuth VPN Certificate Token Requests`, `Primary Device Authentication Failures`, `Primary Device Authentications`, `Token Binding Requests Received with a Provided Binding ID`, `Token Binding Requests Received with a Referred Binding ID`, `Token Binding Requests Received`, `Token Binding Requests that contain an invalid token binding in a federated request scenario`, `Token Binding Requests that contain an invalid token binding in a non-federated request scenario`, `Token Binding Requests that failed due to invalid binding`, `Total WIA Evaluation Requests`, `UserInfo Requests Failures`, `UserInfo Requests`, `WebFinger Requests Failures`, `WebFinger Requests`, `WIA Cookied Requests`, `WIA No Cookied Requests`, `WIA Yes Cookied Requests`, `Windows Hello Certificate Request Failures`, `Windows Hello Certificate Request`
+69
View File
@@ -0,0 +1,69 @@
# `cache` collector
The collector reads the single-instance PDH object `Cache` (file system cache)
with `pdh.CounterTypeRaw`. The object exists on every Windows host, so no role
is needed. These notes were recorded on Windows Server 2025 (build 26100).
- Every `PERF_COUNTER_COUNTER` (`/sec`) counter is a cumulative count since
boot. In the sample, each `Sync ...` plus `Async ...` pair adds up exactly to
its total: `Copy Reads/sec`, `Data Maps/sec`, `Fast Reads/sec`,
`MDL Reads/sec` and `Pin Reads/sec`.
- The four `... Hits %` counters are `PERF_SAMPLE_FRACTION`. The raw value is
the cumulative hit count, not a percentage. The base (`,secondvalue`) is the
cumulative count of attempts and equals the raw value of the matching
`/sec` counter: `Copy Read Hits %` with `Copy Reads/sec`, `Data Map Hits %`
with `Data Maps/sec`, `MDL Read Hits %` with `MDL Reads/sec` and
`Pin Read Hits %` with `Pin Reads/sec`. The hit ratio is
rate(raw) / rate(base).
- `Data Map Pins/sec` is also `PERF_SAMPLE_FRACTION`, despite its name. Its raw
value is the cumulative count of data maps that pinned a page; its base is
`Data Maps/sec`.
- `Data Flushes/sec` and `Lazy Write Flushes/sec` count write operations;
`Data Flush Pages/sec` and `Lazy Write Pages/sec` count pages. One operation
can move more than one page.
- `Dirty Pages` and `Dirty Page Threshold` are gauges in pages, not bytes.
- `Async Fast Reads/sec`, `Async MDL Reads/sec` and
`Fast Read Resource Misses/sec` stayed 0 on this host.
## Counter reference
Recorded on Windows Server 2025 (build 26100). `Raw` and `Base` are the first and second
values that `pdh.CounterTypeRaw` returns for the sample instance.
### `Cache`
Single-instance.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Async Copy Reads/sec` | `PERF_COUNTER_COUNTER` | 35778 | |
| `Async Data Maps/sec` | `PERF_COUNTER_COUNTER` | 2 | |
| `Async Fast Reads/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Async MDL Reads/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Async Pin Reads/sec` | `PERF_COUNTER_COUNTER` | 12297 | |
| `Copy Read Hits %` | `PERF_SAMPLE_FRACTION` | 1607787 | 3347074 |
| `Copy Reads/sec` | `PERF_COUNTER_COUNTER` | 3347074 | |
| `Data Flush Pages/sec` | `PERF_COUNTER_COUNTER` | 9099373 | |
| `Data Flushes/sec` | `PERF_COUNTER_COUNTER` | 655879 | |
| `Data Map Hits %` | `PERF_SAMPLE_FRACTION` | 67204750 | 67331258 |
| `Data Map Pins/sec` | `PERF_SAMPLE_FRACTION` | 12144215 | 67331258 |
| `Data Maps/sec` | `PERF_COUNTER_COUNTER` | 67331258 | |
| `Dirty Page Threshold` | `PERF_COUNTER_LARGE_RAWCOUNT` | 2097010 | |
| `Dirty Pages` | `PERF_COUNTER_LARGE_RAWCOUNT` | 175 | |
| `Fast Read Not Possibles/sec` | `PERF_COUNTER_COUNTER` | 206860 | |
| `Fast Read Resource Misses/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Fast Reads/sec` | `PERF_COUNTER_COUNTER` | 2861445 | |
| `Lazy Write Flushes/sec` | `PERF_COUNTER_COUNTER` | 276157 | |
| `Lazy Write Pages/sec` | `PERF_COUNTER_COUNTER` | 5836457 | |
| `MDL Read Hits %` | `PERF_SAMPLE_FRACTION` | 1958 | 1959 |
| `MDL Reads/sec` | `PERF_COUNTER_COUNTER` | 1959 | |
| `Pin Read Hits %` | `PERF_SAMPLE_FRACTION` | 3216022 | 3671006 |
| `Pin Reads/sec` | `PERF_COUNTER_COUNTER` | 3671006 | |
| `Read Aheads/sec` | `PERF_COUNTER_COUNTER` | 2012322 | |
| `Sync Copy Reads/sec` | `PERF_COUNTER_COUNTER` | 3311296 | |
| `Sync Data Maps/sec` | `PERF_COUNTER_COUNTER` | 67331256 | |
| `Sync Fast Reads/sec` | `PERF_COUNTER_COUNTER` | 2861445 | |
| `Sync MDL Reads/sec` | `PERF_COUNTER_COUNTER` | 1959 | |
| `Sync Pin Reads/sec` | `PERF_COUNTER_COUNTER` | 3658709 | |
+77
View File
@@ -0,0 +1,77 @@
# `cpu` collector
The collector reads the multi-instance PDH object `Processor Information`
with `pdh.CounterTypeRaw`. The object exists on every Windows host, so no role
is needed. These notes were recorded on Windows Server 2025 (build 26100), a
Hyper-V guest with 12 logical processors in one processor group.
- Instances are `<group>,<processor>`, for example `0,0` to `0,11`. Besides
`_Total` the object has one aggregate per processor group, `<group>,_Total`
(here `0,_Total`). `pdh.IsTotalInstance` treats both as totals, so with
`pdh.InstancesAll` they are dropped and only per-processor rows remain. The
`core` label is the raw instance name, e.g. `0,3`.
- `% C1/C2/C3 Time`, `% DPC Time`, `% Idle Time`, `% Interrupt Time`,
`% Privileged Time` and `% User Time` are `PERF_100NSEC_TIMER`. Their raw
value is cumulative 100 ns ticks; `internal/pdh` scales them to seconds.
- `% Processor Time` and `% Priority Time` are `PERF_100NSEC_TIMER_INV`. The
raw value is cumulative idle (non-busy) time in 100 ns ticks, not busy time,
and `internal/pdh` does not scale this type to seconds. In the sample, the
raw value of `% Processor Time` equals `% Idle Time`.
- `% Processor Utility`, `% Processor Performance` and `% Privileged Utility`
are `PERF_AVERAGE_BULK`. Raw and base are both cumulative. The displayed
value is delta raw / delta base and is already a percentage (it can exceed
100). A 2 s sample on core `0,0` gave 63.4 for utility and 121.9 for
performance. The raw values of utility and performance are almost equal;
their bases differ. `% Processor Utility` and `% Privileged Utility` have
nearly equal bases that grew about 630 000 per second; the performance
base grew about 330 000 per second.
- `Interrupts/sec`, `DPCs Queued/sec` and `Clock Interrupts/sec`
(`PERF_COUNTER_COUNTER`) and `C1/C2/C3 Transitions/sec`,
`Idle Break Events/sec` (`PERF_COUNTER_BULK_COUNT`) are cumulative counts.
- `Processor Frequency` is a gauge in MHz (3700 here). `Parking Status` is a
gauge, 0 when the processor is not parked. `% Performance Limit` is a gauge
percentage (100 here). `% C3 Time` and `C3 Transitions/sec` stayed 0 on this
virtual machine.
## Counter reference
Recorded on Windows Server 2025 (build 26100). `Raw` and `Base` are the first and second
values that `pdh.CounterTypeRaw` returns for the sample instance.
### `Processor Information`
Multi-instance. Instances: `_Total`, `0,_Total`, `0,0`, `0,1`, `0,10`, `0,11`, `0,2`, `0,3`, ... (14 in total). Sample instance: `0,0`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `% C1 Time` | `PERF_100NSEC_TIMER` | 3366958649 | |
| `% C2 Time` | `PERF_100NSEC_TIMER` | 21091589064 | |
| `% C3 Time` | `PERF_100NSEC_TIMER` | 0 | |
| `% DPC Time` | `PERF_100NSEC_TIMER` | 185312500 | |
| `% Idle Time` | `PERF_100NSEC_TIMER` | 25109218750 | |
| `% Interrupt Time` | `PERF_100NSEC_TIMER` | 257812500 | |
| `% Performance Limit` | `PERF_COUNTER_RAWCOUNT` | 100 | |
| `% Priority Time` | `PERF_100NSEC_TIMER_INV` | 26964687500 | |
| `% Privileged Time` | `PERF_100NSEC_TIMER` | 4745937500 | |
| `% Privileged Utility` | `PERF_AVERAGE_BULK` | 35875675583 | 2142017948 |
| `% Processor Performance` | `PERF_AVERAGE_BULK` | 80044724120 | 669031135 |
| `% Processor Time` | `PERF_100NSEC_TIMER_INV` | 25109218750 | |
| `% Processor Utility` | `PERF_AVERAGE_BULK` | 80044725697 | 2142017679 |
| `% User Time` | `PERF_100NSEC_TIMER` | 4394687500 | |
| `C1 Transitions/sec` | `PERF_COUNTER_BULK_COUNT` | 2303708 | |
| `C2 Transitions/sec` | `PERF_COUNTER_BULK_COUNT` | 2337838 | |
| `C3 Transitions/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Clock Interrupts/sec` | `PERF_COUNTER_COUNTER` | 1571877 | |
| `DPCs Queued/sec` | `PERF_COUNTER_COUNTER` | 561134 | |
| `Idle Break Events/sec` | `PERF_COUNTER_BULK_COUNT` | 4641550 | |
| `Interrupts/sec` | `PERF_COUNTER_COUNTER` | 7795204 | |
| `Parking Status` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Processor Frequency` | `PERF_COUNTER_RAWCOUNT` | 3700 | |
Not read by the collector:
- `PERF_AVERAGE_BULK`: `Actual Frequency`
- `PERF_COUNTER_RAWCOUNT`: `% of Maximum Frequency`, `DPC Rate`, `Performance Limit Flags`, `Processor State Flags`
- `PERF_PRECISION_100NS_TIMER`: `Average Idle Time`
+103
View File
@@ -0,0 +1,103 @@
# `dfsr` collector
The collector reads three PDH objects with `pdh.CounterTypeRaw`:
`DFS Replication Connections`, `DFS Replicated Folders` and
`DFS Replication Service Volumes`. They exist only where the DFS Replication
service runs, for example on every domain controller (SYSVOL). CI does not
provision DFSR. These notes were recorded on a single Windows Server 2025 DC.
- Every counter of the three objects is `PERF_COUNTER_LARGE_RAWCOUNT`
(`NumberOfItems64`). The type does not say whether the value is cumulative,
so go by the counter help text:
- Cumulative since service start: the `... Generated`, `... Cleaned up`,
`... Received`, `File Installs ...`, `Updates Dropped`, `Database Commits`,
`Database Lookups` and `USN Journal Records Read/Accepted` counters.
- Gauges: `Staging/Conflict/Deleted Space In Use` (bytes),
`USN Journal Unread Percentage`, connection `Bytes Received Per Second`,
and `Bandwidth Savings Using DFS Replication`, which is a percentage
("a value of 20 indicates ... 20% less bandwidth"), not bytes.
- Instances: folders are `<replicated folder>-{<GUID>}`, for example
`SYSVOL Share-{DD658FCA-D7AE-487D-8E75-67481CEBE108}`; volumes are drive
letters (`C:`). A DC without replication partner has no instance of
`DFS Replication Connections`, so connection metrics are not exercised there.
- Sample from the DC (volume `C:`): `USN Journal Records Read` 1932712,
`Database Commits` 800998, `Database Lookups` 1058283,
`USN Journal Records Accepted` 0, `USN Journal Unread Percentage` 0. All
folder counters of SYSVOL were 0.
## Counter reference
Recorded on Windows Server 2025 (build 26100). `Raw` and `Base` are the first and second
values that `pdh.CounterTypeRaw` returns for the sample instance.
### `DFS Replicated Folders`
Multi-instance. Instances: `SYSVOL Share-{DD658FCA-D7AE-487D-8E75-67481CEBE108}`. Sample instance: `SYSVOL Share-{DD658FCA-D7AE-487D-8E75-67481CEBE108}`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Bandwidth Savings Using DFS Replication` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Compressed Size of Files Received` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Conflict Bytes Cleaned up` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Conflict Bytes Generated` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Conflict Files Cleaned up` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Conflict Files Generated` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Conflict Folder Cleanups Completed` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Conflict Space In Use` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Deleted Bytes Cleaned up` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Deleted Bytes Generated` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Deleted Files Cleaned up` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Deleted Files Generated` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Deleted Space In Use` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `File Installs Retried` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `File Installs Succeeded` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `RDC Bytes Received` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `RDC Compressed Size of Files Received` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `RDC Number of Files Received` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `RDC Size of Files Received` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Size of Files Received` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Staging Bytes Cleaned up` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Staging Bytes Generated` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Staging Files Cleaned up` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Staging Files Generated` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Staging Space In Use` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Total Files Received` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Updates Dropped` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
### `DFS Replication Connections`
Multi-instance. No instances on the recording host, so the table has types only.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Bandwidth Savings Using DFS Replication` | `PERF_COUNTER_LARGE_RAWCOUNT` | | |
| `Compressed Size of Files Received` | `PERF_COUNTER_LARGE_RAWCOUNT` | | |
| `RDC Bytes Received` | `PERF_COUNTER_LARGE_RAWCOUNT` | | |
| `RDC Compressed Size of Files Received` | `PERF_COUNTER_LARGE_RAWCOUNT` | | |
| `RDC Number of Files Received` | `PERF_COUNTER_LARGE_RAWCOUNT` | | |
| `RDC Size of Files Received` | `PERF_COUNTER_LARGE_RAWCOUNT` | | |
| `Size of Files Received` | `PERF_COUNTER_LARGE_RAWCOUNT` | | |
| `Total Bytes Received` | `PERF_COUNTER_LARGE_RAWCOUNT` | | |
| `Total Files Received` | `PERF_COUNTER_LARGE_RAWCOUNT` | | |
Not read by the collector:
- `PERF_COUNTER_LARGE_RAWCOUNT`: `Bytes Received Per Second`
### `DFS Replication Service Volumes`
Multi-instance. Instances: `C:`. Sample instance: `C:`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Database Commits` | `PERF_COUNTER_LARGE_RAWCOUNT` | 802516 | |
| `Database Lookups` | `PERF_COUNTER_LARGE_RAWCOUNT` | 1060537 | |
| `USN Journal Records Accepted` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `USN Journal Records Read` | `PERF_COUNTER_LARGE_RAWCOUNT` | 1936015 | |
| `USN Journal Unread Percentage` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
+64
View File
@@ -0,0 +1,64 @@
# `dhcp` collector
The server metrics come from the single-instance PDH object `DHCP Server`,
read with `pdh.CounterTypeRaw`. It exists only where the DHCP Server role is
installed. These notes were recorded on Windows Server 2025 (build 26100)
with a DHCP server that served no clients.
- Every `.../sec` counter is `PERF_COUNTER_COUNTER`. Its raw value is a
cumulative count since the DHCP service started; publish it as a counter.
- `PERF_COUNTER_RAWCOUNT` counters, by help text:
- Gauges: `Active Queue Length`, `Conflict Check Queue Length`,
`Offer Queue Length` (packets in a queue) and
`Failover: BndUpd pending in outbound queue.`
- Cumulative: `Denied due to match.`, `Denied due to nonmatch.`,
`Failover: BndUpd Dropped.` and the three
`Failover: Transitions to ... state.` counters.
- `Milliseconds per packet (Avg).` (not read) is an average in
milliseconds, not paired with a base.
- Many counter names end in a period, and some failover names in `/sec.`.
The `perfdata` tags must keep it.
- Only `Packets Received/sec` was nonzero on the recording host.
## Counter reference
Recorded on Windows Server 2025 (build 26100). `Raw` and `Base` are the first and second
values that `pdh.CounterTypeRaw` returns for the sample instance.
### `DHCP Server`
Single-instance.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Acks/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Active Queue Length` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Conflict Check Queue Length` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Declines/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Denied due to match.` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Denied due to nonmatch.` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Discovers/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Duplicates Dropped/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Failover: BndAck received/sec.` | `PERF_COUNTER_COUNTER` | 0 | |
| `Failover: BndAck sent/sec.` | `PERF_COUNTER_COUNTER` | 0 | |
| `Failover: BndUpd Dropped.` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Failover: BndUpd pending in outbound queue.` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Failover: BndUpd received/sec.` | `PERF_COUNTER_COUNTER` | 0 | |
| `Failover: BndUpd sent/sec.` | `PERF_COUNTER_COUNTER` | 0 | |
| `Failover: Transitions to COMMUNICATION-INTERRUPTED state.` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Failover: Transitions to PARTNER-DOWN state.` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Failover: Transitions to RECOVER state.` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Informs/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Nacks/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Offer Queue Length` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Offers/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Packets Expired/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Packets Received/sec` | `PERF_COUNTER_COUNTER` | 59 | |
| `Releases/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Requests/sec` | `PERF_COUNTER_COUNTER` | 0 | |
Not read by the collector:
- `PERF_COUNTER_RAWCOUNT`: `Milliseconds per packet (Avg).`
+131
View File
@@ -0,0 +1,131 @@
# `dns` collector
The collector reads the single-instance PDH object `DNS` with
`pdh.CounterTypeRaw`, plus the `MicrosoftDNS_Statistic` class
(`Error Stats` collection) through MI. Both exist only where the DNS Server
role is installed. These notes were recorded on Windows Server 2025
(build 26100) on a domain controller that hosts AD-integrated zones and has no
secondary server, so zone transfer counters stayed 0.
- The type does not tell the kind. Every `X` counter that has an `X/sec` twin
is `PERF_COUNTER_RAWCOUNT` and cumulative, and the twin
(`PERF_COUNTER_COUNTER`) has the same raw value (`Total Query Received` 830
= `Total Query Received/sec` 830, `Dynamic Update Received` 165 = its
`/sec` twin). The help text calls the plain counters "the total number of".
- `WINS Reverse Lookup Received/sec` is `PERF_COUNTER_RAWCOUNT` despite its
name.
- Gauges: the `... Memory` counters ("total ... memory used by DNS server")
and `Total Remote Inflight Queries`. The help text gives no unit for the
memory counters.
- `Total Query Received` equals `UDP Query Received` + `TCP Query Received`
(830 = 820 + 10); `Total Response Sent` likewise (825 = 815 + 10).
- `Recursive Send TimeOuts` and `Recursive TimeOut/sec` are a twin pair with
different names; the collector reads the `/sec` one.
- Eleven counters of the object have names that belong to other objects and
no help text: `% User Time`, `Async Fast Reads/sec`,
`Fast Read Not Possibles/sec`, `Fast Read Resource Misses/sec`,
`Lazy Write Flushes/sec`, `Lazy Write Pages/sec`, `Data Flushes/sec`,
`Data Flush Pages/sec`, `Level 2 TLB Fills/sec`, `Enumerations Server/sec`
and `Virtual Bytes`. `Get-Counter -ListSet DNS` also lists a counter named
`176`. All of them stayed 0; the collector ignores them (`_` fields).
## Counter reference
Recorded on Windows Server 2025 (build 26100). `Raw` and `Base` are the first and second
values that `pdh.CounterTypeRaw` returns for the sample instance.
### `DNS`
Single-instance.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `% User Time` | `PERF_COUNTER_COUNTER` | 0 | |
| `Async Fast Reads/sec` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `AXFR Request Received` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `AXFR Request Sent` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `AXFR Response Received` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `AXFR Success Received` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `AXFR Success Sent` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Caching Memory` | `PERF_COUNTER_RAWCOUNT` | 14216 | |
| `Data Flush Pages/sec` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Data Flushes/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Database Node Memory` | `PERF_COUNTER_RAWCOUNT` | 21958 | |
| `Dynamic Update NoOperation` | `PERF_COUNTER_RAWCOUNT` | 118 | |
| `Dynamic Update NoOperation/sec` | `PERF_COUNTER_COUNTER` | 118 | |
| `Dynamic Update Queued` | `PERF_COUNTER_RAWCOUNT` | 110 | |
| `Dynamic Update Received` | `PERF_COUNTER_RAWCOUNT` | 165 | |
| `Dynamic Update Received/sec` | `PERF_COUNTER_COUNTER` | 165 | |
| `Dynamic Update Rejected` | `PERF_COUNTER_RAWCOUNT` | 34 | |
| `Dynamic Update TimeOuts` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Dynamic Update Written to Database` | `PERF_COUNTER_RAWCOUNT` | 21 | |
| `Dynamic Update Written to Database/sec` | `PERF_COUNTER_COUNTER` | 21 | |
| `Enumerations Server/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Fast Read Not Possibles/sec` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Fast Read Resource Misses/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `IXFR Request Received` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `IXFR Request Sent` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `IXFR Response Received` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `IXFR Success Received` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `IXFR Success Sent` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `IXFR TCP Success Received` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `IXFR UDP Success Received` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Lazy Write Flushes/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Lazy Write Pages/sec` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Level 2 TLB Fills/sec` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Nbstat Memory` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Notify Received` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Notify Sent` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Query Dropped Bad Socket` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Query Dropped Bad Socket/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Query Dropped By Policy` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Query Dropped By Policy/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Query Dropped By Response Rate Limiting` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Query Dropped By Response Rate Limiting/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Query Dropped Send` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Query Dropped Send/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Query Dropped Total` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Query Dropped Total/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Record Flow Memory` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Recursive Queries` | `PERF_COUNTER_RAWCOUNT` | 85 | |
| `Recursive Queries/sec` | `PERF_COUNTER_COUNTER` | 85 | |
| `Recursive Query Failure` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Recursive Query Failure/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Recursive Send TimeOuts` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Recursive TimeOut/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Responses Suppressed` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Responses Suppressed/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Secure Update Failure` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Secure Update Received` | `PERF_COUNTER_RAWCOUNT` | 8 | |
| `Secure Update Received/sec` | `PERF_COUNTER_COUNTER` | 8 | |
| `TCP Message Memory` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `TCP Query Received` | `PERF_COUNTER_RAWCOUNT` | 10 | |
| `TCP Query Received/sec` | `PERF_COUNTER_COUNTER` | 10 | |
| `TCP Response Sent` | `PERF_COUNTER_RAWCOUNT` | 10 | |
| `TCP Response Sent/sec` | `PERF_COUNTER_COUNTER` | 10 | |
| `Total Query Received` | `PERF_COUNTER_RAWCOUNT` | 830 | |
| `Total Query Received/sec` | `PERF_COUNTER_COUNTER` | 830 | |
| `Total Remote Inflight Queries` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Response Sent` | `PERF_COUNTER_RAWCOUNT` | 825 | |
| `Total Response Sent/sec` | `PERF_COUNTER_COUNTER` | 825 | |
| `UDP Message Memory` | `PERF_COUNTER_RAWCOUNT` | 447529584 | |
| `UDP Query Received` | `PERF_COUNTER_RAWCOUNT` | 820 | |
| `UDP Query Received/sec` | `PERF_COUNTER_COUNTER` | 820 | |
| `UDP Response Sent` | `PERF_COUNTER_RAWCOUNT` | 815 | |
| `UDP Response Sent/sec` | `PERF_COUNTER_COUNTER` | 815 | |
| `Unmatched Responses Received` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Virtual Bytes` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `WINS Lookup Received` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `WINS Lookup Received/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `WINS Response Sent` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `WINS Response Sent/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `WINS Reverse Lookup Received` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `WINS Reverse Lookup Received/sec` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `WINS Reverse Response Sent` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `WINS Reverse Response Sent/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Zone Transfer Failure` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Zone Transfer Request Received` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Zone Transfer SOA Request Sent` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Zone Transfer Success` | `PERF_COUNTER_RAWCOUNT` | 0 | |
+110
View File
@@ -0,0 +1,110 @@
# `gpu` collector
The collector reads five PDH objects with `pdh.CounterTypeRaw`:
`GPU Engine`, `GPU Adapter Memory`, `GPU Local Adapter Memory`,
`GPU Non Local Adapter Memory` and `GPU Process Memory`. WDDM (dxgkrnl)
provides them, so they exist on any host with a WDDM display driver, including
the Microsoft Basic Render Driver on VMs without a GPU. These notes were
recorded on a Windows 11 workstation with an NVIDIA GeForce GTX 1070
(driver 32.0.15.8266).
- All counters the collector reads are `PERF_COUNTER_LARGE_RAWCOUNT`
(`NumberOfItems64`), so the raw value is the value:
- `Running Time` is cumulative engine busy time in 100 ns units. The
collector divides it by 10,000,000 for `engine_time_seconds`.
- The memory counters are gauges in bytes.
- `Utilization Percentage` is `PERF_100NSEC_TIMER` and has the same raw value
as `Running Time`; Task Manager derives the percentage from two samples.
The collector exports the counter instead, so `rate()` of
`engine_time_seconds` gives the utilization.
- Instance names encode the labels, see `parseGPUCounterInstanceString`:
- Engine: `pid_<pid>_luid_0x<high>_0x<low>_phys_<n>_eng_<n>_engtype_<type>`.
Types seen: `3D`, `Copy`, `LegacyOverlay`, `Security`, `VideoDecode`,
`VideoEncode`, `VR`. Other vendors append an index (`Compute_0`), which is
why `engtype` keeps everything after the key.
- Adapter memory: `luid_..._phys_<n>`. Local and non local adapter memory
may append `_part_<n>`, but not consistently: on the recording host the
NVIDIA adapter had a local instance without `part` and a non local
instance with `part_0`, while the second adapter had only a local
instance with `part_0`.
- Process memory: `pid_<pid>_luid_..._phys_<n>`.
- The recording host had two LUIDs: `0x00000000_0x0001120B` (the GTX 1070,
9 engines per process) and `0x00000000_0x0001241E`, which has no PnP display
device and 25 engines, all `3D`. The second one is presumably the Microsoft
Basic Render Driver (inferred, not verified).
- Engine instances are per process and engine: 510 instances across 40
processes on an ordinary desktop, 48 process memory instances. Every
process that opens a D3D device gets a full set of engine instances, so the
engine metric has high cardinality.
## Counter reference
Recorded on Windows 11 Pro (build 26300). `Raw` and `Base` are the first and
second values that `pdh.CounterTypeRaw` returns for the sample instance.
### `GPU Engine`
Multi-instance. 510 instances. Sample instance:
`pid_1064_luid_0x00000000_0x0001120B_phys_0_eng_0_engtype_3D` (`dwm`).
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Running Time` | `PERF_COUNTER_LARGE_RAWCOUNT` | 1660393259 | |
Not read by the collector:
- `PERF_100NSEC_TIMER`: `Utilization Percentage`
### `GPU Adapter Memory`
Multi-instance. Instances: `luid_0x00000000_0x0001120B_phys_0`,
`luid_0x00000000_0x0001241E_phys_0`. Sample instance:
`luid_0x00000000_0x0001120B_phys_0`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Dedicated Usage` | `PERF_COUNTER_LARGE_RAWCOUNT` | 1641607168 | |
| `Shared Usage` | `PERF_COUNTER_LARGE_RAWCOUNT` | 87773184 | |
| `Total Committed` | `PERF_COUNTER_LARGE_RAWCOUNT` | 1962553344 | |
### `GPU Local Adapter Memory`
Multi-instance. Instances: `luid_0x00000000_0x0001120B_phys_0`,
`luid_0x00000000_0x0001241E_phys_0_part_0`. Sample instance:
`luid_0x00000000_0x0001120B_phys_0`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Local Usage` | `PERF_COUNTER_LARGE_RAWCOUNT` | 903745536 | |
### `GPU Non Local Adapter Memory`
Multi-instance. Instances: `luid_0x00000000_0x0001120B_phys_0_part_0`.
Sample instance: `luid_0x00000000_0x0001120B_phys_0_part_0`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Non Local Usage` | `PERF_COUNTER_LARGE_RAWCOUNT` | 87773184 | |
### `GPU Process Memory`
Multi-instance. 48 instances. Sample instance:
`pid_1064_luid_0x00000000_0x0001120B_phys_0` (`dwm`).
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Dedicated Usage` | `PERF_COUNTER_LARGE_RAWCOUNT` | 1126207488 | |
| `Local Usage` | `PERF_COUNTER_LARGE_RAWCOUNT` | 314675200 | |
| `Non Local Usage` | `PERF_COUNTER_LARGE_RAWCOUNT` | 4931584 | |
| `Shared Usage` | `PERF_COUNTER_LARGE_RAWCOUNT` | 4931584 | |
| `Total Committed` | `PERF_COUNTER_LARGE_RAWCOUNT` | 717426688 | |
+522
View File
@@ -0,0 +1,522 @@
# `hyperv` collector
The collector reads 16 `Hyper-V ...` PDH objects with `pdh.CounterTypeRaw`
from its sub-collectors, plus HCS, WMI and `virtdisk.dll` data. The objects
exist only where the Hyper-V role is installed; CI does not provision it.
Almost all objects are multi-instance; `Hyper-V Virtual Machine Health Summary`
is single-instance. These notes were recorded on Windows Server 2025 build
26100 with one running Generation 2 VM (`ubuntu`, 6 vCPUs, 2 GiB static
memory) on a host with 12 logical processors.
- `pdh.InstancesAll` drops the `_Total` instance, so the processor objects
return `Hv LP 0`..`Hv LP 11`, `Root VP 0`..`Root VP 11` and
`ubuntu:Hv VP 0`..`ubuntu:Hv VP 5`. The host logical processor count is the
number of `Hv LP` instances (12 here).
- Hypervisor processor objects: every `%` counter and `CPU Wait Time Per
Dispatch` is `PERF_PRECISION_100NS_TIMER`. The raw value is cumulative time
in 100 ns ticks. On a logical processor `% Idle Time` + `% Total Run Time`
equals the time since boot (453 s after a 452.7 s uptime), and
`% Total Run Time` is about `% Guest Run Time` + `% Hypervisor Run Time`.
The help text of `CPU Wait Time Per Dispatch` and `I/O TLB Flush Cost` says
"average time (in nanoseconds)", but the raw value is cumulative 100 ns
ticks.
- `Hyper-V Hypervisor Root Partition` is read for the instance `Root` only.
All its non-`/sec` counters are `PERF_COUNTER_LARGE_RAWCOUNT`. Page counts
and sizes are gauges; by the help text `Skipped Timer Ticks` and
`Device Interrupt Throttle Events` count events.
- Dynamic Memory: memory counters are in MB (`Physical Memory` and
`Guest Visible Physical Memory` are 2048 for the 2 GiB VM). `Added Memory`
and `Removed Memory` are cumulative MB, `Memory Add/Remove Operations` are
cumulative counts. Pressure counters are percentages and exceed 100
(145 here). The VM instance exists even with Dynamic Memory disabled.
Instances are VM names; VMs of the Host Compute Service (WSL 2) have an
empty instance name.
- `Hyper-V DataStore`: instances are `<VM GUID> <file kind>` with the kinds
`configuration file`, `runtime file`, `worker process configuration` and
`worker process runtime state`. Every counter is
`PERF_COUNTER_LARGE_RAWCOUNT` and the help text only repeats the name. The
`... count` counters are cumulative. The `... latency microseconds`
counters are not cumulative: `Commit operation latency microseconds` of the
configuration file dropped from 6659 to 5213 while `Commit operation count`
stayed 1.
- `Hyper-V VM Vid Partition`: pages are 4 KiB. The 2 GiB VM had 526336
`Physical Pages Allocated`.
- `Hyper-V Virtual Storage Device`: instances are the disk path with `\`
replaced by `-` and `(...)` by `[...]`, for example
`C:-ProgramData-Microsoft-Windows-Virtual Hard Disks-ubuntu.vhdx`; a `\\?\`
prefix becomes `--?-` (the `.vmgs` guest state file). A DVD drive shows up
as `ISO`. Only running VMs have instances.
- `Latency`, `Lower Latency`, `Queue Length` and `Lower Queue Length` all
had the same raw value (56686): the sum of IO latencies in 100 ns ticks.
The base of `Latency` (10) equals the raw `Throughput` and
`Read Count` + `Write Count` (6 + 4).
- `Throughput` (`PERF_COUNTER_COUNTER`) counts IO transfers.
`Normalized Throughput` (`PERF_COUNTER_BULK_COUNT`) counts 8 KB IO
transfers by its help text. Both raw values are cumulative.
- `Read Count`, `Write Count` and `Error Count` are
`PERF_COUNTER_RAWCOUNT` but cumulative ("total number of ...").
- `Hyper-V Virtual Switch` and `Hyper-V Virtual Network Adapter`: all
`/sec` counters are `PERF_COUNTER_BULK_COUNT`, so the raw value is a
cumulative count. `Bytes/sec` is `Bytes Received/sec` + `Bytes Sent/sec`
and `Packets/sec` is `Packets Received/sec` + `Packets Sent/sec` in the
samples. Switch instances are the switch names (`External`, `Internal`).
VM adapter instances are `<VM>_<adapter>_<VM GUID>--<GUID>`. Host side
instances look like `Internal_<GUID>`, `Ethernet_<GUID>`,
`DrPort <GUID>_<GUID>` and
`Microsoft Hyper-V Network Adapter__DEVICE_{<GUID>}`. The collector uses
them unchanged as `adapter`.
- `Hyper-V Virtual Network Adapter Drop Reasons` has the same instances as
`Hyper-V Virtual Network Adapter`. Every counter is a cumulative
`PERF_COUNTER_LARGE_RAWCOUNT`; only `Outgoing NotReady` was non-zero (9).
- `Hyper-V Replica VM` exists but had no instance (no replication).
By the help text `Replication Latency` and `Average Replication Latency`
are in seconds, the size counters in bytes, and `Replication Count`,
`Network Bytes Sent/Recv` and `Resynchronized Bytes` are cumulative since
VMMS start.
- `Hyper-V Virtual SMB` and `Hyper-V Legacy Network Adapter` had no
instances (no SMB-backed VM storage, no legacy adapter). In Virtual SMB,
`Tree Connect Count` is `PERF_COUNTER_COUNTER` but its help text says
"the current number of Tree Connects".
- `Hyper-V Virtual Machine Health Summary` counts VMs: `Health Ok` was 1 for
the one VM.
- The `wmi_health`, `virtual_hard_disk` and host VM processor metrics do not
come from PDH, so the table below does not cover them.
## Counter reference
Recorded on Windows Server 2025 (build 26100). `Raw` and `Base` are the first and second
values that `pdh.CounterTypeRaw` returns for the sample instance.
### `Hyper-V DataStore`
Multi-instance. Instances: `2F713ADB-4A60-4959-8986-949D88D9D6AC configuration file`, `2F713ADB-4A60-4959-8986-949D88D9D6AC runtime file`, `2F713ADB-4A60-4959-8986-949D88D9D6AC worker process configuration`, `2F713ADB-4A60-4959-8986-949D88D9D6AC worker process runtime state`. Sample instance: `2F713ADB-4A60-4959-8986-949D88D9D6AC configuration file`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Cache update operation count` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Cache update operation latency microseconds` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Commit byte count` | `PERF_COUNTER_LARGE_RAWCOUNT` | 12210 | |
| `Commit byte latency microseconds` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Commit count` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Commit operation count` | `PERF_COUNTER_LARGE_RAWCOUNT` | 1 | |
| `Commit operation latency microseconds` | `PERF_COUNTER_LARGE_RAWCOUNT` | 6659 | |
| `Compact operation count` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Compact operation latency microseconds` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Current replay logSize` | `PERF_COUNTER_LARGE_RAWCOUNT` | 32768 | |
| `Data alignment` | `PERF_COUNTER_LARGE_RAWCOUNT` | 4096 | |
| `Data end` | `PERF_COUNTER_LARGE_RAWCOUNT` | 77824 | |
| `Disconnect count` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `File data size in bytes` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Fragmentation ratio` | `PERF_COUNTER_LARGE_RAWCOUNT` | 12 | |
| `Load file operation count` | `PERF_COUNTER_LARGE_RAWCOUNT` | 1 | |
| `Load file operation latency microseconds` | `PERF_COUNTER_LARGE_RAWCOUNT` | 4350 | |
| `Names size in bytes` | `PERF_COUNTER_LARGE_RAWCOUNT` | 4500 | |
| `Number of available entries inside object tables` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Number of empty entries inside object tables` | `PERF_COUNTER_LARGE_RAWCOUNT` | 218 | |
| `Number of file objects` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Number of free bytes inside key tables` | `PERF_COUNTER_LARGE_RAWCOUNT` | 6974 | |
| `Number of key tables` | `PERF_COUNTER_LARGE_RAWCOUNT` | 8 | |
| `Number of keys` | `PERF_COUNTER_LARGE_RAWCOUNT` | 361 | |
| `Number of object tables` | `PERF_COUNTER_LARGE_RAWCOUNT` | 1 | |
| `Query size operation count` | `PERF_COUNTER_LARGE_RAWCOUNT` | 208 | |
| `Query size operation latency microseconds` | `PERF_COUNTER_LARGE_RAWCOUNT` | 3 | |
| `Read from file byte count` | `PERF_COUNTER_LARGE_RAWCOUNT` | 51356 | |
| `Read from file byte latency microseconds` | `PERF_COUNTER_LARGE_RAWCOUNT` | 9 | |
| `Read from file count` | `PERF_COUNTER_LARGE_RAWCOUNT` | 236 | |
| `Read from storage byte count` | `PERF_COUNTER_LARGE_RAWCOUNT` | 18470 | |
| `Read from storage byte latency microseconds` | `PERF_COUNTER_LARGE_RAWCOUNT` | 1 | |
| `Read from storage count` | `PERF_COUNTER_LARGE_RAWCOUNT` | 490 | |
| `Reconnect latency microseconds` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Remove operation count` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Remove operation latency microseconds` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Sector size` | `PERF_COUNTER_LARGE_RAWCOUNT` | 512 | |
| `Set operation count` | `PERF_COUNTER_LARGE_RAWCOUNT` | 5 | |
| `Set operation latency microseconds` | `PERF_COUNTER_LARGE_RAWCOUNT` | 6 | |
| `Table data size in bytes` | `PERF_COUNTER_LARGE_RAWCOUNT` | 21247 | |
| `Write to file byte count` | `PERF_COUNTER_LARGE_RAWCOUNT` | 4234 | |
| `Write to file byte latency microseconds` | `PERF_COUNTER_LARGE_RAWCOUNT` | 12 | |
| `Write to file count` | `PERF_COUNTER_LARGE_RAWCOUNT` | 8 | |
| `Write to storage byte count` | `PERF_COUNTER_LARGE_RAWCOUNT` | 58 | |
| `Write to storage byte latency microseconds` | `PERF_COUNTER_LARGE_RAWCOUNT` | 6 | |
| `Write to storage count` | `PERF_COUNTER_LARGE_RAWCOUNT` | 5 | |
Not read by the collector:
- `PERF_COUNTER_LARGE_RAWCOUNT`: `File lock acquire latency microseconds`, `File lock count`, `File lock release latency microseconds`, `Get operation count`, `Get operation latency microseconds`, `Storage lock acquire latency microseconds`, `Storage lock count`, `Storage lock release latency microseconds`
### `Hyper-V Dynamic Memory Balancer`
Multi-instance. Instances: `System Balancer`. Sample instance: `System Balancer`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Available Memory` | `PERF_COUNTER_RAWCOUNT` | 4240 | |
| `Available Memory For Balancing` | `PERF_COUNTER_RAWCOUNT` | 4240 | |
| `Average Pressure` | `PERF_COUNTER_RAWCOUNT` | 145 | |
| `System Current Pressure` | `PERF_COUNTER_RAWCOUNT` | 100 | |
### `Hyper-V Dynamic Memory VM`
Multi-instance. Instances: `ubuntu`. Sample instance: `ubuntu`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Added Memory` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Average Pressure` | `PERF_COUNTER_RAWCOUNT` | 146 | |
| `Current Pressure` | `PERF_COUNTER_RAWCOUNT` | 145 | |
| `Guest Available Memory` | `PERF_COUNTER_RAWCOUNT` | 1025 | |
| `Guest Visible Physical Memory` | `PERF_COUNTER_RAWCOUNT` | 2048 | |
| `Maximum Pressure` | `PERF_COUNTER_RAWCOUNT` | 149 | |
| `Memory Add Operations` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Memory Remove Operations` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Minimum Pressure` | `PERF_COUNTER_RAWCOUNT` | 143 | |
| `Physical Memory` | `PERF_COUNTER_RAWCOUNT` | 2048 | |
| `Removed Memory` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
Not read by the collector:
- `PERF_COUNTER_RAWCOUNT`: `Smart Paging Working Set Size`
### `Hyper-V Hypervisor Logical Processor`
Multi-instance. Instances: `_Total`, `Hv LP 0`, `Hv LP 1`, `Hv LP 10`, `Hv LP 11`, `Hv LP 2`, `Hv LP 3`, `Hv LP 4`, ... (13 in total). Sample instance: `Hv LP 0`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `% Guest Run Time` | `PERF_PRECISION_100NS_TIMER` | 9270346767 | |
| `% Hypervisor Run Time` | `PERF_PRECISION_100NS_TIMER` | 1438355934 | |
| `% Idle Time` | `PERF_PRECISION_100NS_TIMER` | 23500462022 | |
| `% Total Run Time` | `PERF_PRECISION_100NS_TIMER` | 10708658352 | |
| `Context Switches/sec` | `PERF_COUNTER_BULK_COUNT` | 9299560 | |
Not read by the collector:
- `PERF_COUNTER_BULK_COUNT`: `C1 Transitions/sec`, `C2 Transitions/sec`, `C3 Transitions/sec`, `CPPC Request Context Switches/sec`, `Hardware Interrupts/sec`, `Hypervisor Branch Predictor Flushes/sec`, `Hypervisor Immediate L1 Data Cache Flushes/sec`, `Hypervisor L1 Data Cache Flushes/sec`, `Hypervisor Microarchitectural Buffer Flushes/sec`, `Inter-Processor Interrupts Sent/sec`, `Inter-Processor Interrupts/sec`, `Performance Monitoring Interrupts/sec`, `Posted Interrupt Notifications/sec`, `Scheduler Interrupts/sec`, `Timer Interrupts/sec`, `Total Interrupts/sec`
- `PERF_COUNTER_LARGE_RAWCOUNT`: `Monitor Transition Cost`, `Reserve Group Id`, `Root Vp Index`, `Running Priority`, `Scheduler Local Run List Size`
- `PERF_PRECISION_100NS_TIMER`: `% C1 Time`, `% C2 Time`, `% C3 Time`
### `Hyper-V Hypervisor Root Partition`
Multi-instance. Instances: `_Total`, `Root`. Sample instance: `Root`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `1G device pages` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `1G GPA pages` | `PERF_COUNTER_LARGE_RAWCOUNT` | 11 | |
| `2M device pages` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `2M GPA pages` | `PERF_COUNTER_LARGE_RAWCOUNT` | 2461 | |
| `4K device pages` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `4K GPA pages` | `PERF_COUNTER_LARGE_RAWCOUNT` | 51200 | |
| `Address Spaces` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Attached Devices` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Deposited Pages` | `PERF_COUNTER_LARGE_RAWCOUNT` | 29667 | |
| `Device DMA Errors` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Device Interrupt Errors` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Device Interrupt Mappings` | `PERF_COUNTER_LARGE_RAWCOUNT` | 2 | |
| `Device Interrupt Throttle Events` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `GPA Pages` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `GPA Space Modifications/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `I/O TLB Flush Cost` | `PERF_PRECISION_100NS_TIMER` | 0 | |
| `I/O TLB Flushes/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Recommended Virtual TLB Size` | `PERF_COUNTER_LARGE_RAWCOUNT` | 64 | |
| `Skipped Timer Ticks` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Virtual TLB Flush Entires/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Virtual TLB Pages` | `PERF_COUNTER_LARGE_RAWCOUNT` | 64 | |
Not read by the collector:
- `PERF_COUNTER_BULK_COUNT`: `Nested TLB Trimmed Pages/sec`, `Pages Recombined/sec`, `Pages Shattered/sec`
- `PERF_COUNTER_LARGE_RAWCOUNT`: `Nested TLB Free List Size`, `Nested TLB Size`, `Recommended Nested TLB Size`, `Virtual Processors`
- `PERF_COUNTER_LARGE_RAWCOUNT_HEX`: `CPPC Requested Performance Level`
### `Hyper-V Hypervisor Root Virtual Processor`
Multi-instance. Instances: `_Total`, `Root VP 0`, `Root VP 1`, `Root VP 10`, `Root VP 11`, `Root VP 2`, `Root VP 3`, `Root VP 4`, ... (13 in total). Sample instance: `Root VP 0`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `% Guest Run Time` | `PERF_PRECISION_100NS_TIMER` | 9150616357 | |
| `% Hypervisor Run Time` | `PERF_PRECISION_100NS_TIMER` | 1260894784 | |
| `% Remote Run Time` | `PERF_PRECISION_100NS_TIMER` | 0 | |
| `% Total Run Time` | `PERF_PRECISION_100NS_TIMER` | 10411471300 | |
| `CPU Wait Time Per Dispatch` | `PERF_PRECISION_100NS_TIMER` | 290865977 | |
Not read by the collector:
- `PERF_COUNTER_BULK_COUNT`: `Address Domain Flushes/sec`, `Address Space Evictions/sec`, `Address Space Flushes/sec`, `Address Space Switches/sec`, `APIC EOI Accesses/sec`, `APIC IPIs Sent/sec`, `APIC MMIO Accesses/sec`, `APIC Self IPIs Sent/sec`, `APIC TPR Accesses/sec`, `Bus Lock Acquisitions/sec`, `Control Register Accesses Forwarded/sec`, `Control Register Accesses/sec`, `CPPC Request Context Switches/sec`, `CPU Group Hypercalls/sec`, `CPUID Instructions Forwarded/sec`, `CPUID Instructions/sec`, `Debug Register Accesses Forwarded/sec`, `Debug Register Accesses/sec`, `Deposit Hypercalls/sec`, `Device Domain Hypercalls/sec`, `Emulated Instructions Forwarded/sec`, `Emulated Instructions/sec`, `Event Log Hypercalls/sec`, `Extended Hypercall Intercept Messages/sec`, `Extended Hypercalls/sec`, `External Interrupts Forwarded/sec`, `External Interrupts/sec`, `Flush Physical Address List Hypercalls/sec`, `Flush Physical Address Space Hypercalls/sec`, `GIF Instruction Emulation Intercepts/sec`, `Global GVA Range Flushes/sec`, `Global I/O TLB Flushes/sec`, `GPA Space Hypercalls/sec`, `Guest Page Table Maps/sec`, `Hardware Interrupts/sec`, `HLT Instructions Forwarded/sec`, `HLT Instructions/sec`, `Hypercalls Forwarded/sec`, `Hypercalls/sec`, `InvEpt All Context Emulation Intercepts/sec`, `InvEpt Single Context Emulation Intercepts/sec`, `InvVpid All Context Emulation Intercepts/sec`, `InvVpid Single Address Emulation Intercepts/sec`, `InvVpid Single Context Emulation Intercepts/sec`, `IO Instructions Forwarded/sec`, `IO Instructions/sec`, `IO Intercept Messages/sec`, `IOMMU Hypercalls/sec`, `Large Page TLB Fills/sec`, `Local Flushed GVA Ranges/sec`, `Local I/O TLB Flushes/sec`, `Logical Processor Dispatches/sec`, `Logical Processor Hypercalls/sec`, `Logical Processor Migrations/sec`, `Long Spin Wait Hypercalls/sec`, `MBEC Nested Page Table Switches/sec`, `Memory Intercept Messages/sec`, `MSR Accesses Forwarded/sec`, `MSR Accesses/sec`, `MWAIT Instructions Forwarded/sec`, `MWAIT Instructions/sec`, `Nested Page Fault Intercepts/sec`, `Nested SLAT Hard Page Faults/sec`, `Nested SLAT Soft Page Faults/sec`, `Nested TLB Page Table Evictions/sec`, `Nested TLB Page Table Reclamations/sec`, `Nested VM Entries/sec`, `Other Hypercalls/sec`, `Other Intercepts Forwarded/sec`, `Other Intercepts/sec`, `Other Messages/sec`, `Other Reflected Guest Exceptions/sec`, `Page Fault Intercepts Forwarded/sec`, `Page Fault Intercepts/sec`, `Page Invalidations Forwarded/sec`, `Page Invalidations/sec`, `Page Scans/sec`, `Page Table Allocations/sec`, `Page Table Evictions/sec`, `Page Table Reclamations/sec`, `Page Table Resets/sec`, `Page Table Validations/sec`, `Page Table Write Intercepts/sec`, `Pending Interrupts Forwarded/sec`, `Pending Interrupts/sec`, `Performance Monitoring Interrupts/sec`, `Performance Monitoring IPT MSR Accesses/sec`, `Performance Monitoring LBR MSR Accesses/sec`, `Performance Monitoring vPMU MSR Accesses/sec`, `Posted Interrupt Notifications/sec`, `Posted Interrupt Scans/sec`, `RDPMC Instructions/sec`, `Reflected Guest Page Faults/sec`, `Small Page TLB Fills/sec`, `SVM Hypercalls/sec`, `Synthetic Interrupt Hypercalls/sec`, `Synthetic Interrupts/sec`, `Total Intercepts/sec`, `Total Messages/sec`, `Total Virtualization Instructions Emulated/sec`, `Virtual Interrupt Hypercalls/sec`, `Virtual Interrupts/sec`, `Virtual MMU Hypercalls/sec`, `Virtual Processor Hypercalls/sec`, `VMCLEAR Emulation Intercepts/sec`, `VMLOAD Emulation Intercepts/sec`, `VMPTRLD Emulation Intercepts/sec`, `VMPTRST Emulation Intercepts/sec`, `VMREAD Emulation Intercepts/sec`, `VMSAVE Emulation Intercepts/sec`, `VMWRITE Emulation Intercepts/sec`, `VMXOFF Emulation Intercepts/sec`, `VMXON Emulation Intercepts/sec`, `VSM Hypercalls/sec`, `VTL1 Dispatches/sec`, `VTL2 Dispatches/sec`
- `PERF_COUNTER_LARGE_RAWCOUNT`: `Scheduling Priority`
- `PERF_PRECISION_100NS_TIMER`: `% Guest-Relative Utilization`, `% Total Core Run Time`, `% VTL1 Run Time`, `% VTL2 Run Time`, `Control Register Accesses Cost`, `Control Register Accesses Forwarding Cost`, `CPU Contention Time Per Dispatch`, `CPU Wake Up Time Per Dispatch`, `CPUID Instructions Cost`, `CPUID Instructions Forwarding Cost`, `Debug Register Accesses Cost`, `Debug Register Accesses Forwarding Cost`, `Emulated Instructions Cost`, `Emulated Instructions Forwarding Cost`, `External Interrupts Cost`, `GIF Instruction Emulation Cost`, `Global I/O TLB Flush Cost`, `HLT Instructions Cost`, `HLT Instructions Forwarding Cost`, `Hypercalls Cost`, `Hypercalls Forwarding Cost`, `InvEpt All Context Instruction Emulation Cost`, `InvEpt Single Context Instruction Emulation Cost`, `InvVpid All Context Instruction Emulation Cost`, `InvVpid Single Address Instruction Emulation Cost`, `InvVpid Single Context Instruction Emulation Cost`, `IO Instructions Cost`, `IO Instructions Forwarding Cost`, `Local I/O TLB Flush Cost`, `MSR Accesses Cost`, `MSR Accesses Forwarding Cost`, `MWAIT Instructions Cost`, `MWAIT Instructions Forwarding Cost`, `Nested Page Fault Intercepts Cost`, `Nested SLAT Hard Page Faults Cost`, `Nested SLAT Soft Page Faults Cost`, `Nested VM Entries Cost`, `Other Intercepts Cost`, `Other Intercepts Forwarding Cost`, `Page Fault Intercepts Cost`, `Page Fault Intercepts Forwarding Cost`, `Page Invalidations Cost`, `Page Invalidations Forwarding Cost`, `Pending Interrupts Cost`, `Pending Interrupts Forwarding Cost`, `RDPMC Instructions Cost`, `Total Intercepts Cost`, `Total Virtualization Instructions Emulation Cost`, `VMCLEAR Instruction Emulation Cost`, `VMLOAD Instruction Emulation Cost`, `VMPTRLD Instruction Emulation Cost`, `VMPTRST Instruction Emulation Cost`, `VMREAD Instruction Emulation Cost`, `VMSAVE Instruction Emulation Cost`, `VMWRITE Instruction Emulation Cost`, `VMXOFF Instruction Emulation Cost`, `VMXON Instruction Emulation Cost`, `VTL1 Average Run Time`, `VTL2 Average Run Time`
### `Hyper-V Hypervisor Virtual Processor`
Multi-instance. Instances: `_Total`, `ubuntu:Hv VP 0`, `ubuntu:Hv VP 1`, `ubuntu:Hv VP 2`, `ubuntu:Hv VP 3`, `ubuntu:Hv VP 4`, `ubuntu:Hv VP 5`. Sample instance: `ubuntu:Hv VP 0`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `% Guest Run Time` | `PERF_PRECISION_100NS_TIMER` | 2198066669 | |
| `% Hypervisor Run Time` | `PERF_PRECISION_100NS_TIMER` | 982721208 | |
| `% Remote Run Time` | `PERF_PRECISION_100NS_TIMER` | 0 | |
| `% Total Run Time` | `PERF_PRECISION_100NS_TIMER` | 3180787877 | |
| `CPU Wait Time Per Dispatch` | `PERF_PRECISION_100NS_TIMER` | 1217187193 | |
Not read by the collector:
- `PERF_COUNTER_BULK_COUNT`: `Address Domain Flushes/sec`, `Address Space Evictions/sec`, `Address Space Flushes/sec`, `Address Space Switches/sec`, `APIC EOI Accesses/sec`, `APIC IPIs Sent/sec`, `APIC MMIO Accesses/sec`, `APIC Self IPIs Sent/sec`, `APIC TPR Accesses/sec`, `Bus Lock Acquisitions/sec`, `Control Register Accesses Forwarded/sec`, `Control Register Accesses/sec`, `CPPC Request Context Switches/sec`, `CPU Group Hypercalls/sec`, `CPUID Instructions Forwarded/sec`, `CPUID Instructions/sec`, `Debug Register Accesses Forwarded/sec`, `Debug Register Accesses/sec`, `Deposit Hypercalls/sec`, `Device Domain Hypercalls/sec`, `Emulated Instructions Forwarded/sec`, `Emulated Instructions/sec`, `Event Log Hypercalls/sec`, `Extended Hypercall Intercept Messages/sec`, `Extended Hypercalls/sec`, `External Interrupts Forwarded/sec`, `External Interrupts/sec`, `Flush Physical Address List Hypercalls/sec`, `Flush Physical Address Space Hypercalls/sec`, `GIF Instruction Emulation Intercepts/sec`, `Global GVA Range Flushes/sec`, `Global I/O TLB Flushes/sec`, `GPA Space Hypercalls/sec`, `Guest Page Table Maps/sec`, `Hardware Interrupts/sec`, `HLT Instructions Forwarded/sec`, `HLT Instructions/sec`, `Hypercalls Forwarded/sec`, `Hypercalls/sec`, `InvEpt All Context Emulation Intercepts/sec`, `InvEpt Single Context Emulation Intercepts/sec`, `InvVpid All Context Emulation Intercepts/sec`, `InvVpid Single Address Emulation Intercepts/sec`, `InvVpid Single Context Emulation Intercepts/sec`, `IO Instructions Forwarded/sec`, `IO Instructions/sec`, `IO Intercept Messages/sec`, `IOMMU Hypercalls/sec`, `Large Page TLB Fills/sec`, `Local Flushed GVA Ranges/sec`, `Local I/O TLB Flushes/sec`, `Logical Processor Dispatches/sec`, `Logical Processor Hypercalls/sec`, `Logical Processor Migrations/sec`, `Long Spin Wait Hypercalls/sec`, `MBEC Nested Page Table Switches/sec`, `Memory Intercept Messages/sec`, `MSR Accesses Forwarded/sec`, `MSR Accesses/sec`, `MWAIT Instructions Forwarded/sec`, `MWAIT Instructions/sec`, `Nested Page Fault Intercepts/sec`, `Nested SLAT Hard Page Faults/sec`, `Nested SLAT Soft Page Faults/sec`, `Nested TLB Page Table Evictions/sec`, `Nested TLB Page Table Reclamations/sec`, `Nested VM Entries/sec`, `Other Hypercalls/sec`, `Other Intercepts Forwarded/sec`, `Other Intercepts/sec`, `Other Messages/sec`, `Other Reflected Guest Exceptions/sec`, `Page Fault Intercepts Forwarded/sec`, `Page Fault Intercepts/sec`, `Page Invalidations Forwarded/sec`, `Page Invalidations/sec`, `Page Scans/sec`, `Page Table Allocations/sec`, `Page Table Evictions/sec`, `Page Table Reclamations/sec`, `Page Table Resets/sec`, `Page Table Validations/sec`, `Page Table Write Intercepts/sec`, `Pending Interrupts Forwarded/sec`, `Pending Interrupts/sec`, `Performance Monitoring Interrupts/sec`, `Performance Monitoring IPT MSR Accesses/sec`, `Performance Monitoring LBR MSR Accesses/sec`, `Performance Monitoring vPMU MSR Accesses/sec`, `Posted Interrupt Notifications/sec`, `Posted Interrupt Scans/sec`, `RDPMC Instructions/sec`, `Reflected Guest Page Faults/sec`, `Small Page TLB Fills/sec`, `SVM Hypercalls/sec`, `Synthetic Interrupt Hypercalls/sec`, `Synthetic Interrupts/sec`, `Total Intercepts/sec`, `Total Messages/sec`, `Total Virtualization Instructions Emulated/sec`, `Virtual Interrupt Hypercalls/sec`, `Virtual Interrupts/sec`, `Virtual MMU Hypercalls/sec`, `Virtual Processor Hypercalls/sec`, `VMCLEAR Emulation Intercepts/sec`, `VMLOAD Emulation Intercepts/sec`, `VMPTRLD Emulation Intercepts/sec`, `VMPTRST Emulation Intercepts/sec`, `VMREAD Emulation Intercepts/sec`, `VMSAVE Emulation Intercepts/sec`, `VMWRITE Emulation Intercepts/sec`, `VMXOFF Emulation Intercepts/sec`, `VMXON Emulation Intercepts/sec`, `VSM Hypercalls/sec`, `VTL1 Dispatches/sec`, `VTL2 Dispatches/sec`
- `PERF_COUNTER_LARGE_RAWCOUNT`: `Scheduling Priority`
- `PERF_PRECISION_100NS_TIMER`: `% Guest-Relative Utilization`, `% Total Core Run Time`, `% VTL1 Run Time`, `% VTL2 Run Time`, `Control Register Accesses Cost`, `Control Register Accesses Forwarding Cost`, `CPU Contention Time Per Dispatch`, `CPU Wake Up Time Per Dispatch`, `CPUID Instructions Cost`, `CPUID Instructions Forwarding Cost`, `Debug Register Accesses Cost`, `Debug Register Accesses Forwarding Cost`, `Emulated Instructions Cost`, `Emulated Instructions Forwarding Cost`, `External Interrupts Cost`, `GIF Instruction Emulation Cost`, `Global I/O TLB Flush Cost`, `HLT Instructions Cost`, `HLT Instructions Forwarding Cost`, `Hypercalls Cost`, `Hypercalls Forwarding Cost`, `InvEpt All Context Instruction Emulation Cost`, `InvEpt Single Context Instruction Emulation Cost`, `InvVpid All Context Instruction Emulation Cost`, `InvVpid Single Address Instruction Emulation Cost`, `InvVpid Single Context Instruction Emulation Cost`, `IO Instructions Cost`, `IO Instructions Forwarding Cost`, `Local I/O TLB Flush Cost`, `MSR Accesses Cost`, `MSR Accesses Forwarding Cost`, `MWAIT Instructions Cost`, `MWAIT Instructions Forwarding Cost`, `Nested Page Fault Intercepts Cost`, `Nested SLAT Hard Page Faults Cost`, `Nested SLAT Soft Page Faults Cost`, `Nested VM Entries Cost`, `Other Intercepts Cost`, `Other Intercepts Forwarding Cost`, `Page Fault Intercepts Cost`, `Page Fault Intercepts Forwarding Cost`, `Page Invalidations Cost`, `Page Invalidations Forwarding Cost`, `Pending Interrupts Cost`, `Pending Interrupts Forwarding Cost`, `RDPMC Instructions Cost`, `Total Intercepts Cost`, `Total Virtualization Instructions Emulation Cost`, `VMCLEAR Instruction Emulation Cost`, `VMLOAD Instruction Emulation Cost`, `VMPTRLD Instruction Emulation Cost`, `VMPTRST Instruction Emulation Cost`, `VMREAD Instruction Emulation Cost`, `VMSAVE Instruction Emulation Cost`, `VMWRITE Instruction Emulation Cost`, `VMXOFF Instruction Emulation Cost`, `VMXON Instruction Emulation Cost`, `VTL1 Average Run Time`, `VTL2 Average Run Time`
### `Hyper-V Legacy Network Adapter`
Multi-instance. No instances on the recording host, so the table has types only.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Bytes Dropped` | `PERF_COUNTER_LARGE_RAWCOUNT` | | |
| `Bytes Received/sec` | `PERF_COUNTER_BULK_COUNT` | | |
| `Bytes Sent/sec` | `PERF_COUNTER_BULK_COUNT` | | |
| `Frames Dropped` | `PERF_COUNTER_LARGE_RAWCOUNT` | | |
| `Frames Received/sec` | `PERF_COUNTER_BULK_COUNT` | | |
| `Frames Sent/sec` | `PERF_COUNTER_BULK_COUNT` | | |
### `Hyper-V Replica VM`
Multi-instance. No instances on the recording host, so the table has types only.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Average Replication Latency` | `PERF_COUNTER_LARGE_RAWCOUNT` | | |
| `Average Replication Size` | `PERF_COUNTER_LARGE_RAWCOUNT` | | |
| `Compression Efficiency` | `PERF_COUNTER_LARGE_RAWCOUNT` | | |
| `Last Replication Size` | `PERF_COUNTER_LARGE_RAWCOUNT` | | |
| `Network Bytes Recv` | `PERF_COUNTER_LARGE_RAWCOUNT` | | |
| `Network Bytes Sent` | `PERF_COUNTER_LARGE_RAWCOUNT` | | |
| `Replication Count` | `PERF_COUNTER_RAWCOUNT` | | |
| `Replication Latency` | `PERF_COUNTER_LARGE_RAWCOUNT` | | |
| `Resynchronized Bytes` | `PERF_COUNTER_LARGE_RAWCOUNT` | | |
### `Hyper-V Virtual Machine Health Summary`
Single-instance.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Health Critical` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Health Ok` | `PERF_COUNTER_RAWCOUNT` | 1 | |
### `Hyper-V Virtual Network Adapter`
Multi-instance. Instances: `DrPort 700EF58F-56E7-4982-9DC4-4BCD5FC2C56F_B3548C76-D68D-4199-B45F-5C9DE21BD03C`, `Ethernet_700EF58F-56E7-4982-9DC4-4BCD5FC2C56E`, `Internal_FDECB3D5-AD64-4B6A-B96C-6AFD1616F33A`, `Microsoft Hyper-V Network Adapter__DEVICE_{9FE7CB58-7B03-4A3F-814F-9CD52BF15705}`, `ubuntu_Network Adapter_2F713ADB-4A60-4959-8986-949D88D9D6AC--F28DA7DA-095C-4544-B094-97085584E17D`. Sample instance: `DrPort 700EF58F-56E7-4982-9DC4-4BCD5FC2C56F_B3548C76-D68D-4199-B45F-5C9DE21BD03C`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Broadcast Packets Received/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Broadcast Packets Sent/sec` | `PERF_COUNTER_BULK_COUNT` | 18 | |
| `Bytes Received/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Bytes Sent/sec` | `PERF_COUNTER_BULK_COUNT` | 1708 | |
| `Bytes/sec` | `PERF_COUNTER_BULK_COUNT` | 1708 | |
| `Directed Packets Received/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Directed Packets Sent/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Dropped Packets Incoming/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Dropped Packets Outgoing/sec` | `PERF_COUNTER_BULK_COUNT` | 21 | |
| `Extensions Dropped Packets Incoming/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Extensions Dropped Packets Outgoing/sec` | `PERF_COUNTER_BULK_COUNT` | 30 | |
| `Multicast Packets Received/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Multicast Packets Sent/sec` | `PERF_COUNTER_BULK_COUNT` | 12 | |
| `Packets Received/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Packets Sent/sec` | `PERF_COUNTER_BULK_COUNT` | 30 | |
| `Packets/sec` | `PERF_COUNTER_BULK_COUNT` | 30 | |
Not read by the collector:
- `PERF_COUNTER_BULK_COUNT`: `IPsec offload Bytes Receive/sec`, `IPsec offload Bytes Sent/sec`, `Packets Failed Software IP Rx CSO/sec`, `Packets Failed Software Rx CSO Parsing/sec`, `Packets Failed Software TCP Rx CSO/sec`, `Packets Failed Software UDP Rx CSO/sec`, `Packets Passed Software IP Rx CSO/sec`, `Packets Passed Software TCP Rx CSO/sec`, `Packets Passed Software UDP Rx CSO/sec`, `Packets With Software IP Tx CSO/sec`, `Packets With Software TCP Tx CSO/sec`, `Packets With Software UDP Tx CSO/sec`
- `PERF_COUNTER_LARGE_RAWCOUNT`: `Packets Failed Software IP Rx CSO`, `Packets Failed Software TCP Rx CSO`, `Packets Failed Software UDP Rx CSO`, `RSC Coalesce Events`, `RSC Coalesced Bytes`, `RSC Coalesced Event Bucket 1 (0To1)`, `RSC Coalesced Event Bucket 2 (2To3)`, `RSC Coalesced Event Bucket 3 (4To7)`, `RSC Coalesced Event Bucket 4 (8To15)`, `RSC Coalesced Event Bucket 5 (16To31)`, `RSC Coalesced Event Bucket 6 (32To63)`, `RSC Coalesced Packet Bucket 1 (0To1)`, `RSC Coalesced Packet Bucket 2 (2To3)`, `RSC Coalesced Packet Bucket 3 (4To7)`, `RSC Coalesced Packet Bucket 4 (8To15)`, `RSC Coalesced Packet Bucket 5 (16To31)`, `RSC Coalesced Packet Bucket 6 (32To63)`, `RSC Coalesced Packets`, `RSC Packets Processed`
### `Hyper-V Virtual Network Adapter Drop Reasons`
Multi-instance. Instances: `DrPort 700EF58F-56E7-4982-9DC4-4BCD5FC2C56F_B3548C76-D68D-4199-B45F-5C9DE21BD03C`, `Ethernet_700EF58F-56E7-4982-9DC4-4BCD5FC2C56E`, `Internal_FDECB3D5-AD64-4B6A-B96C-6AFD1616F33A`, `Microsoft Hyper-V Network Adapter__DEVICE_{9FE7CB58-7B03-4A3F-814F-9CD52BF15705}`, `ubuntu_Network Adapter_2F713ADB-4A60-4959-8986-949D88D9D6AC--F28DA7DA-095C-4544-B094-97085584E17D`. Sample instance: `DrPort 700EF58F-56E7-4982-9DC4-4BCD5FC2C56F_B3548C76-D68D-4199-B45F-5C9DE21BD03C`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Incoming BridgeReserved` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Incoming Busy` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Incoming DhcpGuard` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Incoming Disconnected` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Incoming FailedPvlanSetting` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Incoming FailedSecurityPolicy` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Incoming Filtered` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Incoming FilteredVLAN` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Incoming InvalidConfig` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Incoming InvalidData` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Incoming InvalidPacket` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Incoming Ipsec` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Incoming MacSpoofing` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Incoming MTUMismatch` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Incoming NativeFwdingReq` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Incoming NotAccepted` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Incoming NotReady` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Incoming Qos` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Incoming RequiredExtensionMissing` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Incoming Resources` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Incoming RouterGuard` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Incoming UnauthorizedMAC` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Incoming UnauthorizedVLAN` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Incoming Unknown` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Incoming VirtualSubnetId` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Outgoing BridgeReserved` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Outgoing Busy` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Outgoing DhcpGuard` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Outgoing Disconnected` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Outgoing FailedPvlanSetting` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Outgoing FailedSecurityPolicy` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Outgoing Filtered` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Outgoing FilteredVLAN` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Outgoing InvalidConfig` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Outgoing InvalidData` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Outgoing InvalidPacket` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Outgoing Ipsec` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Outgoing MacSpoofing` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Outgoing MTUMismatch` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Outgoing NativeFwdingReq` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Outgoing NotAccepted` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Outgoing NotReady` | `PERF_COUNTER_LARGE_RAWCOUNT` | 9 | |
| `Outgoing Qos` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Outgoing RequiredExtensionMissing` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Outgoing Resources` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Outgoing RouterGuard` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Outgoing UnauthorizedMAC` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Outgoing UnauthorizedVLAN` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Outgoing Unknown` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Outgoing VirtualSubnetId` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
Not read by the collector:
- `PERF_COUNTER_LARGE_RAWCOUNT`: `Incoming FailedDestinationListUpdate`, `Incoming FailedPacketFilter`, `Incoming FilteredIsolationUntagged`, `Incoming InjectedIcmp`, `Incoming InvalidDestMac`, `Incoming InvalidFirstNBTooSmall`, `Incoming InvalidPDQueue`, `Incoming InvalidSourceMac`, `Incoming InvalidVlanFormat`, `Incoming LowPowerPacketFilter`, `Incoming NicDisabled`, `Incoming StormLimit`, `Incoming SwitchDataFlowDisabled`, `Outgoing FailedDestinationListUpdate`, `Outgoing FailedPacketFilter`, `Outgoing FilteredIsolationUntagged`, `Outgoing InjectedIcmp`, `Outgoing InvalidDestMac`, `Outgoing InvalidFirstNBTooSmall`, `Outgoing InvalidPDQueue`, `Outgoing InvalidSourceMac`, `Outgoing InvalidVlanFormat`, `Outgoing LowPowerPacketFilter`, `Outgoing NicDisabled`, `Outgoing StormLimit`, `Outgoing SwitchDataFlowDisabled`
### `Hyper-V Virtual SMB`
Multi-instance. No instances on the recording host, so the table has types only.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Current Open File Count` | `PERF_COUNTER_RAWCOUNT` | | |
| `Current Pending Requests` | `PERF_COUNTER_RAWCOUNT` | | |
| `Direct-Mapped Pages` | `PERF_COUNTER_LARGE_RAWCOUNT` | | |
| `Direct-Mapped Sections` | `PERF_COUNTER_RAWCOUNT` | | |
| `Flush Requests/sec` | `PERF_COUNTER_COUNTER` | | |
| `Read Bytes/sec` | `PERF_COUNTER_BULK_COUNT` | | |
| `Read Bytes/sec (RDMA)` | `PERF_COUNTER_BULK_COUNT` | | |
| `Read Requests/sec` | `PERF_COUNTER_COUNTER` | | |
| `Read Requests/sec (RDMA)` | `PERF_COUNTER_COUNTER` | | |
| `Received Bytes/sec` | `PERF_COUNTER_BULK_COUNT` | | |
| `Requests/sec` | `PERF_COUNTER_COUNTER` | | |
| `Sent Bytes/sec` | `PERF_COUNTER_BULK_COUNT` | | |
| `Tree Connect Count` | `PERF_COUNTER_COUNTER` | | |
| `Write Bytes/sec` | `PERF_COUNTER_BULK_COUNT` | | |
| `Write Bytes/sec (RDMA)` | `PERF_COUNTER_BULK_COUNT` | | |
| `Write Requests/sec` | `PERF_COUNTER_COUNTER` | | |
| `Write Requests/sec (RDMA)` | `PERF_COUNTER_COUNTER` | | |
Not read by the collector:
- `PERF_AVERAGE_TIMER`: `Avg. sec/Request`
### `Hyper-V Virtual Storage Device`
Multi-instance. Instances: `--?-C:-ProgramData-Microsoft-Windows-Hyper-V-Virtual Machines-2F713ADB-4A60-4959-8986-949D88D9D6AC.vmgs`, `C:-ProgramData-Microsoft-Windows-Virtual Hard Disks-ubuntu.vhdx`, `ISO`. Sample instance: `--?-C:-ProgramData-Microsoft-Windows-Hyper-V-Virtual Machines-2F713ADB-4A60-4959-8986-949D88D9D6AC.vmgs`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Error Count` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Io Quota Replenishment Rate` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Latency` | `PERF_AVERAGE_TIMER` | 56686 | 10 |
| `Lower Latency` | `PERF_AVERAGE_TIMER` | 56686 | 10 |
| `Lower Queue Length` | `PERF_COUNTER_LARGE_QUEUELEN_TYPE` | 56686 | |
| `Normalized Throughput` | `PERF_COUNTER_BULK_COUNT` | 95 | |
| `Queue Length` | `PERF_COUNTER_LARGE_QUEUELEN_TYPE` | 56686 | |
| `Read Bytes/sec` | `PERF_COUNTER_BULK_COUNT` | 252416 | |
| `Read Count` | `PERF_COUNTER_RAWCOUNT` | 6 | |
| `Throughput` | `PERF_COUNTER_COUNTER` | 10 | |
| `Write Bytes/sec` | `PERF_COUNTER_BULK_COUNT` | 468992 | |
| `Write Count` | `PERF_COUNTER_RAWCOUNT` | 4 | |
Not read by the collector:
- `PERF_COUNTER_BULK_COUNT`: `Byte Quota Replenishment Rate`
- `PERF_COUNTER_COUNTER`: `Read Operations/Sec`, `Write Operations/Sec`
- `PERF_COUNTER_LARGE_RAWCOUNT`: `Maximum Bandwidth`, `Maximum IO Rate`, `Minimum IO Rate`
- `PERF_COUNTER_RAWCOUNT`: `Adapter Open Channel Count`, `Flush Count`, `Maximum Adapter Worker Count`
### `Hyper-V Virtual Switch`
Multi-instance. Instances: `External`, `Internal`. Sample instance: `External`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Broadcast Packets Received/sec` | `PERF_COUNTER_BULK_COUNT` | 208 | |
| `Broadcast Packets Sent/sec` | `PERF_COUNTER_BULK_COUNT` | 190 | |
| `Bytes Received/sec` | `PERF_COUNTER_BULK_COUNT` | 6209983540 | |
| `Bytes Sent/sec` | `PERF_COUNTER_BULK_COUNT` | 6209976573 | |
| `Bytes/sec` | `PERF_COUNTER_BULK_COUNT` | 12419960113 | |
| `Directed Packets Received/sec` | `PERF_COUNTER_BULK_COUNT` | 1035024 | |
| `Directed Packets Sent/sec` | `PERF_COUNTER_BULK_COUNT` | 1035024 | |
| `Dropped Packets Incoming/sec` | `PERF_COUNTER_BULK_COUNT` | 23 | |
| `Dropped Packets Outgoing/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Extensions Dropped Packets Incoming/sec` | `PERF_COUNTER_BULK_COUNT` | 96 | |
| `Extensions Dropped Packets Outgoing/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Learned Mac Addresses` | `PERF_COUNTER_LARGE_RAWCOUNT` | 3 | |
| `Multicast Packets Received/sec` | `PERF_COUNTER_BULK_COUNT` | 438 | |
| `Multicast Packets Sent/sec` | `PERF_COUNTER_BULK_COUNT` | 360 | |
| `Number of Send Channel Moves/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Number of VMQ Moves/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Packets Flooded` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Packets Received/sec` | `PERF_COUNTER_BULK_COUNT` | 1035670 | |
| `Packets Sent/sec` | `PERF_COUNTER_BULK_COUNT` | 1035574 | |
| `Packets/sec` | `PERF_COUNTER_BULK_COUNT` | 2071244 | |
| `Purged Mac Addresses` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
Not read by the collector:
- `PERF_COUNTER_BULK_COUNT`: `Learned Mac Addresses/sec`, `Packets Flooded/sec`, `Purged Mac Addresses/sec`
- `PERF_COUNTER_LARGE_RAWCOUNT`: `RSC Coalesce Events`, `RSC Coalesced Bytes`, `RSC Coalesced Event Bucket 1 (0To1)`, `RSC Coalesced Event Bucket 2 (2To3)`, `RSC Coalesced Event Bucket 3 (4To7)`, `RSC Coalesced Event Bucket 4 (8To15)`, `RSC Coalesced Event Bucket 5 (16To31)`, `RSC Coalesced Event Bucket 6 (32To63)`, `RSC Coalesced Packet Bucket 1 (0To1)`, `RSC Coalesced Packet Bucket 2 (2To3)`, `RSC Coalesced Packet Bucket 3 (4To7)`, `RSC Coalesced Packet Bucket 4 (8To15)`, `RSC Coalesced Packet Bucket 5 (16To31)`, `RSC Coalesced Packet Bucket 6 (32To63)`, `RSC Coalesced Packets`, `RSC Packets Processed`
### `Hyper-V VM Vid Partition`
Multi-instance. Instances: `_Total`, `ubuntu`. Sample instance: `ubuntu`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Physical Pages Allocated` | `PERF_COUNTER_LARGE_RAWCOUNT` | 526336 | |
| `Preferred NUMA Node Index` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Remote Physical Pages` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
+251
View File
@@ -25,3 +25,254 @@
- To find which Windows call a collector blocks in, capture a Go execution
trace with `--debug.enabled` and `/debug/pprof/trace?seconds=600`. Collectors
waiting in a Windows call use no CPU, so a CPU profile does not show it.
## PDH objects and raw values
The collector reads five PDH objects with `pdh.CounterTypeRaw`: `Web Service`,
`Web Service Cache` (single instance), `APP_POOL_WAS`, `W3SVC_W3WP` and
`HTTP Service Request Queues`. They need the IIS role (W3SVC and WAS). These
notes were recorded on Windows Server 2025 (build 26100) with only
`Default Web Site` and `DefaultAppPool`.
- Almost every counter is `PERF_COUNTER_RAWCOUNT` or
`PERF_COUNTER_LARGE_RAWCOUNT`. The help text decides the kind:
- Cumulative "since service startup": every `Total ...` counter of
`Web Service`, the `... Hits`, `... Misses`, `... Flushes` and `Total ...`
counters of `Web Service Cache` and `W3SVC_W3WP`, and
`Total HTTP Requests Served`.
- Gauges: every `Current ...` counter, `Active Requests`,
`Active Threads Count`, `WebSocket Active Requests`,
`Active Flushed Entries`, `Output Cache Current ...` and `Total Threads`
(threads available in the worker process, 12 here).
- `Maximum Threads Count` is the thread pool limit (256 here), not a peak.
`Maximum File Cache Memory Usage` is the peak of
`Current File Cache Memory Usage`.
- Units: `... Memory Usage` and `Total Bytes ...` are bytes. `Service Uptime`
is seconds (334 about 5 minutes after boot).
- The `X/sec` twins are not read. Their raw value equals the `Total X`
counter (`Get Requests/sec` = `Total Get Requests`,
`Bytes Sent/sec` = `Total Bytes Sent`, `Requests / Sec` =
`Total HTTP Requests Served`).
- `% 401/403/404/500 HTTP Response Sent` of `W3SVC_W3WP` are
`PERF_SAMPLE_FRACTION`. Raw is the cumulative count of that status, base is
the cumulative request count (after one 200 and one 404 request: 404 raw 1,
base 2).
- `APP_POOL_WAS` uptimes and `Time Since Last Worker Process Failure` are
`PERF_ELAPSED_TIME`. Raw is the start time as a FILETIME (100 ns since 1601),
the second value is the current time, and `internal/pdh` returns the elapsed
seconds (298 about 5 minutes after boot). Without any failure,
`Time Since Last Worker Process Failure` equals the pool uptime.
`Current Application Pool State` is an enum (1 to 7, 3 = Running).
- `HTTP Service Request Queues`: `ArrivalRate` is `PERF_COUNTER_BULK_COUNT`, a
cumulative count of arrived requests. `RejectedRequests` is cumulative
("Total number of requests rejected"). `MaxQueueItemAge` is
`PERF_ELAPSED_TIME`; on an empty queue the raw value is `math.MaxInt64`, PDH
formats it as 0, and the raw calculation gives a large negative number.
- Instances: `Web Service` and `APP_POOL_WAS` have a `_Total` instance, which
the collector exports like a site or pool named `_Total`. `W3SVC_W3WP`
instances are `<PID>_<app pool>` (`10932_DefaultAppPool`) plus `_Total`, and
exist only while a worker process runs; send one HTTP request to start one.
`HTTP Service Request Queues` instances are app pool names plus about 40
`---<n>` queues, which the collector skips. Recycled instances get a `#<n>`
suffix that the collector strips.
## Counter reference
Recorded on Windows Server 2025 (build 26100). `Raw` and `Base` are the first and second
values that `pdh.CounterTypeRaw` returns for the sample instance.
### `APP_POOL_WAS`
Multi-instance. Instances: `_Total`, `DefaultAppPool`. Sample instance: `DefaultAppPool`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Current Application Pool State` | `PERF_COUNTER_RAWCOUNT` | 3 | |
| `Current Application Pool Uptime` | `PERF_ELAPSED_TIME` | 134365471332535000 | |
| `Current Worker Processes` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Maximum Worker Processes` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Recent Worker Process Failures` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Time Since Last Worker Process Failure` | `PERF_ELAPSED_TIME` | 134365471332535000 | |
| `Total Application Pool Recycles` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Application Pool Uptime` | `PERF_ELAPSED_TIME` | 134365471332535000 | |
| `Total Worker Process Failures` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Worker Process Ping Failures` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Worker Process Shutdown Failures` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Worker Process Startup Failures` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Worker Processes Created` | `PERF_COUNTER_RAWCOUNT` | 0 | |
### `HTTP Service Request Queues`
Multi-instance. Instances: `---1`, `---10`, `---11`, `---12`, `---13`, `---14`, `---15`, `---16`, ... (40 in total). Sample instance: `---1`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `ArrivalRate` | `PERF_COUNTER_BULK_COUNT` | 67 | |
| `CurrentQueueSize` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `MaxQueueItemAge` | `PERF_ELAPSED_TIME` | 9223372036854780000 | |
| `RejectedRequests` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
Not read by the collector:
- `PERF_COUNTER_BULK_COUNT`: `CacheHitRate`, `RejectionRate`
- `PERF_COUNTER_RAWCOUNT`: `PendingReceiveRequests`
### `W3SVC_W3WP`
Multi-instance. No instances on the recording host, so the table has types only.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `% 401 HTTP Response Sent` | `PERF_SAMPLE_FRACTION` | | |
| `% 403 HTTP Response Sent` | `PERF_SAMPLE_FRACTION` | | |
| `% 404 HTTP Response Sent` | `PERF_SAMPLE_FRACTION` | | |
| `% 500 HTTP Response Sent` | `PERF_SAMPLE_FRACTION` | | |
| `Active Flushed Entries` | `PERF_COUNTER_RAWCOUNT` | | |
| `Active Requests` | `PERF_COUNTER_RAWCOUNT` | | |
| `Active Threads Count` | `PERF_COUNTER_RAWCOUNT` | | |
| `Current File Cache Memory Usage` | `PERF_COUNTER_LARGE_RAWCOUNT` | | |
| `Current Files Cached` | `PERF_COUNTER_RAWCOUNT` | | |
| `Current Metadata Cached` | `PERF_COUNTER_RAWCOUNT` | | |
| `Current URIs Cached` | `PERF_COUNTER_RAWCOUNT` | | |
| `File Cache Flushes` | `PERF_COUNTER_RAWCOUNT` | | |
| `File Cache Hits` | `PERF_COUNTER_RAWCOUNT` | | |
| `File Cache Misses` | `PERF_COUNTER_RAWCOUNT` | | |
| `Maximum File Cache Memory Usage` | `PERF_COUNTER_LARGE_RAWCOUNT` | | |
| `Maximum Threads Count` | `PERF_COUNTER_RAWCOUNT` | | |
| `Metadata Cache Flushes` | `PERF_COUNTER_RAWCOUNT` | | |
| `Metadata Cache Hits` | `PERF_COUNTER_RAWCOUNT` | | |
| `Metadata Cache Misses` | `PERF_COUNTER_RAWCOUNT` | | |
| `Output Cache Current Flushed Items` | `PERF_COUNTER_RAWCOUNT` | | |
| `Output Cache Current Items` | `PERF_COUNTER_RAWCOUNT` | | |
| `Output Cache Current Memory Usage` | `PERF_COUNTER_LARGE_RAWCOUNT` | | |
| `Output Cache Total Flushed Items` | `PERF_COUNTER_RAWCOUNT` | | |
| `Output Cache Total Flushes` | `PERF_COUNTER_RAWCOUNT` | | |
| `Output Cache Total Hits` | `PERF_COUNTER_RAWCOUNT` | | |
| `Output Cache Total Misses` | `PERF_COUNTER_RAWCOUNT` | | |
| `Total Files Cached` | `PERF_COUNTER_RAWCOUNT` | | |
| `Total Flushed Files` | `PERF_COUNTER_RAWCOUNT` | | |
| `Total Flushed Metadata` | `PERF_COUNTER_RAWCOUNT` | | |
| `Total Flushed URIs` | `PERF_COUNTER_RAWCOUNT` | | |
| `Total HTTP Requests Served` | `PERF_COUNTER_RAWCOUNT` | | |
| `Total Metadata Cached` | `PERF_COUNTER_RAWCOUNT` | | |
| `Total URIs Cached` | `PERF_COUNTER_RAWCOUNT` | | |
| `URI Cache Flushes` | `PERF_COUNTER_RAWCOUNT` | | |
| `URI Cache Hits` | `PERF_COUNTER_RAWCOUNT` | | |
| `URI Cache Misses` | `PERF_COUNTER_RAWCOUNT` | | |
| `WebSocket Active Requests` | `PERF_COUNTER_RAWCOUNT` | | |
| `WebSocket Connection Attempts / Sec` | `PERF_COUNTER_COUNTER` | | |
| `WebSocket Connections Accepted / Sec` | `PERF_COUNTER_COUNTER` | | |
| `WebSocket Connections Rejected / Sec` | `PERF_COUNTER_COUNTER` | | |
Not read by the collector:
- `PERF_COUNTER_COUNTER`: `File Cache Hits / sec`, `File Cache Misses / sec`, `Metadata Cache Hits / sec`, `Metadata Cache Misses / sec`, `Output Cache Hits / sec`, `Output Cache Misses / sec`, `Requests / Sec`, `Uri Cache Hits / sec`, `Uri Cache Misses / sec`
- `PERF_COUNTER_RAWCOUNT`: `Total Threads`
### `Web Service`
Multi-instance. Instances: `_Total`, `Default Web Site`. Sample instance: `Default Web Site`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Current Anonymous Users` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Current Blocked Async I/O Requests` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Current CGI Requests` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Current Connections` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Current ISAPI Extension Requests` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Current NonAnonymous Users` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Service Uptime` | `PERF_COUNTER_RAWCOUNT` | 3399 | |
| `Total Anonymous Users` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Blocked Async I/O Requests` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Bytes Received` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Total Bytes Sent` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Total CGI Requests` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Connection Attempts (all instances)` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Copy Requests` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Delete Requests` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Files Received` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Files Sent` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Get Requests` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Head Requests` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total ISAPI Extension Requests` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Lock Requests` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Locked Errors` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Logon Attempts` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Mkcol Requests` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Move Requests` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total NonAnonymous Users` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Not Found Errors` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Options Requests` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Other Request Methods` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Post Requests` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Propfind Requests` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Proppatch Requests` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Put Requests` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Rejected Async I/O Requests` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Search Requests` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Trace Requests` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Unlock Requests` | `PERF_COUNTER_RAWCOUNT` | 0 | |
Not read by the collector:
- `PERF_COUNTER_BULK_COUNT`: `Bytes Received/sec`, `Bytes Sent/sec`, `Bytes Total/sec`
- `PERF_COUNTER_COUNTER`: `Anonymous Users/sec`, `CGI Requests/sec`, `Connection Attempts/sec`, `Copy Requests/sec`, `Delete Requests/sec`, `Files Received/sec`, `Files Sent/sec`, `Files/sec`, `Get Requests/sec`, `Head Requests/sec`, `ISAPI Extension Requests/sec`, `Lock Requests/sec`, `Locked Errors/sec`, `Logon Attempts/sec`, `Mkcol Requests/sec`, `Move Requests/sec`, `NonAnonymous Users/sec`, `Not Found Errors/sec`, `Options Requests/sec`, `Other Request Methods/sec`, `Post Requests/sec`, `Propfind Requests/sec`, `Proppatch Requests/sec`, `Put Requests/sec`, `Search Requests/sec`, `Total Method Requests/sec`, `Trace Requests/sec`, `Unlock Requests/sec`
- `PERF_COUNTER_LARGE_RAWCOUNT`: `Total Bytes Transferred`
- `PERF_COUNTER_RAWCOUNT`: `Current blocked bandwidth bytes.`, `Current CAL count for authenticated users`, `Current CAL count for SSL connections`, `Maximum Anonymous Users`, `Maximum CAL count for authenticated users`, `Maximum CAL count for SSL connections`, `Maximum CGI Requests`, `Maximum Connections`, `Maximum ISAPI Extension Requests`, `Maximum NonAnonymous Users`, `Measured Async I/O Bandwidth Usage`, `Total Allowed Async I/O Requests`, `Total blocked bandwidth bytes.`, `Total count of failed CAL requests for authenticated users`, `Total count of failed CAL requests for SSL connections`, `Total Files Transferred`, `Total Method Requests`
### `Web Service Cache`
Single-instance.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Active Flushed Entries` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Current File Cache Memory Usage` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Current Files Cached` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Current Metadata Cached` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Current URIs Cached` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `File Cache Flushes` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `File Cache Hits` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `File Cache Misses` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Kernel: Current URIs Cached` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Kernel: Total Flushed URIs` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Kernel: Total URIs Cached` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Kernel: URI Cache Flushes` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Kernel: URI Cache Hits` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Kernel: URI Cache Misses` | `PERF_COUNTER_RAWCOUNT` | 85 | |
| `Maximum File Cache Memory Usage` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Metadata Cache Flushes` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Metadata Cache Hits` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Metadata Cache Misses` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Output Cache Current Flushed Items` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Output Cache Current Items` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Output Cache Current Memory Usage` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Output Cache Total Flushed Items` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Output Cache Total Flushes` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Output Cache Total Hits` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Output Cache Total Misses` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Files Cached` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Flushed Files` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Flushed Metadata` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Flushed URIs` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total Metadata Cached` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Total URIs Cached` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `URI Cache Flushes` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `URI Cache Hits` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `URI Cache Misses` | `PERF_COUNTER_RAWCOUNT` | 0 | |
Not read by the collector:
- `PERF_COUNTER_COUNTER`: `Kernel: Uri Cache Hits/sec`
- `PERF_RAW_FRACTION`: `File Cache Hits %`, `Kernel: URI Cache Hits %`, `Metadata Cache Hits %`, `URI Cache Hits %`
- `PERF_SAMPLE_FRACTION`: `Output Cache Current Hits %`
+72
View File
@@ -0,0 +1,72 @@
# `logical_disk` collector
The collector reads the `LogicalDisk` PDH object with `pdh.CounterTypeRaw`.
The object exists on every Windows host; no role is needed. It is
multi-instance. These notes were recorded on a Windows Server 2025
(build 26100) Hyper-V guest.
- Instances are drive letters (`C:`), `HarddiskVolumeN` for volumes without a
drive letter (here `HarddiskVolume1` and `HarddiskVolume4`) and the
aggregate `_Total`. `internal/pdh` drops `_Total` because the collector
asks for `pdh.InstancesAll`. The other instances pass through the volume
include and exclude regular expressions, and the instance name is the `volume` label.
- `% Free Space` is `PERF_RAW_FRACTION`. Its raw value equals
`Free Megabytes` (49907) and its base is the volume size in megabytes
(129254). The collector reads the base (`,secondvalue`) as the size in MB.
Both values are in units of 1,048,576 bytes per the help text.
- The time counters share one raw value. `% Disk Read Time`,
`Avg. Disk Read Queue Length` and the first value of `Avg. Disk sec/Read`
were all 9858832; the write counters were all 11319205, and
`Avg. Disk sec/Transfer` (21178037) is their sum. The raw value is the
cumulative busy time in 100 ns ticks. `internal/pdh` converts the
`PERF_PRECISION_100NS_TIMER` counters to seconds. The queue length and
`PERF_AVERAGE_TIMER` values arrive in ticks and need the 1e-7 factor; the
counter time base is 10 MHz here.
- `Avg. Disk sec/Read`, `/Write` and `/Transfer` are `PERF_AVERAGE_TIMER`.
Their base is the operation count and equals `Disk Reads/sec` (3073),
`Disk Writes/sec` (1698) and their sum (4771).
- `% Idle Time` is a cumulative 100 ns timer as well, not a percentage.
On `C:` it was 115960642 ticks, about 11.6 seconds.
- `Disk Read Bytes/sec` and `Disk Write Bytes/sec` (`PERF_COUNTER_BULK_COUNT`)
and the `PERF_COUNTER_COUNTER` rates are cumulative counts since boot.
- `Current Disk Queue Length` is an instantaneous snapshot (gauge) and was 0.
- `Free Megabytes` is a gauge. The collector code notes that Windows caches
it; the volume is queried directly when possible.
## Counter reference
Recorded on Windows Server 2025 (build 26100). `Raw` and `Base` are the first and second
values that `pdh.CounterTypeRaw` returns for the sample instance.
### `LogicalDisk`
Multi-instance. Instances: `_Total`, `C:`, `HarddiskVolume1`, `HarddiskVolume4`. Sample instance: `C:`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `% Disk Read Time` | `PERF_PRECISION_100NS_TIMER` | 9858832 | |
| `% Disk Write Time` | `PERF_PRECISION_100NS_TIMER` | 11319205 | |
| `% Free Space` | `PERF_RAW_FRACTION` | 49907 | 129254 |
| `% Idle Time` | `PERF_PRECISION_100NS_TIMER` | 115960642 | |
| `Avg. Disk Read Queue Length` | `PERF_COUNTER_100NS_QUEUELEN_TYPE` | 9858832 | |
| `Avg. Disk sec/Read` | `PERF_AVERAGE_TIMER` | 9858832 | 3073 |
| `Avg. Disk sec/Transfer` | `PERF_AVERAGE_TIMER` | 21178037 | 4771 |
| `Avg. Disk sec/Write` | `PERF_AVERAGE_TIMER` | 11319205 | 1698 |
| `Avg. Disk Write Queue Length` | `PERF_COUNTER_100NS_QUEUELEN_TYPE` | 11319205 | |
| `Current Disk Queue Length` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Disk Read Bytes/sec` | `PERF_COUNTER_BULK_COUNT` | 131518976 | |
| `Disk Reads/sec` | `PERF_COUNTER_COUNTER` | 3073 | |
| `Disk Write Bytes/sec` | `PERF_COUNTER_BULK_COUNT` | 139952640 | |
| `Disk Writes/sec` | `PERF_COUNTER_COUNTER` | 1698 | |
| `Free Megabytes` | `PERF_COUNTER_RAWCOUNT` | 49907 | |
| `Split IO/Sec` | `PERF_COUNTER_COUNTER` | 134 | |
Not read by the collector:
- `PERF_AVERAGE_BULK`: `Avg. Disk Bytes/Read`, `Avg. Disk Bytes/Transfer`, `Avg. Disk Bytes/Write`
- `PERF_COUNTER_100NS_QUEUELEN_TYPE`: `Avg. Disk Queue Length`
- `PERF_COUNTER_BULK_COUNT`: `Disk Bytes/sec`
- `PERF_COUNTER_COUNTER`: `Disk Transfers/sec`
- `PERF_PRECISION_100NS_TIMER`: `% Disk Time`
+82
View File
@@ -0,0 +1,82 @@
# `memory` collector
The collector reads the single-instance PDH object `Memory` with
`pdh.CounterTypeRaw`. The object exists on every Windows host, so no role is
needed. It also calls `GlobalMemoryStatusEx` for the physical and virtual
totals, which do not come from PDH. These notes were recorded on Windows
Server 2025 (build 26100).
- Every `PERF_COUNTER_LARGE_RAWCOUNT` counter of this object is a gauge in
bytes, except `Available KBytes` and `Available MBytes`.
`Cache Bytes Peak` is the highest cache size since boot. In the sample,
`Available Bytes` equals `Available KBytes` times 1024, and
`Available MBytes` is the truncated value.
- `Available Bytes` equals the sum of `Free & Zero Page List Bytes` and the
three `Standby Cache ... Bytes` counters (exact in the sample).
`Cache Bytes` and `System Cache Resident Bytes` are the same value; the help
text says they are equivalent.
- Every `/sec` counter is `PERF_COUNTER_COUNTER`; its raw value is a count
since boot. `Pages/sec` equals `Pages Input/sec` plus `Pages Output/sec`
(exact in the sample) and counts pages. `Page Reads/sec` and
`Page Writes/sec` count disk operations, regardless of how many pages each
operation moved.
- `Long-Term Average Standby Cache Lifetime (s)` is a gauge in seconds.
- `Pool Paged Allocs` and `Pool Nonpaged Allocs` are `PERF_COUNTER_RAWCOUNT`.
The help text calls them the number of allocation calls; both were 0 on this
host, so their behavior could not be checked.
- `System Code Total Bytes` (8192) was smaller than
`System Code Resident Bytes` in the sample, although the help text calls the
resident value a component of the total. `Standby Cache Core Bytes` was 0.
## Counter reference
Recorded on Windows Server 2025 (build 26100). `Raw` and `Base` are the first and second
values that `pdh.CounterTypeRaw` returns for the sample instance.
### `Memory`
Single-instance.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Available Bytes` | `PERF_COUNTER_LARGE_RAWCOUNT` | 6625095680 | |
| `Available KBytes` | `PERF_COUNTER_LARGE_RAWCOUNT` | 6469820 | |
| `Available MBytes` | `PERF_COUNTER_LARGE_RAWCOUNT` | 6318 | |
| `Cache Bytes` | `PERF_COUNTER_LARGE_RAWCOUNT` | 401428480 | |
| `Cache Bytes Peak` | `PERF_COUNTER_LARGE_RAWCOUNT` | 558510080 | |
| `Cache Faults/sec` | `PERF_COUNTER_COUNTER` | 13400536 | |
| `Commit Limit` | `PERF_COUNTER_LARGE_RAWCOUNT` | 19728846848 | |
| `Committed Bytes` | `PERF_COUNTER_LARGE_RAWCOUNT` | 11770671104 | |
| `Demand Zero Faults/sec` | `PERF_COUNTER_COUNTER` | 49162751 | |
| `Free & Zero Page List Bytes` | `PERF_COUNTER_LARGE_RAWCOUNT` | 602169344 | |
| `Long-Term Average Standby Cache Lifetime (s)` | `PERF_COUNTER_RAWCOUNT` | 547 | |
| `Modified Page List Bytes` | `PERF_COUNTER_LARGE_RAWCOUNT` | 23617536 | |
| `Page Faults/sec` | `PERF_COUNTER_COUNTER` | 130811351 | |
| `Page Reads/sec` | `PERF_COUNTER_COUNTER` | 1012866 | |
| `Page Writes/sec` | `PERF_COUNTER_COUNTER` | 8667 | |
| `Pages Input/sec` | `PERF_COUNTER_COUNTER` | 8156926 | |
| `Pages Output/sec` | `PERF_COUNTER_COUNTER` | 244196 | |
| `Pages/sec` | `PERF_COUNTER_COUNTER` | 8401122 | |
| `Pool Nonpaged Allocs` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Pool Nonpaged Bytes` | `PERF_COUNTER_LARGE_RAWCOUNT` | 523558912 | |
| `Pool Paged Allocs` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Pool Paged Bytes` | `PERF_COUNTER_LARGE_RAWCOUNT` | 697995264 | |
| `Pool Paged Resident Bytes` | `PERF_COUNTER_LARGE_RAWCOUNT` | 673656832 | |
| `Standby Cache Core Bytes` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Standby Cache Normal Priority Bytes` | `PERF_COUNTER_LARGE_RAWCOUNT` | 5178191872 | |
| `Standby Cache Reserve Bytes` | `PERF_COUNTER_LARGE_RAWCOUNT` | 844734464 | |
| `System Cache Resident Bytes` | `PERF_COUNTER_LARGE_RAWCOUNT` | 401428480 | |
| `System Code Resident Bytes` | `PERF_COUNTER_LARGE_RAWCOUNT` | 11939840 | |
| `System Code Total Bytes` | `PERF_COUNTER_LARGE_RAWCOUNT` | 8192 | |
| `System Driver Resident Bytes` | `PERF_COUNTER_LARGE_RAWCOUNT` | 60264448 | |
| `System Driver Total Bytes` | `PERF_COUNTER_LARGE_RAWCOUNT` | 27291648 | |
| `Transition Faults/sec` | `PERF_COUNTER_COUNTER` | 63418925 | |
| `Transition Pages RePurposed/sec` | `PERF_COUNTER_COUNTER` | 10022193 | |
| `Write Copies/sec` | `PERF_COUNTER_COUNTER` | 1722840 | |
Not read by the collector:
- `PERF_COUNTER_RAWCOUNT`: `Free System Page Table Entries`
- `PERF_RAW_FRACTION`: `% Committed Bytes In Use`
+36
View File
@@ -0,0 +1,36 @@
# `msmq` collector
The collector reads the PDH object `MSMQ Queue` with `pdh.CounterTypeRaw`. The
object exists only where the Message Queuing feature (MSMQ service) is
installed. It is multi-instance. These notes were recorded on Windows Server
2025 (build 26100) with no application queues.
- All four counters are `PERF_COUNTER_LARGE_RAWCOUNT` and are gauges: the help
text says they count messages or bytes that "currently reside" in the queue.
`Bytes ...` counters are bytes.
- Instances: `Computer Queues` plus one instance per queue, named
`<computer>\private$\<queue>` in lower case. A fresh install already has the
internal queues `server2025\private$\admin_queue$` and
`server2025\private$\order_queue$`. The collector uses the instance name
unchanged as the `name` label.
- For `Computer Queues`, `Messages/Bytes in Queue` is the dead-letter queue
and `Messages/Bytes in Journal Queue` is the computer journal.
- All values were 0 on the recording host.
## Counter reference
Recorded on Windows Server 2025 (build 26100). `Raw` and `Base` are the first and second
values that `pdh.CounterTypeRaw` returns for the sample instance.
### `MSMQ Queue`
Multi-instance. Instances: `Computer Queues`, `server2025\private$\admin_queue$`, `server2025\private$\order_queue$`. Sample instance: `Computer Queues`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Bytes in Journal Queue` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Bytes in Queue` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Messages in Journal Queue` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Messages in Queue` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
+443
View File
@@ -0,0 +1,443 @@
# `mssql` collector
The collector reads the SQL Server performance objects (`Access Methods`,
`Buffer Manager`, `Databases`, `Locks`, `Wait Statistics` and others) with
`pdh.CounterTypeRaw`, one PDH collector per SQL Server instance. It needs a
SQL Server Database Engine; CI does not provision one. These notes were
recorded on Windows Server 2025 (build 26100) with SQL Server 2022 Developer
Edition (`PatchLevel` 16.0.1000.6), named instance `NONDEFAULT`.
- Instance discovery: each value name under
`HKLM\Software\Microsoft\Microsoft SQL Server\Instance Names\SQL` is an
instance; its data (here `MSSQL16.NONDEFAULT`) names the `Setup` key with
`PatchLevel` and `Edition`. The `mssql_instance` label is the part after
the first dot (`NONDEFAULT`).
- Object names: the value name `MSSQLSERVER` (default instance) gives
`SQLServer:<object>`; every other instance gives `MSSQL$<name>:<object>`,
for example `MSSQL$NONDEFAULT:Buffer Manager`. The tables below write
`MSSQL$<instance>`.
- The Windows Internal Database on this host publishes
`MSSQL$MICROSOFT##WID:<object>` objects, but it is not listed under
`Instance Names\SQL`, so the collector does not read it.
- `pdh` drops `_Total` because the collector does not request it. On a host
without Always On availability groups, `Availability Replica` and
`Database Replica` have only `_Total`, so they emit no series.
- `Active parallel redo threads` is read through a second `Databases`
collector that exists only for SQL Server 2019 (major version 15) and later.
- Instance labels: `Databases` instances are database names, including
`mssqlsystemresource`, `model_msdb` and `model_replicatedmaster`. `Locks`
instances are lock resource types (`Key`, `RID`, `Page`, `Object`, ...),
15 including `_Total`. `SQL Errors` instances are error classes
(`User Errors`, `Info Errors`, `Kill Connection Errors`,
`DB Offline Errors`); `_Total` equalled their sum (38 = 34 + 4).
- `Wait Statistics` is unusual: every counter is a wait class and every
instance is a statistic, `Average wait time (ms)`,
`Cumulative wait time (ms) per second`, `Waits in progress` and
`Waits started per second`. All counters are
`PERF_COUNTER_LARGE_RAWCOUNT`, so the meaning comes from the instance name.
All values stayed 0 over 10 seconds on this idle instance.
- Every `.../sec` counter, and several counters without `/sec` (for example
`Mars Deadlocks`, the `SOAP ...` and `Lob...Count` counters,
`Log Flush Wait Time`, `Group Commit Time`, `Transaction Delay`,
`Database Flow Control Delay`), is `PERF_COUNTER_BULK_COUNT`: a cumulative
count since the instance started.
- `PERF_COUNTER_LARGE_RAWCOUNT` counters that are cumulative by their help
text: `Log Truncations`, `Log Growths` and `Log Shrinks` ("Total number of
..."). Sizes, queues and "active"/"current" counts (`Active Transactions`,
`Processes blocked`, `Snapshot Transactions`, `Version Store unit count`,
...) are gauges. The help text of `Version Store unit creation` and
`unit truncation` does not say which; both were 2 and 0.
- Units from the help text:
- KB: every `(KB)` counter, `Bulk Copy Throughput/sec`,
`Version Generation/Cleanup rate (KB/s)`, and in `Database Replica` the
`Recovery Queue`, `Log Send Queue`, `Total Log requiring undo`,
`Log remaining for undo` and `Redo Bytes Remaining` counters.
- Bytes: `Log Bytes Flushed/sec`, `Log Pool Total Active Log Size`,
`Log Pool Total Shared Pool Size`, `Log Bytes Compressed/sec` and
`Log Bytes Decompressed/sec`.
- Milliseconds: `Log Flush Wait Time`, `Log Flush Write Time (ms)`,
`Lock Wait Time (ms)`, `Average Wait Time (ms)`, `Transaction Delay`,
`Flow Control Time (ms/sec)`.
- Microseconds: `Readahead time/sec`, `Group Commit Time/sec` (Databases),
`Group Commit Time` and `Database Flow Control Delay` (Database Replica),
`XTP Controller DLC Latency/Fetch` and `XTP Controller DLC Peak Latency`.
- Seconds: `Page life expectancy`, `Extension page unreferenced time`,
`Longest Transaction Running Time`.
- Pages (8 KB): `Database pages`, `Target pages`, `Extension ... pages`.
- `Integral Controller Slope` and `External benefit of memory` are scaled
by 10 billion.
- Fractions and averages: the base is a separate counter in PDH
(`Buffer cache hit ratio base`, `Worktables From Cache Base`,
`Log Cache Hit Ratio Base`, `Average Wait Time Base`,
`Update conflict ratio base`, `XTP Controller DLC Latency Base`) and
`pdh.CounterTypeRaw` returns it as `,secondvalue`.
- `Locks` `Average Wait Time (ms)` is `PERF_AVERAGE_BULK`: the raw value is
cumulative lock wait milliseconds and equalled `Lock Wait Time (ms)`
(499); the base is the cumulative number of waits (3).
- `Buffer cache hit ratio` (`PERF_LARGE_RAW_FRACTION`) had equal value and
base, and both grew from 56 to 175 within 10 seconds while
`Page lookups/sec` grew by 247. They are not the lookup counter and not a
fixed sample.
- The dump below and the 10 second check above were taken at different
times. The counters had reset in between (`Page lookups/sec` fell from
92847 to 11432), so raw values differ.
## Counter reference
Recorded on Windows Server 2025 (build 26100). `Raw` and `Base` are the first and second
values that `pdh.CounterTypeRaw` returns for the sample instance.
### `MSSQL$<instance>:Access Methods`
Single-instance.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `AU cleanup batches/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `AU cleanups/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `By-reference Lob Create Count` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `By-reference Lob Use Count` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Count Lob Readahead` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Count Pull In Row` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Count Push Off Row` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Deferred dropped AUs` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Deferred Dropped rowsets` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Dropped rowset cleanups/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Dropped rowsets skipped/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Extent Deallocations/sec` | `PERF_COUNTER_BULK_COUNT` | 2 | |
| `Extents Allocated/sec` | `PERF_COUNTER_BULK_COUNT` | 8 | |
| `Failed AU cleanup batches/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Failed leaf page cookie` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Failed tree page cookie` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Forwarded Records/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `FreeSpace Page Fetches/sec` | `PERF_COUNTER_BULK_COUNT` | 7 | |
| `FreeSpace Scans/sec` | `PERF_COUNTER_BULK_COUNT` | 7 | |
| `Full Scans/sec` | `PERF_COUNTER_BULK_COUNT` | 254 | |
| `Index Searches/sec` | `PERF_COUNTER_BULK_COUNT` | 44003 | |
| `InSysXact waits/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `LobHandle Create Count` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `LobHandle Destroy Count` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `LobSS Provider Create Count` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `LobSS Provider Destroy Count` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `LobSS Provider Truncation Count` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Mixed page allocations/sec` | `PERF_COUNTER_BULK_COUNT` | 6 | |
| `Page compression attempts/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Page Deallocations/sec` | `PERF_COUNTER_BULK_COUNT` | 4 | |
| `Page Splits/sec` | `PERF_COUNTER_BULK_COUNT` | 9 | |
| `Pages Allocated/sec` | `PERF_COUNTER_BULK_COUNT` | 14 | |
| `Pages compressed/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Probe Scans/sec` | `PERF_COUNTER_BULK_COUNT` | 15454 | |
| `Range Scans/sec` | `PERF_COUNTER_BULK_COUNT` | 27655 | |
| `Scan Point Revalidations/sec` | `PERF_COUNTER_BULK_COUNT` | 3 | |
| `Skipped Ghosted Records/sec` | `PERF_COUNTER_BULK_COUNT` | 7 | |
| `Table Lock Escalations/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Used leaf page cookie` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Used tree page cookie` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Workfiles Created/sec` | `PERF_COUNTER_BULK_COUNT` | 32 | |
| `Worktables Created/sec` | `PERF_COUNTER_BULK_COUNT` | 21 | |
| `Worktables From Cache Ratio` | `PERF_LARGE_RAW_FRACTION` | 0 | 0 |
### `MSSQL$<instance>:Availability Replica`
Multi-instance. Instances: `_Total`. Sample instance: `_Total`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Bytes Received from Replica/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Bytes Sent to Replica/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Bytes Sent to Transport/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Flow Control Time (ms/sec)` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Flow Control/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Receives from Replica/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Resent Messages/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Sends to Replica/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Sends to Transport/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
### `MSSQL$<instance>:Buffer Manager`
Single-instance.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Background writer pages/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Buffer cache hit ratio` | `PERF_LARGE_RAW_FRACTION` | 56 | 56 |
| `Checkpoint pages/sec` | `PERF_COUNTER_BULK_COUNT` | 3 | |
| `Database pages` | `PERF_COUNTER_LARGE_RAWCOUNT` | 2838 | |
| `Extension allocated pages` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Extension free pages` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Extension in use as percentage` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Extension outstanding IO counter` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Extension page evictions/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Extension page reads/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Extension page unreferenced time` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Extension page writes/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Free list stalls/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Integral Controller Slope` | `PERF_COUNTER_LARGE_RAWCOUNT` | 10 | |
| `Lazy writes/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Page life expectancy` | `PERF_COUNTER_LARGE_RAWCOUNT` | 3273 | |
| `Page lookups/sec` | `PERF_COUNTER_BULK_COUNT` | 92847 | |
| `Page reads/sec` | `PERF_COUNTER_BULK_COUNT` | 2840 | |
| `Page writes/sec` | `PERF_COUNTER_BULK_COUNT` | 15 | |
| `Readahead pages/sec` | `PERF_COUNTER_BULK_COUNT` | 128 | |
| `Readahead time/sec` | `PERF_COUNTER_BULK_COUNT` | 872 | |
| `Target pages` | `PERF_COUNTER_LARGE_RAWCOUNT` | 32751616 | |
Not read by the collector:
- `PERF_LARGE_RAW_FRACTION`: `RBPEX cache hit ratio`
### `MSSQL$<instance>:Database Replica`
Multi-instance. Instances: `_Total`. Sample instance: `_Total`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Database Flow Control Delay` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Database Flow Controls/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `File Bytes Received/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Group Commit Time` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Group Commits/Sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Log Apply Pending Queue` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Log Apply Ready Queue` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Log Bytes Compressed/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Log Bytes Decompressed/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Log Bytes Received/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Log Compression Cache hits/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Log Compression Cache misses/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Log Compressions/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Log Decompressions/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Log remaining for undo` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Log Send Queue` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Mirrored Write Transactions/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Recovery Queue` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Redo blocked/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Redo Bytes Remaining` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Redone Bytes/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Redones/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Total Log requiring undo` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Transaction Delay` | `PERF_COUNTER_BULK_COUNT` | 0 | |
### `MSSQL$<instance>:Databases`
Multi-instance. Instances: `_Total`, `master`, `model`, `model_msdb`, `model_replicatedmaster`, `msdb`, `mssqlsystemresource`, `tempdb`. Sample instance: `master`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Active parallel redo threads` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Active Transactions` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Backup/Restore Throughput/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Bulk Copy Rows/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Bulk Copy Throughput/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Commit table entries` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Data File(s) Size (KB)` | `PERF_COUNTER_LARGE_RAWCOUNT` | 4096 | |
| `DBCC Logical Scan Bytes/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Group Commit Time/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Log Bytes Flushed/sec` | `PERF_COUNTER_BULK_COUNT` | 204800 | |
| `Log Cache Hit Ratio` | `PERF_LARGE_RAW_FRACTION` | 0 | 0 |
| `Log Cache Reads/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Log File(s) Size (KB)` | `PERF_COUNTER_LARGE_RAWCOUNT` | 1272 | |
| `Log File(s) Used Size (KB)` | `PERF_COUNTER_LARGE_RAWCOUNT` | 664 | |
| `Log Flush Wait Time` | `PERF_COUNTER_BULK_COUNT` | 1 | |
| `Log Flush Waits/sec` | `PERF_COUNTER_BULK_COUNT` | 23 | |
| `Log Flush Write Time (ms)` | `PERF_COUNTER_BULK_COUNT` | 1 | |
| `Log Flushes/sec` | `PERF_COUNTER_BULK_COUNT` | 23 | |
| `Log Growths` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Log Pool Cache Misses/sec` | `PERF_COUNTER_BULK_COUNT` | 3 | |
| `Log Pool Disk Reads/sec` | `PERF_COUNTER_BULK_COUNT` | 2 | |
| `Log Pool Hash Deletes/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Log Pool Hash Inserts/sec` | `PERF_COUNTER_BULK_COUNT` | 3 | |
| `Log Pool Invalid Hash Entry/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Log Pool Log Scan Pushes/sec` | `PERF_COUNTER_BULK_COUNT` | 3 | |
| `Log Pool LogWriter Pushes/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Log Pool Push Empty FreePool/sec` | `PERF_COUNTER_BULK_COUNT` | 3 | |
| `Log Pool Push Low Memory/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Log Pool Push No Free Buffer/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Log Pool Req. Behind Trunc/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Log Pool Requests Old VLF/sec` | `PERF_COUNTER_BULK_COUNT` | 4 | |
| `Log Pool Requests/sec` | `PERF_COUNTER_BULK_COUNT` | 8 | |
| `Log Pool Total Active Log Size` | `PERF_COUNTER_LARGE_RAWCOUNT` | 446464 | |
| `Log Pool Total Shared Pool Size` | `PERF_COUNTER_LARGE_RAWCOUNT` | 12288 | |
| `Log Shrinks` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Log Truncations` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Percent Log Used` | `PERF_COUNTER_LARGE_RAWCOUNT` | 52 | |
| `Repl. Pending Xacts` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Repl. Trans. Rate` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Shrink Data Movement Bytes/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Tracked transactions/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Transactions/sec` | `PERF_COUNTER_BULK_COUNT` | 151 | |
| `Write Transactions/sec` | `PERF_COUNTER_BULK_COUNT` | 23 | |
| `XTP Controller DLC Latency/Fetch` | `PERF_AVERAGE_BULK` | 0 | 0 |
| `XTP Controller DLC Peak Latency` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `XTP Controller Log Processed/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `XTP Memory Used (KB)` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
Not read by the collector:
- `PERF_AVERAGE_BULK`: `Avg Dist From EOL/LP Request`
- `PERF_COUNTER_BULK_COUNT`: `PVS in-row diff generated/sec`, `PVS in-row diff retrieved/sec`, `PVS off-row pages allocated/sec`, `PVS off-row pages deleted/sec`, `PVS off-row record generated/sec`, `PVS off-row record retrieved/sec`, `Tail Log Cache Deletes/sec`, `Tail Log Cache Misses/sec`, `TLC LogWriter Pushes/sec`, `TLC Req. Behind Trunc/sec`
- `PERF_COUNTER_LARGE_RAWCOUNT`: `WPR add lsn bucket miss`, `WPR bucket swaps`, `WPR stale check bucket miss`
### `MSSQL$<instance>:General Statistics`
Single-instance.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Active Temp Tables` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Connection Reset/sec` | `PERF_COUNTER_BULK_COUNT` | 75 | |
| `Event Notifications Delayed Drop` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `HTTP Authenticated Requests` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Logical Connections` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Logins/sec` | `PERF_COUNTER_BULK_COUNT` | 5 | |
| `Logouts/sec` | `PERF_COUNTER_BULK_COUNT` | 5 | |
| `Mars Deadlocks` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Non-atomic yield rate` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Processes blocked` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `SOAP Empty Requests` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `SOAP Method Invocations` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `SOAP Session Initiate Requests` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `SOAP Session Terminate Requests` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `SOAP SQL Requests` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `SOAP WSDL Requests` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `SQL Trace IO Provider Lock Waits` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Temp Tables Creation Rate` | `PERF_COUNTER_BULK_COUNT` | 2 | |
| `Temp Tables For Destruction` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Tempdb recovery unit id` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Tempdb rowset id` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Trace Event Notification Queue` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Transactions` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `User Connections` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
### `MSSQL$<instance>:Locks`
Multi-instance. Instances: `_Total`, `AllocUnit`, `Application`, `Database`, `Extent`, `File`, `HoBT`, `Key`, ... (15 in total). Sample instance: `AllocUnit`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Average Wait Time (ms)` | `PERF_AVERAGE_BULK` | 0 | 0 |
| `Lock Requests/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Lock Timeouts (timeout > 0)/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Lock Timeouts/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Lock Wait Time (ms)` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Lock Waits/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Number of Deadlocks/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
### `MSSQL$<instance>:Memory Manager`
Single-instance.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Connection Memory (KB)` | `PERF_COUNTER_LARGE_RAWCOUNT` | 2024 | |
| `Database Cache Memory (KB)` | `PERF_COUNTER_LARGE_RAWCOUNT` | 22704 | |
| `External benefit of memory` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Free Memory (KB)` | `PERF_COUNTER_LARGE_RAWCOUNT` | 7776 | |
| `Granted Workspace Memory (KB)` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Lock Blocks` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Lock Blocks Allocated` | `PERF_COUNTER_LARGE_RAWCOUNT` | 3050 | |
| `Lock Memory (KB)` | `PERF_COUNTER_LARGE_RAWCOUNT` | 768 | |
| `Lock Owner Blocks` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Lock Owner Blocks Allocated` | `PERF_COUNTER_LARGE_RAWCOUNT` | 5550 | |
| `Log Pool Memory (KB)` | `PERF_COUNTER_LARGE_RAWCOUNT` | 4376 | |
| `Maximum Workspace Memory (KB)` | `PERF_COUNTER_LARGE_RAWCOUNT` | 4500240 | |
| `Memory Grants Outstanding` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Memory Grants Pending` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Optimizer Memory (KB)` | `PERF_COUNTER_LARGE_RAWCOUNT` | 1024 | |
| `Reserved Server Memory (KB)` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `SQL Cache Memory (KB)` | `PERF_COUNTER_LARGE_RAWCOUNT` | 1720 | |
| `Stolen Server Memory (KB)` | `PERF_COUNTER_LARGE_RAWCOUNT` | 297616 | |
| `Target Server Memory (KB)` | `PERF_COUNTER_LARGE_RAWCOUNT` | 5988752 | |
| `Total Server Memory (KB)` | `PERF_COUNTER_LARGE_RAWCOUNT` | 328096 | |
Not read by the collector:
- `PERF_COUNTER_BULK_COUNT`: `Decommit Memory (KB)/sec`
### `MSSQL$<instance>:SQL Errors`
Multi-instance. Instances: `_Total`, `DB Offline Errors`, `Info Errors`, `Kill Connection Errors`, `User Errors`. Sample instance: `DB Offline Errors`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Errors/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
### `MSSQL$<instance>:SQL Statistics`
Single-instance.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Auto-Param Attempts/sec` | `PERF_COUNTER_BULK_COUNT` | 35 | |
| `Batch Requests/sec` | `PERF_COUNTER_BULK_COUNT` | 160 | |
| `Failed Auto-Params/sec` | `PERF_COUNTER_BULK_COUNT` | 27 | |
| `Forced Parameterizations/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Guided plan executions/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Misguided plan executions/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Safe Auto-Params/sec` | `PERF_COUNTER_BULK_COUNT` | 2 | |
| `SQL Attention rate` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `SQL Compilations/sec` | `PERF_COUNTER_BULK_COUNT` | 83 | |
| `SQL Re-Compilations/sec` | `PERF_COUNTER_BULK_COUNT` | 2 | |
| `Unsafe Auto-Params/sec` | `PERF_COUNTER_BULK_COUNT` | 6 | |
### `MSSQL$<instance>:Transactions`
Single-instance.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Free Space in tempdb (KB)` | `PERF_COUNTER_LARGE_RAWCOUNT` | 62528 | |
| `Longest Transaction Running Time` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `NonSnapshot Version Transactions` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Snapshot Transactions` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Transactions` | `PERF_COUNTER_LARGE_RAWCOUNT` | 6 | |
| `Update conflict ratio` | `PERF_AVERAGE_BULK` | 0 | 0 |
| `Update Snapshot Transactions` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Version Cleanup rate (KB/s)` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Version Generation rate (KB/s)` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Version Store Size (KB)` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Version Store unit count` | `PERF_COUNTER_LARGE_RAWCOUNT` | 2 | |
| `Version Store unit creation` | `PERF_COUNTER_LARGE_RAWCOUNT` | 2 | |
| `Version Store unit truncation` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
### `MSSQL$<instance>:Wait Statistics`
Multi-instance. Instances: `Average wait time (ms)`, `Cumulative wait time (ms) per second`, `Waits in progress`, `Waits started per second`. Sample instance: `Average wait time (ms)`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Lock waits` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Log buffer waits` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Log write waits` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Memory grant queue waits` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Network IO waits` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Non-Page latch waits` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Page IO latch waits` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Page latch waits` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Thread-safe memory objects waits` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Transaction ownership waits` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Wait for the worker` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Workspace synchronization waits` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
+61
View File
@@ -0,0 +1,61 @@
# `net` collector
The collector reads the `Network Interface` PDH object with
`pdh.CounterTypeRaw`. The object exists on every Windows host; no role is
needed. It is multi-instance. These notes were recorded on a Windows Server
2025 (build 26100) Hyper-V guest that also runs the Hyper-V role.
- Instances are adapter descriptions with `(`, `)`, `#`, `/` and `\`
replaced by `[`, `]`, `_`, `_` and `_`. The collector applies the same
replacement to the adapter description for the `nic` label of the info
metrics. There is no `_Total` instance.
- On this host `Network Interface` had only one instance,
`Microsoft Hyper-V Network Adapter`, although `Get-NetAdapter` also listed
the Hyper-V switch adapters `Hyper-V Virtual Ethernet Adapter` and
`Hyper-V Virtual Ethernet Adapter #2`. Those appear only in the
`Network Adapter` object (as `Hyper-V Virtual Ethernet Adapter _2` for the
second one), which the collector does not read.
- `Current Bandwidth` is in bits per second per the help text; the raw value
was 10000000000 for a 10 Gbps link. The collector divides it by 8 for
`current_bandwidth_bytes`.
- `Output Queue Length` is a gauge. The help text says it is always 0
because NDIS queues the requests.
- The `Packets ... Discarded`, `Packets ... Errors` and
`Packets Received Unknown` counters are `PERF_COUNTER_LARGE_RAWCOUNT` but
cumulative counts of packets. All were 0 here.
- The `/sec` counters are `PERF_COUNTER_BULK_COUNT`, cumulative since the
adapter started. `Bytes Total/sec` is the sum of `Bytes Received/sec` and
`Bytes Sent/sec`, and `Packets/sec` is the sum of `Packets Received/sec`
and `Packets Sent/sec` (exact in the sample).
## Counter reference
Recorded on Windows Server 2025 (build 26100). `Raw` and `Base` are the first and second
values that `pdh.CounterTypeRaw` returns for the sample instance.
### `Network Interface`
Multi-instance. Instances: `Microsoft Hyper-V Network Adapter`. Sample instance: `Microsoft Hyper-V Network Adapter`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Bytes Received/sec` | `PERF_COUNTER_BULK_COUNT` | 6363880254 | |
| `Bytes Sent/sec` | `PERF_COUNTER_BULK_COUNT` | 82374607 | |
| `Bytes Total/sec` | `PERF_COUNTER_BULK_COUNT` | 6446254861 | |
| `Current Bandwidth` | `PERF_COUNTER_LARGE_RAWCOUNT` | 10000000000 | |
| `Output Queue Length` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Packets Outbound Discarded` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Packets Outbound Errors` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Packets Received Discarded` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Packets Received Errors` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Packets Received Unknown` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Packets Received/sec` | `PERF_COUNTER_BULK_COUNT` | 4526889 | |
| `Packets Sent/sec` | `PERF_COUNTER_BULK_COUNT` | 538207 | |
| `Packets/sec` | `PERF_COUNTER_BULK_COUNT` | 5065096 | |
Not read by the collector:
- `PERF_COUNTER_BULK_COUNT`: `Packets Received Non-Unicast/sec`, `Packets Received Unicast/sec`, `Packets Sent Non-Unicast/sec`, `Packets Sent Unicast/sec`, `TCP RSC Coalesced Packets/sec`, `TCP RSC Exceptions/sec`
- `PERF_COUNTER_LARGE_RAWCOUNT`: `Offloaded Connections`, `TCP Active RSC Connections`, `TCP RSC Average Packet Size`
+74
View File
@@ -0,0 +1,74 @@
# `nps` collector
The collector reads the single-instance PDH objects `NPS Authentication Server`
and `NPS Accounting Server` with `pdh.CounterTypeRaw`. They exist only where
the Network Policy Server role (service `IAS`) is installed. These notes were
recorded on Windows Server 2025 (build 26100) with almost no RADIUS traffic.
- Every counter that the collector reads is `PERF_COUNTER_RAWCOUNT`. All of
them except the two time counters are cumulative packet counts since the
NPS service started.
- `Server Up Time` and `Server Reset Time` are elapsed times. The help text
says "in hundredths of a second", but the raw value is seconds: 303 about
304 s after the `IAS` service started. Both objects report the same values.
- Each `X / sec.` twin (`PERF_COUNTER_COUNTER`, not read) has the same raw
value as `X` (`Packets Received / sec.` 1 = `Packets Received` 1).
- `No Record` exists only on `NPS Accounting Server`;
`Access-Accepts/Challenges/Rejects/Requests` only on
`NPS Authentication Server`.
## Counter reference
Recorded on Windows Server 2025 (build 26100). `Raw` and `Base` are the first and second
values that `pdh.CounterTypeRaw` returns for the sample instance.
### `NPS Accounting Server`
Single-instance.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Accounting-Requests` | `PERF_COUNTER_RAWCOUNT` | 1 | |
| `Accounting-Responses` | `PERF_COUNTER_RAWCOUNT` | 1 | |
| `Bad Authenticators` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Dropped Packets` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Invalid Requests` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Malformed Packets` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `No Record` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Packets Received` | `PERF_COUNTER_RAWCOUNT` | 1 | |
| `Packets Sent` | `PERF_COUNTER_RAWCOUNT` | 1 | |
| `Server Reset Time` | `PERF_COUNTER_RAWCOUNT` | 3275 | |
| `Server Up Time` | `PERF_COUNTER_RAWCOUNT` | 3275 | |
| `Unknown Type` | `PERF_COUNTER_RAWCOUNT` | 0 | |
Not read by the collector:
- `PERF_COUNTER_COUNTER`: `Accounting-Requests / sec.`, `Accounting-Responses / sec.`, `Bad Authenticators / sec.`, `Dropped Packets / sec.`, `Invalid Requests / sec.`, `Malformed Packets / sec.`, `No Record / sec.`, `Packets Received / sec.`, `Packets Sent / sec.`, `Unknown Type / sec.`
### `NPS Authentication Server`
Single-instance.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Access-Accepts` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Access-Challenges` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Access-Rejects` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Access-Requests` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Bad Authenticators` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Dropped Packets` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Invalid Requests` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Malformed Packets` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Packets Received` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Packets Sent` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Server Reset Time` | `PERF_COUNTER_RAWCOUNT` | 3275 | |
| `Server Up Time` | `PERF_COUNTER_RAWCOUNT` | 3275 | |
| `Unknown Type` | `PERF_COUNTER_RAWCOUNT` | 0 | |
Not read by the collector:
- `PERF_COUNTER_COUNTER`: `Access-Accepts / sec.`, `Access-Challenges / sec.`, `Access-Rejects / sec.`, `Access-Requests / sec.`, `Bad Authenticators / sec.`, `Dropped Packets / sec.`, `Invalid Requests / sec.`, `Malformed Packets / sec.`, `Packets Received / sec.`, `Packets Sent / sec.`, `Unknown Type / sec.`
+37
View File
@@ -0,0 +1,37 @@
# `pagefile` collector
The collector reads the multi-instance PDH object `Paging File` with
`pdh.CounterTypeRaw`. The object exists on every Windows host with a page
file, so no role is needed. It also uses `GetPerformanceInfo` for the page
size and `os.Stat` for the file size. These notes were recorded on Windows
Server 2025 (build 26100) with one page file.
- Instances are the page file paths, here `C:\pagefile.sys`, plus `_Total`.
`_Total` is dropped because the collector does not request it. The
instance name had no `\??\` prefix on this host. The `file` label is the
instance name with any `\??\` prefix removed.
- `% Usage` and `% Usage Peak` are `PERF_RAW_FRACTION`. Despite the `%`, the
raw value is the number of pages in use (a gauge) and the base
(`,secondvalue`) is the page file size in pages. With 4096-byte pages, the
base 622592 matched the file size of 2550136832 bytes from `os.Stat` and
the 2432 MB `AllocatedBaseSize` of `Win32_PageFileUsage`.
- `% Usage` was 128462 pages in the dump and 0 in a later live sample.
## Counter reference
Recorded on Windows Server 2025 (build 26100). `Raw` and `Base` are the first and second
values that `pdh.CounterTypeRaw` returns for the sample instance.
### `Paging File`
Multi-instance. Instances: `_Total`, `C:\pagefile.sys`. Sample instance: `C:\pagefile.sys`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `% Usage` | `PERF_RAW_FRACTION` | 128462 | 622592 |
Not read by the collector:
- `PERF_RAW_FRACTION`: `% Usage Peak`
@@ -0,0 +1,62 @@
# `physical_disk` collector
The collector reads the `PhysicalDisk` PDH object with `pdh.CounterTypeRaw`.
The object exists on every Windows host; no role is needed. It is
multi-instance. These notes were recorded on a Windows Server 2025
(build 26100) Hyper-V guest, so the disks are virtual Hyper-V disks.
- Instances are the disk number, followed by the drive letters of its
volumes when it has any: `0 C:`, `1`, `2`, `3`, `4`, plus the aggregate
`_Total`. `internal/pdh` drops `_Total` because the collector asks for
`pdh.InstancesAll`. The collector matches the include and exclude regular expressions
against the full instance name and then labels the metrics with the part
before the first space (`0`).
- The time counters share one raw value. `% Disk Read Time` and the first
value of `Avg. Disk sec/Read` were both 7370439057; the write pair was
9150445263, and `Avg. Disk sec/Transfer` (16520884320) is their sum. The
value is the cumulative busy time in 100 ns ticks.
- `internal/pdh` converts the `PERF_PRECISION_100NS_TIMER` counters
(`% Disk Read Time`, `% Disk Write Time`, `% Idle Time`) to seconds.
`PERF_AVERAGE_TIMER` values arrive in ticks of the 10 MHz counter time base
and need the 1e-7 factor.
- The `PERF_AVERAGE_TIMER` base is the operation count: it equals
`Disk Reads/sec` (781613), `Disk Writes/sec` (940802) and their sum
(1722415).
- `Disk Read Bytes/sec`, `Disk Write Bytes/sec` (`PERF_COUNTER_BULK_COUNT`,
bytes) and the `PERF_COUNTER_COUNTER` rates are cumulative counts since
boot.
- `Current Disk Queue Length` is an instantaneous snapshot (gauge) and was 0.
## Counter reference
Recorded on Windows Server 2025 (build 26100). `Raw` and `Base` are the first and second
values that `pdh.CounterTypeRaw` returns for the sample instance.
### `PhysicalDisk`
Multi-instance. Instances: `_Total`, `0 C:`, `1`, `2`, `3`, `4`. Sample instance: `0 C:`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `% Disk Read Time` | `PERF_PRECISION_100NS_TIMER` | 7370439057 | |
| `% Disk Write Time` | `PERF_PRECISION_100NS_TIMER` | 9150445263 | |
| `% Idle Time` | `PERF_PRECISION_100NS_TIMER` | 28962791306 | |
| `Avg. Disk sec/Read` | `PERF_AVERAGE_TIMER` | 7370439057 | 781613 |
| `Avg. Disk sec/Transfer` | `PERF_AVERAGE_TIMER` | 16520884320 | 1722415 |
| `Avg. Disk sec/Write` | `PERF_AVERAGE_TIMER` | 9150445263 | 940802 |
| `Current Disk Queue Length` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Disk Read Bytes/sec` | `PERF_COUNTER_BULK_COUNT` | 44064459264 | |
| `Disk Reads/sec` | `PERF_COUNTER_COUNTER` | 781613 | |
| `Disk Write Bytes/sec` | `PERF_COUNTER_BULK_COUNT` | 55022156288 | |
| `Disk Writes/sec` | `PERF_COUNTER_COUNTER` | 940802 | |
| `Split IO/Sec` | `PERF_COUNTER_COUNTER` | 75848 | |
Not read by the collector:
- `PERF_AVERAGE_BULK`: `Avg. Disk Bytes/Read`, `Avg. Disk Bytes/Transfer`, `Avg. Disk Bytes/Write`
- `PERF_COUNTER_100NS_QUEUELEN_TYPE`: `Avg. Disk Queue Length`, `Avg. Disk Read Queue Length`, `Avg. Disk Write Queue Length`
- `PERF_COUNTER_BULK_COUNT`: `Disk Bytes/sec`
- `PERF_COUNTER_COUNTER`: `Disk Transfers/sec`
- `PERF_PRECISION_100NS_TIMER`: `% Disk Time`
+86
View File
@@ -0,0 +1,86 @@
# `remote_fx` collector
The collector reads `RemoteFX Network` and `RemoteFX Graphics` with
`pdh.CounterTypeRaw`. Instances exist only while an RDP session is connected,
so most local runs see none. These notes were recorded on Windows Server 2025
with one active RDP session over TCP.
- Instance names differ in case between the objects: `RDP-tcp 0` in
`RemoteFX Network`, `RDP-Tcp 0` in `RemoteFX Graphics`.
`normalizeSessionName` makes both `RDP-Tcp 0`, which is also the
`session_name` of `windows_terminal_services_session_info`. The console and
services sessions have no instance.
- `RemoteFX Network` counter types and units (from the counter help text):
- `Current TCP/UDP Bandwidth`: `NumberOfItems32`, kbit/s (1000 bit/s).
- `Base/Current TCP/UDP RTT`: `NumberOfItems32`, milliseconds. They stayed
0 for the whole TCP-only session; they appear to be measured only with UDP
transport.
- `Total Sent Bytes`, `Total Received Bytes`: `NumberOfItems32`, cumulative
bytes.
- `Total/TCP/UDP Sent Rate`, `Total/TCP/UDP Received Rate` and
`Sent Rate P0`..`P3`: `RateOfCountsPerSecond32`, cumulative **bits**
(`Total Sent Rate` raw was 8 × `Total Sent Bytes`).
- `UDP Packets Sent/sec`, `UDP Packets Received/sec`:
`RateOfCountsPerSecond32`, cumulative packets.
- `Loss Rate`, `Retransmission Rate`, `FEC Rate`: `SampleFraction`; raw is a
cumulative numerator and the base (`,secondvalue`) the matching total.
Neither value alone is a percentage. Both were 0 on TCP.
- `RemoteFX Graphics`: `Input/Output/Source Frames/Second` and the three
`Frames Skipped/Second - Insufficient {Client,Network,Server} Resources`
counters are `RateOfCountsPerSecond32` (cumulative frames);
`Frame Quality` (percent), `Graphics Compression ratio` and
`Average Encoding Time` (milliseconds) are `NumberOfItems32` gauges.
- Sample: `Input Frames/Second` raw 27086, `Output Frames/Second` 26142,
`Source Frames/Second` 0, `Frame Quality` 100, `Current TCP Bandwidth`
151159, `Total Sent Bytes` 29262741, `Total Received Bytes` 3920173.
- `RemoteFX Root GPU Management` exists but has no instances without GPU
partitioning; the collector does not read it.
## Counter reference
Recorded on Windows Server 2025 (build 26100). `Raw` and `Base` are the first and second
values that `pdh.CounterTypeRaw` returns for the sample instance.
### `RemoteFX Graphics`
Multi-instance. Instances: `RDP-Tcp 0`. Sample instance: `RDP-Tcp 0`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Average Encoding Time` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Frame Quality` | `PERF_COUNTER_RAWCOUNT` | 100 | |
| `Frames Skipped/Second - Insufficient Client Resources` | `PERF_COUNTER_COUNTER` | 0 | |
| `Frames Skipped/Second - Insufficient Network Resources` | `PERF_COUNTER_COUNTER` | 0 | |
| `Frames Skipped/Second - Insufficient Server Resources` | `PERF_COUNTER_COUNTER` | 0 | |
| `Graphics Compression ratio` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Input Frames/Second` | `PERF_COUNTER_COUNTER` | 27104 | |
| `Output Frames/Second` | `PERF_COUNTER_COUNTER` | 26157 | |
| `Source Frames/Second` | `PERF_COUNTER_COUNTER` | 0 | |
### `RemoteFX Network`
Multi-instance. Instances: `RDP-tcp 0`. Sample instance: `RDP-tcp 0`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Base TCP RTT` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Base UDP RTT` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Current TCP Bandwidth` | `PERF_COUNTER_RAWCOUNT` | 151159 | |
| `Current TCP RTT` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Current UDP Bandwidth` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Current UDP RTT` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `FEC Rate` | `PERF_SAMPLE_FRACTION` | 0 | 0 |
| `Loss Rate` | `PERF_SAMPLE_FRACTION` | 0 | 0 |
| `Retransmission Rate` | `PERF_SAMPLE_FRACTION` | 0 | 0 |
| `Total Received Bytes` | `PERF_COUNTER_RAWCOUNT` | 3922173 | |
| `Total Sent Bytes` | `PERF_COUNTER_RAWCOUNT` | 29288171 | |
| `UDP Packets Received/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `UDP Packets Sent/sec` | `PERF_COUNTER_COUNTER` | 0 | |
Not read by the collector:
- `PERF_COUNTER_COUNTER`: `Sent Rate P0`, `Sent Rate P1`, `Sent Rate P2`, `Sent Rate P3`, `TCP Received Rate`, `TCP Sent Rate`, `Total Received Rate`, `Total Sent Rate`, `UDP Received Rate`, `UDP Sent Rate`
+55
View File
@@ -0,0 +1,55 @@
# `smb` collector
The collector reads the `SMB Server Shares` PDH object with
`pdh.CounterTypeRaw`. The object comes with the SMB server (`LanmanServer`)
and is multi-instance, one instance per share. These notes were recorded on a
Windows Server 2025 (build 26100) domain controller running as a Hyper-V
guest.
- Instance names are UNC paths with `*` as the host, for example
`\\*\IPC$`, `\\*\SYSVOL` and `\\*\NETLOGON`. Scoped shares use the scope
name instead, here `\\MSCLUSTER\ClusterStorage$`. There is also an
aggregate `_Total`, which `internal/pdh` drops because the collector asks
for `pdh.InstancesAll`. The instance name is the `share` label.
- `Current Open File Count` and `Tree Connect Count` are gauges: the help
text calls them the handles "currently open" and "the current number of
tree connects". With one test client connected, `\\*\SmbClientTest` had
`Tree Connect Count` 1 and `Current Open File Count` 1.
- The `/sec` counters (`PERF_COUNTER_BULK_COUNT` and
`PERF_COUNTER_COUNTER`) are cumulative. `Files Opened/sec` was 28 on
`\\*\SYSVOL` while its open file count was 0.
- `Received Bytes/sec` and `Sent Bytes/sec` are bytes and include SMB
protocol data such as packet headers, per the help text.
- The sample instance `\\*\ADMIN$` had no traffic, so all its values are 0.
## Counter reference
Recorded on Windows Server 2025 (build 26100). `Raw` and `Base` are the first and second
values that `pdh.CounterTypeRaw` returns for the sample instance.
### `SMB Server Shares`
Multi-instance. Instances: `\\*\ADMIN$`, `\\*\C$`, `\\*\IPC$`, `\\*\MSCLUSTER`, `\\*\NETLOGON`, `\\*\SmbClientTest`, `\\*\SYSVOL`, `\\MSCLUSTER\ClusterStorage$`, ... (9 in total). Sample instance: `\\*\ADMIN$`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Current Open File Count` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Files Opened/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Metadata Requests/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Read Requests/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Received Bytes/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Sent Bytes/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Tree Connect Count` | `PERF_COUNTER_LARGE_RAWCOUNT` | 0 | |
| `Write Requests/sec` | `PERF_COUNTER_COUNTER` | 0 | |
Not read by the collector:
- `PERF_AVERAGE_BULK`: `Avg. Bytes/Read`, `Avg. Bytes/Write`, `Avg. Data Bytes/Request`
- `PERF_AVERAGE_TIMER`: `Avg. sec/Data Request`, `Avg. sec/Read`, `Avg. sec/Request`, `Avg. sec/Write`
- `PERF_COUNTER_100NS_QUEUELEN_TYPE`: `Avg. Data Queue Length`, `Avg. Read Queue Length`, `Avg. Write Queue Length`
- `PERF_COUNTER_BULK_COUNT`: `Attempted Compressed Responses/sec`, `Bytes Compressed/sec`, `Compressed Requests/sec`, `Data Bytes/sec`, `Read Bytes transmitted ByPassCSV/sec`, `Read Bytes transmitted via SMB Direct/sec`, `Read Bytes/sec`, `Requests/sec`, `Successful Compressed Responses/sec`, `Transferred Bytes/sec`, `Write Bytes transmitted ByPassCSV/sec`, `Write Bytes transmitted via SMB Direct/sec`, `Write Bytes/sec`
- `PERF_COUNTER_COUNTER`: `Data Requests/sec`, `Read Requests transmitted via BypassCSV/sec`, `Read Requests transmitted via SMB Direct/sec`, `Write Requests transmitted via BypassCSV/sec`, `Write Requests transmitted via SMB Direct/sec`
- `PERF_COUNTER_LARGE_RAWCOUNT`: `Current Bypass Open File Count`, `Current Data Queue Length`, `Current Durable Open File Count`, `Current Pending Requests`, `Total Durable Handle Reopen Count`, `Total Failed Durable Handle Reopen Count`, `Total Failed Persistent Handle Reopen Count`, `Total Failed Resilient Handle Reopen Count`, `Total File Open Count`, `Total Persistent Handle Reopen Count`, `Total Resilient Handle Reopen Count`
- `PERF_LARGE_RAW_FRACTION`: `% Persistent Handles`, `% Resilient Handles`
+63
View File
@@ -0,0 +1,63 @@
# `smbclient` collector
The collector reads the `SMB Client Shares` PDH object with
`pdh.CounterTypeRaw`. It is multi-instance, with one instance per share the
host has connected to. These notes were recorded on a Windows Server 2025
(build 26100) Hyper-V guest that had mapped one share of its own SMB server.
- Instance names have a single leading backslash: `\SERVER2025\SmbClientTest`.
The collector splits the name at `\` and uses the two parts as the `server`
and `share` labels. The aggregate `_Total` is dropped by `internal/pdh`
because the collector asks for `pdh.InstancesAll`.
- The mapped share was idle, so every counter of the sample instance was 0.
- `Current Data Queue Length` is the only gauge ("the current number of read
or write requests outstanding"). The `/sec` counters are cumulative counts.
- `Avg. Data/Read/Write Queue Length` are `PERF_COUNTER_100NS_QUEUELEN_TYPE`:
the raw value is accumulated queue time in 100 ns ticks. `internal/pdh` does
not convert this type, so the collector applies the 1e-7 factor.
- `Avg. sec/Read`, `Avg. sec/Write` and `Avg. sec/Data Request` are
`PERF_AVERAGE_TIMER`. The first value is the summed latency in ticks of the
10 MHz counter time base and the base is the request count; the collector
reads only the first value.
- `Data Bytes/sec`, `Read Bytes/sec` and `Write Bytes/sec` are bytes
(`PERF_COUNTER_BULK_COUNT`).
## Counter reference
Recorded on Windows Server 2025 (build 26100). `Raw` and `Base` are the first and second
values that `pdh.CounterTypeRaw` returns for the sample instance.
### `SMB Client Shares`
Multi-instance. Instances: `\SERVER2025\SmbClientTest`, `_Total`. Sample instance: `\SERVER2025\SmbClientTest`.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Avg. Data Queue Length` | `PERF_COUNTER_100NS_QUEUELEN_TYPE` | 0 | |
| `Avg. Read Queue Length` | `PERF_COUNTER_100NS_QUEUELEN_TYPE` | 0 | |
| `Avg. sec/Data Request` | `PERF_AVERAGE_TIMER` | 0 | 0 |
| `Avg. sec/Read` | `PERF_AVERAGE_TIMER` | 0 | 0 |
| `Avg. sec/Write` | `PERF_AVERAGE_TIMER` | 0 | 0 |
| `Avg. Write Queue Length` | `PERF_COUNTER_100NS_QUEUELEN_TYPE` | 0 | |
| `Credit Stalls/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Current Data Queue Length` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Data Bytes/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Data Requests/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Metadata Requests/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Read Bytes transmitted via SMB Direct/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Read Bytes/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Read Requests transmitted via SMB Direct/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Read Requests/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Turbo I/O Reads/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Turbo I/O Writes/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Write Bytes transmitted via SMB Direct/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Write Bytes/sec` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `Write Requests transmitted via SMB Direct/sec` | `PERF_COUNTER_COUNTER` | 0 | |
| `Write Requests/sec` | `PERF_COUNTER_COUNTER` | 0 | |
Not read by the collector:
- `PERF_AVERAGE_BULK`: `Avg. Bytes/Read`, `Avg. Bytes/Write`, `Avg. Data Bytes/Request`
- `PERF_COUNTER_COUNTER`: `Attempted Compressed Requests/sec`, `Compressed Bytes Sent/sec`, `Compressed Responses/sec`, `Successful Compressed Requests /sec`
+45
View File
@@ -0,0 +1,45 @@
# `system` collector
The collector reads the single-instance PDH object `System` with
`pdh.CounterTypeRaw`. The object exists on every Windows host, so no role is
needed. The boot time comes from `ntdll`, not from the PDH counter
`System Up Time`. These notes were recorded on Windows Server 2025
(build 26100).
- `Context Switches/sec`, `Exception Dispatches/sec` and `System Calls/sec`
are `PERF_COUNTER_COUNTER`. The raw value is a cumulative count since boot.
The type has a 32-bit raw value, so a busy host wraps it at 2^32; a scraper
sees the wrap as a counter reset. `System Calls/sec` was already 345 million
in the sample.
- `Processes`, `Threads` and `Processor Queue Length` are
`PERF_COUNTER_RAWCOUNT` gauges. The help text calls `Processes` and
`Threads` instantaneous counts. `Processor Queue Length` counts ready
threads in the single queue shared by all processors, so per-processor load
needs a division by the processor count. It was 0 in the sample.
## Counter reference
Recorded on Windows Server 2025 (build 26100). `Raw` and `Base` are the first and second
values that `pdh.CounterTypeRaw` returns for the sample instance.
### `System`
Single-instance.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Context Switches/sec` | `PERF_COUNTER_COUNTER` | 50992231 | |
| `Exception Dispatches/sec` | `PERF_COUNTER_COUNTER` | 321946 | |
| `Processes` | `PERF_COUNTER_RAWCOUNT` | 200 | |
| `Processor Queue Length` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `System Calls/sec` | `PERF_COUNTER_COUNTER` | 345210165 | |
| `Threads` | `PERF_COUNTER_RAWCOUNT` | 2894 | |
Not read by the collector:
- `PERF_COUNTER_BULK_COUNT`: `File Control Bytes/sec`, `File Read Bytes/sec`, `File Write Bytes/sec`
- `PERF_COUNTER_COUNTER`: `Alignment Fixups/sec`, `File Control Operations/sec`, `File Data Operations/sec`, `File Read Operations/sec`, `File Write Operations/sec`, `Floating Emulations/sec`
- `PERF_ELAPSED_TIME`: `System Up Time`
- `PERF_RAW_FRACTION`: `% Registry Quota In Use`
+41
View File
@@ -0,0 +1,41 @@
# `time` collector
The collector reads the single-instance PDH object `Windows Time Service` with
`pdh.CounterTypeRaw`. The object needs the W32Time service. These notes were
recorded on Windows Server 2025 (build 26100), a domain controller and
Hyper-V guest.
- `Computed Time Offset` (`PERF_COUNTER_LARGE_RAWCOUNT`) and
`NTP Roundtrip Delay` (`PERF_COUNTER_RAWCOUNT`) are gauges in microseconds,
per the help text. The offset is absolute, so it is never negative.
- `Clock Frequency Adjustment` is a gauge in nominal clock units;
`Clock Frequency Adjustment (PPB)` is the same adjustment in parts per
billion. In the sample they were 0 and 600.
- The struct tag spells the counter `Clock Frequency Adjustment (ppb)`, but
Windows names it `(PPB)`. The name lookup is case-insensitive, and the
counter was read on this host.
- `NTP Server Incoming Requests` and `NTP Server Outgoing Responses` are
`PERF_COUNTER_BULK_COUNT`; the raw value is a cumulative count.
- `NTP Client Time Source Count`, `NTP Roundtrip Delay` and both NTP server
counters were 0 on this host.
## Counter reference
Recorded on Windows Server 2025 (build 26100). `Raw` and `Base` are the first and second
values that `pdh.CounterTypeRaw` returns for the sample instance.
### `Windows Time Service`
Single-instance.
Counters the collector reads:
| Counter | Type | Raw | Base |
|---|---|---|---|
| `Clock Frequency Adjustment` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `Clock Frequency Adjustment (PPB)` | `PERF_COUNTER_RAWCOUNT` | 600 | |
| `Computed Time Offset` | `PERF_COUNTER_LARGE_RAWCOUNT` | 83 | |
| `NTP Client Time Source Count` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `NTP Roundtrip Delay` | `PERF_COUNTER_RAWCOUNT` | 0 | |
| `NTP Server Incoming Requests` | `PERF_COUNTER_BULK_COUNT` | 0 | |
| `NTP Server Outgoing Responses` | `PERF_COUNTER_BULK_COUNT` | 0 | |