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
F132508892: D21782.id62552.diff
Fri, Oct 17, 12:36 PM
Unknown Object (File)
Thu, Oct 16, 7:19 PM
Unknown Object (File)
Thu, Oct 16, 1:17 AM
Unknown Object (File)
Sep 5 2025, 6:30 PM
Unknown Object (File)
Sep 3 2025, 1:23 PM
Unknown Object (File)
Aug 3 2025, 2:57 AM
Unknown Object (File)
Jul 28 2025, 3:31 AM
Unknown Object (File)
Jul 25 2025, 11:29 PM
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