Fail-slow hardware
Why is fail-slow the normal hardware failure mode, and how does masking cause it?
The evidence worth carrying is a field study by Gunawi and colleagues across large operators. It found:
- disks delivering a small fraction of their rated throughput for months,
- network cards degraded by firmware bugs,
- CPUs throttled by heat because of a failing fan (Wayhop's search node),
- SSDs whose internal garbage collection stalls writes for seconds,
- memory degraded by correctable-error handling.
The prevalence is high enough that fail-slow should be treated as the normal hardware failure mode, and fail-stop as the fortunate one.
Masking converts failures into slowness
The cause is design, not bad luck. Every layer of the stack has been given internal redundancy and error correction to improve reliability, and each of these mechanisms converts a hard failure into a slow one:
- NAND read-retry and ECC (error-correcting codes) turn an unreadable flash page into a slow page.
- Sector remapping turns a bad disk sector into an extra seek.
- RAID and erasure-coded rebuild turn a dead drive into a degraded array.
- TCP retransmission turns packet loss into latency.
- Connection pools turn a dead connection into a wait.
- Retries turn a failed request into a slow one.
So the industry systematically moved its failures from the error channel to the latency channel. That was the right choice for availability, and it has a consequence nobody priced: the error channel has a schema, an observer and an alert; the latency channel has a distribution nobody is watching the tail of. Errors are counted, logged, typed and paged on. Latency is averaged. A failure moved from the first channel to the second becomes invisible by that move alone.
So for any masking mechanism, ask what signal was consumed, and instrument that: retry counts, correction counts, rebuild state, fallback invocations, coercion counts. The masked path is precisely where a failure can persist indefinitely without an observer. The strong form: a masking mechanism without a counter is a mechanism for hiding failures, not for surviving them.