Methods
Host
- 4× Intel Xeon E5-2690 v3 @ 2.60 GHz
- 23 GiB RAM, ~8 GiB swap (per-cgroup swap disabled in experiments)
- Linux 6.12.0 UEK, cgroup2 unified hierarchy with
memory_recursiveprot - Live Hermes agent host (multi-tenant with gateway, dashboard, crons)
Workload
experiments/memhog.py allocates anonymous bytearray chunks and touches every 4 KiB page so charges hit RSS. Emits structured progress lines for offline labeling.
Suites
- Suite A (30 trials) —
run_suite.py: baseline,prlimit, systemd MemoryMax/MemoryHigh, parent/child, multi×3. - Suite B — root-created
/sys/fs/cgroup/system.slice/memcage-labwith directmemory.*writes; readsmemory.events+memory.peak. - Suite C — parent enters cgroup then forks workers (inheritance); compares
oom.group0 vs 1.
Safety
- Preflight: abort if MemAvailable is under 4 GiB
- Per-process targets at most 256 MiB
memory.swap.max=0inside experimental cgroups- No intentional host-level OOM
Threats
Single host/kernel; synthetic allocator; systemd property gaps (documented as findings); global swap already under pressure at suite start.