Skip to content

feat(observability): align the Tachometer capture with the load window - #359

Merged
nv-yna merged 2 commits into
NVIDIA:mainfrom
nv-yna:yna/tachometer-load-window
Sep 12, 2026
Merged

nv-yna merged 2 commits into
NVIDIA:mainfrom
nv-yna:yna/tachometer-load-window

Conversation

@nv-yna

@nv-yna nv-yna commented Aug 27, 2026

Copy link
Copy Markdown
Collaborator

Changes

On benchmark runs, start Tachometer after health and runner validation, then attempt a graceful stop when the benchmark script returns or raises. The scraper receives SIGTERM directly through a shell-less srun launch, with POLARS_MAX_THREADS passed through --export. observability.tachometer.shutdown_grace_secs defaults to 120 seconds for benchmark shutdown compaction.

Serve-only, manual, and eval-only runs retain session-wide capture. Existing default-on collection, full endpoint coverage, millisecond cadence, and power finalization behavior are preserved. The obsolete health-check test fix is already in main and is omitted from this diff.

Signal handlers and the critical-process monitor retain the registry's existing cleanup timeout; the longer benchmark shutdown grace does not override those paths.

Validation

  • make check: 1,959 passed, 2 skipped, 6 deselected; source Ruff lint and formatting passed.
  • Focused telemetry, benchmark, power and process tests: 287 passed before the type-only mixin annotation adjustment; the final full suite covers the same tests.
  • Full pre-commit was run and compared with unchanged main: both report 40 lint findings (one auto-fix) and format the same 10 unrelated files. Those unrelated edits are excluded. The two findings on PR-touched files are pre-existing UP038 findings in untouched code.
  • The nine non-blocking ty diagnostics match unchanged main; the lifecycle call adds none.
  • git diff --check passed. No new SLURM run or end-to-end parquet-compaction verification was performed for this conflict resolution.

@codecov-commenter

codecov-commenter commented Aug 27, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 92.85714% with 2 lines in your changes missing coverage. Please review.
⚠️ Please upload report for BASE (main@4a16414). Learn more about missing BASE report.

Files with missing lines Patch % Lines
src/srtctl/cli/do_sweep.py 80.00% 1 Missing ⚠️
src/srtctl/cli/mixins/telemetry_stage.py 92.30% 1 Missing ⚠️
Additional details and impacted files
@@           Coverage Diff           @@
##             main     #359   +/-   ##
=======================================
  Coverage        ?   75.07%           
=======================================
  Files           ?      109           
  Lines           ?    16022           
  Branches        ?        0           
=======================================
  Hits            ?    12029           
  Misses          ?     3993           
  Partials        ?        0           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Start Tachometer after benchmark health/config validation and attempt a
graceful stop when the benchmark script returns or raises. Launch the
scraper without a shell wrapper and pass POLARS_MAX_THREADS through
srun's environment export so the scraper receives termination signals.

Allow a configurable 120-second benchmark shutdown grace for compaction.
Serve-only, manual and eval-only captures retain their session lifecycle;
signal and monitor cleanup retain the existing registry timeout.

Preserve current default-on capture, full endpoint coverage, millisecond
cadence and power finalization. Omit the obsolete health-check test fix
already present in main.

Adapted from 3afd832.

Signed-off-by: Yuewei Na <nv-yna@users.noreply.github.com>
@nv-yna
nv-yna force-pushed the yna/tachometer-load-window branch from 3afd832 to 2fd702c Compare September 11, 2026 23:51
@nv-yna
nv-yna merged commit 3be8c79 into NVIDIA:main Sep 12, 2026
6 checks passed
ishandhanani added a commit that referenced this pull request Sep 13, 2026
Nine conflicting files, resolved by hand:

- The process exporter (#413) and the wider node-exporter collector set (#415)
  arrive as tachometer-stage exporter launches; on this branch the exporters
  are services. process-exporter is now a service kind (`type:
  process-exporter`, implied while tachometer runs, `placement.node: all`),
  host-native from the `configs/process-exporter` binary `make setup`
  installs (no container, no mounts), skipped with a warning when the binary
  is missing, container launch when a recipe declares a `container`. The
  group file is written by the kind's `prepare` hook; `ServiceKind` gains
  `host_native`, `prepare`, and `skip_reason`. node-exporter's built command
  carries the stat/vmstat/pressure/meminfo_numa/processes collectors and the
  widened vmstat field filter. The templates, the group YAML, and the host
  binary resolver move to `srtctl.services.exporters`; their tests follow.
- Load-window tachometer (#359): start/stop inside run_benchmark is kept;
  `stop_tachometer` now terminates through `ManagedProcess.terminate`, which
  signals the Slurm step (SIGTERM to the srun client would abort the step and
  SIGKILL the scraper). The scraper's `terminate_timeout` is the recipe's
  `shutdown_grace_secs`; the 90 s module constant is gone.
- Ingest timestamp fallback (#414) is taken from main wholesale (it also
  offers `--start-ns`); this branch's own fallback is dropped, its dedup
  module and docstring edits re-applied.
- CPU power telemetry (#410, #422): taken as is (power is frozen); the
  energy report runs before the S3 upload, which returns the URL only.
- Makefile: the `examples`/`golden-check` targets plus the cpu-power targets;
  the `recipes/`-based runner targets stay deleted. SUMMARY: both new pages,
  `analyzing.md` stays deleted. submit.py: the direct-host renderer import
  stays deleted; the arch helpers the cpu-power preflight uses are kept.
  telemetry.py: IPv6-safe host and the SGLang gateway metrics port together.

2355 tests on Python 3.10 and 3.13, lint, schema docs, 21 examples validated,
golden 574 identical / 0 mismatched.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants