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

  1. Suite A (30 trials)run_suite.py: baseline, prlimit, systemd MemoryMax/MemoryHigh, parent/child, multi×3.
  2. Suite B — root-created /sys/fs/cgroup/system.slice/memcage-lab with direct memory.* writes; reads memory.events + memory.peak.
  3. Suite C — parent enters cgroup then forks workers (inheritance); compares oom.group 0 vs 1.

Safety

  • Preflight: abort if MemAvailable is under 4 GiB
  • Per-process targets at most 256 MiB
  • memory.swap.max=0 inside 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.