diff --git a/docs/config-reference.md b/docs/config-reference.md index 447adf8c3..51b3e1d87 100644 --- a/docs/config-reference.md +++ b/docs/config-reference.md @@ -1069,7 +1069,7 @@ observability: enabled: true tachometer: enabled: true - default_frequency: 5 + default_frequency: 1 sync_interval_secs: 120 compaction_threads: 4 storage_subdir: tachometer @@ -1087,7 +1087,7 @@ observability: | ---------------- | ---- | ------- | ----------- | | `enabled` | bool/null | `null` | `null` follows `observability.enabled`; explicit `false` opts out; explicit `true` without `observability.enabled` is a validation error | | `binary_path` | string | `tachometer-scraper` | Scraper command or path on the compute nodes | -| `default_frequency` | float | `5.0` | Scrape frequency in Hz | +| `default_frequency` | float | `1.0` | Scrape frequency in Hz | | `sync_interval_secs` | int | `120` | Interval for intermediate Parquet compaction; `0` disables it | | `compaction_threads` | int | `4` | Value passed as `POLARS_MAX_THREADS` | | `storage_subdir` | string | `tachometer` | Output directory below the run log directory | diff --git a/src/srtctl/core/schema.py b/src/srtctl/core/schema.py index 76ab948b3..daaf1c9e4 100755 --- a/src/srtctl/core/schema.py +++ b/src/srtctl/core/schema.py @@ -1042,7 +1042,7 @@ class TachometerConfig: enabled: bool | None = None binary_path: str = "tachometer-scraper" - default_frequency: float = 5.0 + default_frequency: float = 1.0 sync_interval_secs: int = 120 compaction_threads: int = 4 storage_subdir: str = "tachometer" diff --git a/tests/test_telemetry.py b/tests/test_telemetry.py index 5238fbed5..5f5763c92 100644 --- a/tests/test_telemetry.py +++ b/tests/test_telemetry.py @@ -84,6 +84,14 @@ def test_scraper_exporters_are_optional(self): assert config.observability.tachometer.dcgm_exporter is None assert config.observability.tachometer.node_exporter is None + def test_default_frequency_is_one_hz(self): + """1 Hz matches the retired RAW scraper's cadence; 5 Hz produced ~9M + rows in a 25-minute run with no analysis consuming the extra + resolution, and scrape load on worker endpoints is not free.""" + config = _make_config(tachometer=TachometerConfig(enabled=True)) + + assert config.observability.tachometer.default_frequency == 1.0 + def test_scraper_requires_nonempty_binary_path(self): with pytest.raises(ValidationError, match="observability.tachometer.binary_path"): _make_config(