Some odd behaviour of vmstat and vmtotal...
alfred at freebsd.org
Thu May 1 05:15:56 UTC 2008
* gnn at freebsd.org <gnn at freebsd.org> [080430 18:13] wrote:
> In deploying 7.0 at work we were finding a persistent problem when
> running "vmstat 1" on systems. The problem shows up as a 10ms "pause"
> in processing, usually packet stamping and forwarding by a user level
> process. This is due to the fact that vmstat calls the vmtotal()
> routine which in turn does a whole lot of locking. The vmtotal call
> locks and walks the VM object list twice in a mark and sweep
> So, the question is, "What is the right way to fix this?" I could
> remove the locking since the O_ACTIVE bit is not used by any other
> routine besides vmtotal, but I'm not too happy about that.
> The relevant code can be found in src/sys/vm/vm_meter.c in vmtotal().
Can you _really_ remove the locking? I don't think that would be safe
if the list is being manipulated, but I haven't checked.
Typically one uses a sentinal to get around such problems. Basically
insert a dummy object that no one should touch other than you, then
drop the lock periodically and insert it into the list, then resume.
- Alfred Perlstein
More information about the freebsd-stable