You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* (fix): tmpfiles was wrong recommendation. recommending systemd service now for RAPL power limits
* Updated machine baseline checks to include checks and template script
GMT can verify a set of hardware and OS properties before every measurement run. All checks are configured under the `machine:` key in `config.yml`.
9
+
GMT can verify a set of hardware and OS properties before every measurement run. Most checks are configured under the `machine:` key in `config.yml`; a few (systemd timers, cron files, kernel watchdogs) need no configuration at all and always run on Linux — see [Unconditional Checks](#unconditional-checks) below.
10
10
11
-
Every check is **opt-in**: omitting a key (or setting it to `null` / `False`) silently skips that check. A failed check emits a `WARN` and, depending on `system_check_threshold`, may abort the run.
11
+
Every config-driven check is **opt-in**: omitting a key (leaving it unset / `null`) always skips that check, and is now reported as `INFO` (not `OK`), so a `system_check` run makes it obvious which checks are not yet configured on a given machine.
12
+
13
+
For most keys, explicitly setting `false` also just skips the check, same as leaving it unset. There are two kinds of exceptions:
14
+
15
+
-`cpu_smt` and `cpu_turbo_boost` are plain booleans by nature: `false` asserts the feature is **off**, `true` asserts it is **on**, and only leaving the key unset (`null`) skips the check.
16
+
-`cpu_governor`, `cpu_scaling_driver`, and `docker_registry_url` take a string when you want to match a specific value, but `false` has a special meaning for them — it asserts that the feature must be **absent** altogether (e.g. "no scaling governor is active on any core") rather than skipping the check.
17
+
18
+
A failed check emits a `WARN` and, depending on `system_check_threshold`, may abort the run.
19
+
20
+
If you don't yet know the right value for a given key, each section below shows the exact command to read it off the current machine. There is no single script that detects and writes out all of these `machine:` values at once — they describe the fixed identity/capacity of a specific machine (its RAM size, its RAPL wattage caps, its expected CPU governor, etc.) and are meant to be set once, deliberately, per machine. The one place a script *does* auto-prepare values for you is the [Unconditional Checks](#unconditional-checks) below, via the [NOP Linux script →]({{< relref "nop-linux" >}}).
12
21
13
22
## Temperature
14
23
@@ -59,18 +68,21 @@ To read the current limits on your machine:
Also see [NOP Linux →]({{< relref "nop-linux" >}}) for how to make these limits persistent across reboots.
71
+
Also see [Power Saving →]({{< relref "power-saving#power-capping-machines" >}}) for how to make these limits persistent across reboots via a systemd service.
63
72
64
73
## Docker Registry Mirror
65
74
66
-
Confirms that the Docker daemon is configured to use a specific registry mirror (e.g. a local cache).
75
+
Confirms that the Docker daemon's registry mirror configuration matches what you expect.
The check runs `docker info` and looks for the URL in the `Registry Mirrors` section.
83
+
84
+
Set `docker_registry_url: false` to instead assert that **no** registry mirror is configured at all — the check then fails if a `Registry Mirrors:` section is present in `docker info` output.
85
+
74
86
Also see [Container Registry →]({{< relref "container-registry" >}}).
75
87
76
88
## CPU Core Count
@@ -140,7 +152,7 @@ echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governo
140
152
sudo cpupower frequency-set -g performance
141
153
```
142
154
143
-
Also see [NOP Linux →]({{< relref "nop-linux" >}}).
155
+
Set `cpu_governor: false` to instead assert that **no** core exposes a `scaling_governor` file at all (i.e. cpufreq is not active/available on this machine).
144
156
145
157
## CPU Frequency
146
158
@@ -160,7 +172,9 @@ machine:
160
172
cpu_scaling_driver: "intel_pstate" # or "acpi-cpufreq", "cppc_cpufreq", etc.
161
173
```
162
174
163
-
A different driver can apply different power and frequency policies even when the governor setting appears identical.
175
+
Reads `/sys/devices/system/cpu/cpu*/cpufreq/scaling_driver`. A different driver can apply different power and frequency policies even when the governor setting appears identical.
176
+
177
+
Set `cpu_scaling_driver: false` to instead assert that **no** core exposes a `scaling_driver` file at all.
164
178
165
179
## SMT / Hyper-Threading
166
180
@@ -193,36 +207,101 @@ To disable Turbo Boost (Intel):
193
207
echo 1 | sudo tee /sys/devices/system/cpu/intel_pstate/no_turbo
194
208
```
195
209
196
-
## System-wide Systemd Timers
210
+
## Unconditional Checks
211
+
212
+
The following three checks need **no** `config.yml` entry at all — they always run on Linux (they are skipped, returning `None`/`OK`, on macOS and Windows) and simply verify that nothing on the machine can silently interrupt or bias a measurement.
197
213
198
-
This check runs as root and warns when any active system-wide `systemd` timer is detected. Timers can wake the system and create measurement noise.
214
+
The [NOP Linux script →]({{< relref "nop-linux" >}}) auto-prepares a machine so that all three of these pass: it disables/masks system and user `systemd` timers, deletes all cron files, and zeroes out the kernel watchdog sysctls, in addition to disabling NTP and removing swap-adjacent packages. Run it once on a fresh cluster machine instead of doing the steps below by hand.
199
215
200
-
This check is not configured via `config.yml` — it always runs on Linux. To inspect active timers:
216
+
### System-wide Systemd Timers
217
+
218
+
Runs as root and warns when any active system-wide `systemd` timer is detected. Timers can wake the system and create measurement noise. To inspect active timers:
201
219
202
220
```sh
203
221
systemctl --all list-timers
204
222
```
205
223
206
-
Also see [NOP Linux →]({{< relref "nop-linux" >}}) for a full list of services and timers to disable on cluster machines.
224
+
### Cron Files
225
+
226
+
Runs as root and warns when any cron file is found under `/var/spool/cron` or `/etc/cron*`. To inspect and remove them:
227
+
228
+
```sh
229
+
ls -la /etc/cron* /var/spool/cron* 2>/dev/null
230
+
sudo rm -fR /etc/cron* /var/spool/cron*
231
+
```
232
+
233
+
### Kernel Watchdog
234
+
235
+
Warns when the kernel's hard/soft lockup watchdog is active (any of `kernel.watchdog`, `kernel.nmi_watchdog`, or `kernel.soft_watchdog` reads non-zero). These watchdogs periodically fire NMIs/interrupts to detect a hung kernel, which can add noise to measurements.
Leaving a config-driven key unset (or `null`) always reports `INFO` — not `OK` — so it's visible at a glance which checks aren't configured yet. Checks marked "assert absence" in the last column treat `false` specially: instead of skipping, they require the feature to be completely absent from the machine.
Also see [Resource Limits]({{< relref "/docs/measuring/resource-limits" >}}) to better understand how GMT enforces resource limits on its orchestrated containers.
121
121
122
-
GMT can also verify a range of optional hardware and OS properties before each measurement run — CPU governor, turbo boost, SMT state, installed RAM, connected USB/PCI devices, RAPL power limits, and more. All are opt-in via keys under `machine:` in `config.yml`.
122
+
GMT can also verify a range of optional hardware and OS properties before each measurement run — CPU governor, turbo boost, SMT state, installed RAM, connected USB/PCI devices, RAPL power limits, and more. All are opt-in via keys under `machine:` in `config.yml`; a couple of checks (systemd timers, cron files, kernel watchdog) need no key at all and always run on Linux.
123
123
124
124
See [Machine Baseline Checks →]({{< relref "/docs/cluster/machine-baseline-checks" >}}) for the full list and configuration reference.
0 commit comments