Document ramp width as the lever for fan-noise steadiness

Span sets sensitivity: 22 points over 7c needs only 1.6c of drift to
cross a 5% deadband, over 11c it needs 2.5c. Replaying 180 recorded
samples, widening the ramp and raising the deadband took the same window
from 19 fan changes to 1.

Confirmed live under a zpool migration: 19 changes became 2, average fan
speed fell from 40% to 38%, and CPU temperature was unchanged at 64-68c.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Zeb Hering
2026-08-28 22:17:46 -07:00
parent 80fc40a1ff
commit be440e95a3

View File

@@ -120,6 +120,30 @@ hour, at which point the alarm is the outage.
`smartctl -H` across two dozen drives runs hourly, not per loop. Absolute and trend
checks stay on the fast loop.
### Ramp width controls how *bouncy* the fans are
Changing fan noise is more irritating than constant fan noise, and ramp width is the lever
for it. The span sets the sensitivity: 22 points of fan over a 7c ramp is 3.14%/degC, so
1.6c of CPU drift is enough to cross a 5% deadband. The same 22 points over 11c is
2%/degC, needing 2.5c.
Replaying 180 recorded samples from `iz-pve0` under load (CPU 57-69c) through candidate
curves, counting how often the fan would actually move:
| Ramp | Deadband | Fan changes | Distinct speeds |
|---|---|---|---|
| 62-69c | 5 | 19 | 28,31,34,37,40,43,46,50 |
| 62-69c | 8 | 6 | 28,37,46,50 |
| 62-73c | 5 | 5 | 28,34,40 |
| **62-73c** | **8** | **1** | 28,36 |
Confirmed live against a multi-hour zpool migration: **19 fan changes became 2** over a
comparable window, average fan speed dropped slightly (40% to 38%), and **CPU temperature
did not move** (64-68c against 64-69c before). The extra airflow had been buying nothing.
Widen the ramp and raise the deadband together. The cost is lag - a deadband of 8 at
2%/degC is about 4c of slack - which is affordable when you are 8-14c below any threshold.
## Calibrating a host
**The defaults are not portable and the fans will be wrong on an uncalibrated host.**