Page MenuHomeFreeBSD

Add some counters for per-page queue operations.
ClosedPublic

Authored by markj on Sep 24 2019, 4:28 PM.
Tags
None
Referenced Files
Unknown Object (File)
Tue, Oct 21, 6:06 AM
Unknown Object (File)
Tue, Oct 21, 6:06 AM
Unknown Object (File)
Tue, Oct 21, 6:06 AM
Unknown Object (File)
Mon, Oct 20, 7:26 PM
Unknown Object (File)
Sat, Oct 18, 2:34 AM
Unknown Object (File)
Fri, Oct 17, 12:36 PM
Unknown Object (File)
Thu, Oct 16, 7:19 PM
Unknown Object (File)
Thu, Oct 16, 1:17 AM
Subscribers

Details

Summary

This is a counterpart to the counters we have in vm_object.c. For now,
add counters for queue operations: the number of dequeues and requeues
(queue_ops), and the number of batch entries which resulted in no queue
updates (queue_nops). A NOP occurs when the page's queue state has been
updated between the batch enqueue and completion. This occurs most
often when vm_page_free_prep() begins a batched dequeue and the page is
fully dequeued by vm_page_alloc() before the batch entry is processed.
This can happen easily with page allocated from the UMA cache, which is
LIFO.

Test Plan

After bootup and a kernel build I have:

markj@biggie> sysctl vm.stats.page
vm.stats.page.queue_nops: 98184
vm.stats.page.queue_ops: 23363542

In some workloads the ratio nops/ops can be significantly
larger. These are targets for optimization, since a high ratio
implies that we are taking the page queue locks more often
than necessary.

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Not Applicable
Unit
Tests Not Applicable