[issue884] Performance/memory problems under filesystem IO load
nthery at gmail.com
Wed Dec 19 01:19:15 PST 2007
2007/12/14, Hasso Tepper <sinknull at crater.dragonflybsd.org>:
> All tests are done with this command:
> dd if=/dev/zero of=./file bs=4096k count=1000
> There is one more strange thing in running these tests. I looked at memory
> stats in top before and after running dd.
> Mem: 42M Active, 40M Inact, 95M Wired, 304K Cache, 53M Buf, 795M Free
> Mem: 70M Active, 679M Inact, 175M Wired, 47M Cache, 109M Buf, 1752K Free
FWIW, I observe similar figures. I also noticed that deleting ./file
and waiting a bit restores memory to the "before" state.
The size increase in the wired pool can be reproduced more simply with:
sysctl vm.stats.vm.v_wire_count # A
dd if=/dev/zero of=./file bs=4096k count=1
sysctl vm.stats.vm.v_wire_count # B
sysctl vm.stats.vm.v_wire_count # C
A == C && B == A + 1
I traced this with gdb. The additional wired page is part of a struct
buf (b_xio) instance tied to the ./file vnode. I reckon this vnode
stays cached (namecache?) when the dd process ends and deleting ./file
forces destruction of the vnode.
AFAIU wired pages can not be reclaimed by the pager when memory is
low. So is it normal to keep b_xio pages wired when they are "just"
cached in a vnode (i.e. no ongoing r/w operation)?
More information about the Bugs