On Hostsharing swap that stays costs little; pages moving in and out are changed blocks DRBD sends to the mirror. - Measures `pswpin` + `pswpout` over five minutes (MiB/s), history series `swapTraffic`, shown on the swap tile. - Amber from `metrics.swapTrafficWarningMibPerSecond` (0.1), red from `metrics.swapTrafficCriticalMibPerSecond` (1.0); the occupancy rule stays amber-only. - No sizing rule yet (follow-up once data exists). PR-doc: `docs/prs/2026-10-03-PR#102-swap-traffic.md` 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: mhoennig <michael@hoennig.de> Reviewed-on: #102
3.7 KiB
WARNING: This document describes only the change applied in this PR. It may already be outdated once the next PR is merged. Historic PR-documentation is not maintained along with new PRs — treat it as a snapshot, not as current documentation.
The Problem
Since PR#100 the swap tile turns amber when more swap is in use than metrics.swapWarningGib.
On Hostsharing, though, swap that stays costs little: backup and DRBD cost mainly where blocks change.
What costs is swap traffic: every page swapped in or out is a changed block that DRBD sends to the remote mirror, which takes bandwidth.
Werkator did not measure that traffic, so a host that kept swapping below 0.5 GiB looked calm.
Non-Goals
- The occupancy rule stays: either rule is enough for amber.
- No sizing rule yet: the traffic is recorded first, as RFC 0004 asks, and judged once its numbers are understood.
- The health verdict is unchanged.
The Scenarios
Feature: Swap traffic colours the swap readings
Scenario#102.01: Swap traffic is measured over five minutes
So that a single short burst does not count like a host that keeps swapping.
- Given the
pswpinandpswpoutcounters of/proc/vmstat - When samples are taken a minute apart, ten minutes apart, and after a counter went backwards
- Then the traffic is null for a single sample, the pages moved per second in MiB/s, zero once the burst left the window, and null again after a reboot
- And every snapshot carries both thresholds
Verified by
- SystemMetricsCollectorUnitTest — Scenario#102.01
Scenario#102.02: Traffic turns the readings amber and red, occupancy only amber
So that only what costs the mirror can raise the alarm.
- Given snapshots with traffic below, at the warning, and at the critical threshold, and with a lot of swap in use but no traffic
- When the swap level is judged
- Then it is calm, amber, and red, and amber for the occupancy alone
- And the System page's swap tile reads
in use · moving 1.25 MiB/s, and the home rail's tooltip says the same
Verified by
- UiViewsUnitTest — Scenario#102.02
Scenario#102.03: 0.1 and 1.0 MiB/s by default, off with null
So that the defaults are cautious, and a host can set its own.
- Given an instance file without and with the two keys
- When the configuration is loaded
- Then the thresholds are 0.1 and 1.0, or what the file says, and null turns one off
Verified by
- ConfigLoaderUnitTest — Scenario#102.03
The Solution
SystemMetricsCollectorreadspswpinandpswpoutwith every sample and keeps five minutes of counts in memory; the traffic is the pages moved since the oldest of them, at 4 KiB a page. It goes into the snapshot and into the history as the seriesswapTraffic.MetricsConfighasswapTrafficWarningMibPerSecond(0.1) andswapTrafficCriticalMibPerSecond(1.0), instance-level like the rest ofmetrics, and the snapshot carries them forwerkator.js.UiFormats.swapLeveltakes the whole snapshot now: critical traffic is red, warning traffic, the occupancy aboveswapWarningGibor half the swap is amber;werkator.jsdecides the same way.- The defaults are set low on purpose: 0.1 MiB/s for a day is about 8 GB through the mirror.
Additional Changes
docs/configuration.mdand theinittemplate describe the two keys.- Version 1.33.0 with its release note.
Follow-up PRs
- A RAM sizing rule on swap traffic, once a few weeks of the
swapTrafficseries show what its numbers mean.