Skip to content

v0.8.6 — DPC/ISR + DiskIO fixes

Choose a tag to compare

@nijosmsft nijosmsft released this 26 Jun 19:15

etw-mcp v0.8.6 — DPC/ISR + DiskIO fixes (Carol's stream)

Merged: #27 (squash commit 4933386) · Branch: fix/etw-dpc
Validated by: Clint (tester) + Heimdall (architect) — both APPROVE

Bug Fixes

get_dpc_per_cpu >100% (#4)
DPC per-CPU percentages now use the trace duration as the denominator (from
trace.duration_seconds / trace_metadata.DurationSeconds). NDIS.SYS CPU40
dropped from 278.7% to 22.27%; no values exceed 100%. Exact xperf-oracle parity
confirmed (NDIS DPC+ISR total: 10,441,034 rows match).

DPC silent exception swallow / wrong remediation (#13)
_get_dpc_df counts raw DPC rows before aggregation. If aggregation fails with
rows present, a ValueError is raised with resolve_symbols(trace_id) guidance
instead of silently returning "No DPC/ISR data".

get_diskio_summary no-data bug (#14)
_gather_diskio() handles xperf slash-key format (DiskIo/Read), native/dotnet
underscore-key format (diskio_read), and combined diskio parquet with
Kind/Type/Operation. Exact match: reads=12, writes=755, flushes=2.

New Tests

  • #16 — DPC exception/message paths + metadata-duration handling (12/12 pass)
  • #18 — DiskIO Kind/Type/underscore key normalization (all pass)
  • #20 — End-to-end real ETL integration (5 pass, 1 expected xfail for BUG-1/#11)

Notes

  • Symbolizer lookup failures still degrade to unknown (acceptable, consistent with sibling aggregators per Heimdall review).
  • Does not touch the shared symbolizer-init path; safe to merge independently of SYMBOLS/SIDECAR streams.
  • The dotnet sidecar stacks xfail (BUG-1/#11) is tracked separately.