DF-0945 / run_baseline.log
=== 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.