DragonFlyBSD Kernel Audit
DF-0945 / run_baseline.log
← back to finding ↓ download raw
=== DF-0945 exp3 on UNPATCHED kernel #0 (baseline) ===
=== Tue Jul  7 13:54:06 UTC 2026 SWAP_MB=8 STRESS_MB=3250 RUNS=200 ===
kern.version: DragonFly 6.5-DEVELOPMENT #0: Thu Jul  2 06:02:54 UTC 2026

--- initial swap ---
Device:       512-blocks      Used:
/dev/vbd0s1b     8388608          0
/dev/vn1           16384          0

--- starting stressor 3250 MB for 120s ---
--- waiting 25s for dirty+swap ---
--- PRE-TOGGLE swap state ---
vm.swap_anon_use: 198931
vm.swap_free: 851565
vm.stats.vm.v_free_count: 12007

--- TOGGLE LOOP (200 iterations) ---
  iter=20  ok=20  fail=0  swap_anon=196949  swap_free=853547   free=11861
  iter=40  ok=40  fail=0  swap_anon=196949  swap_free=853547   free=11788
  iter=60  ok=60  fail=0  swap_anon=235605  swap_free=814571   free=11382
  iter=80  ok=80  fail=0  swap_anon=331047  swap_free=719449   free=11382
  iter=100 ok=100 fail=0  swap_anon=331047  swap_free=719449   free=11322
  iter=120 ok=120 fail=0  swap_anon=331047  swap_free=719449   free=11307
  iter=140 ok=140 fail=0  swap_anon=379625  swap_free=670791   free=10682
  iter=160 ok=160 fail=0  swap_anon=473481  swap_free=576519   free=11358
  iter=180 ok=180 fail=0  swap_anon=530006  swap_free=520490   free=11187
  iter=200 ok=200 fail=0  swap_anon=530006  swap_free=520490   free=10800

--- DONE: 200 iters ok=200 fail=0 ---
--- POST-TOGGLE ---
vm.swap_anon_use: 530006
vm.swap_free: 520490
vm.stats.vm.v_free_count: 10800
Device:       512-blocks      Used:
/dev/vbd0s1b     8388608    4240048
/dev/vn1           16384          0

=== complete Tue Jul  7 13:54:56 UTC 2026 ===

boot.log during toggle phase (from serial console):
  login: swap_pager: out of swap space
  swap_pager_getswapspace: swap full allocating 16 pages
  swap_pager: out of swap space
  swap_pager_getswapspace: swap full allocating 16 pages
  swap_pager_getswapspace: swap full allocating 16 pages
  swap_pager_getswapspace: swap full allocating 16 pages

NOTE: "swap full allocating 16 pages" is printed when blist_allocat() returns
SWAPBLK_NONE despite ~2 GB of swap being free (swap_free went from 851565 to
520490 = ~2 GB still free). This false-positive swap exhaustion is caused by
concurrent blist radix-tree mutation: swapoff_one()'s blist_fill/blist_resize
(under swap_mtx) corrupt the tree while swp_pager_getswapspace()'s blist_allocat
(under vm_token) is traversing it. swap_anon_use grew from 198931 to 530006
(pager struggling to allocate swap due to corrupted tree). System survived
because the corruption was transient and swap_pager_full was cleared on swapon.