diff options
| author | Kiryl Shutsemau (Meta) <kas@kernel.org> | 2026-10-12 15:30:09 +0100 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2026-10-13 04:01:32 -0700 |
| commit | 549531755d329ec48439e3263535351ba1c5acd5 (patch) | |
| tree | e56d24e86147e65a8ade3cfe69dee2bfdac279fa | |
| parent | 82fc13ff3a1e35fdd5e4c83b26877d18a7502511 (diff) | |
mm: count the runs of the expedite workrcu-free-v3
For observation: the new pgfree_rcu_kick event counts the runs of
rcu_free_expedite_workfn() that found folios to free. Each of them
calls synchronize_rcu_expedited().
With only hot folios marked it stays at 0 on tmpfs fallocate() and
punch-hole loops, and with 9G free.
Assisted-by: LLM
Signed-off-by: Kiryl Shutsemau (Meta) <kas@kernel.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
| -rw-r--r-- | include/linux/vm_event_item.h | 1 | ||||
| -rw-r--r-- | mm/page_alloc.c | 1 | ||||
| -rw-r--r-- | mm/vmstat.c | 1 |
3 files changed, 3 insertions, 0 deletions
diff --git a/include/linux/vm_event_item.h b/include/linux/vm_event_item.h index 095cdb9997ca..cb5cee1e85af 100644 --- a/include/linux/vm_event_item.h +++ b/include/linux/vm_event_item.h @@ -37,6 +37,7 @@ enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT, FOR_ALL_ZONES(PGSCAN_SKIP) PGFREE, PGACTIVATE, PGDEACTIVATE, PGLAZYFREE, PGFREE_RCU, PGFREE_RCU_DONE, PGFREE_RCU_MARK, + PGFREE_RCU_KICK, PGFREE_RCU_DRAIN, PGFAULT, PGMAJFAULT, PGLAZYFREED, diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 1f69c96ae3e0..505dc10e8e30 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -1444,6 +1444,7 @@ static void rcu_free_expedite_workfn(struct work_struct *work) if (list_empty(&list)) return; + count_vm_event(PGFREE_RCU_KICK); synchronize_rcu_expedited(); rcu_free_pages(&list); } diff --git a/mm/vmstat.c b/mm/vmstat.c index 7341c8b4d3fa..8df8a309e736 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c @@ -1347,6 +1347,7 @@ const char * const vmstat_text[] = { [I(PGFREE_RCU)] = "pgfree_rcu", [I(PGFREE_RCU_DONE)] = "pgfree_rcu_done", [I(PGFREE_RCU_MARK)] = "pgfree_rcu_mark", + [I(PGFREE_RCU_KICK)] = "pgfree_rcu_kick", [I(PGFREE_RCU_DRAIN)] = "pgfree_rcu_drain", [I(PGFAULT)] = "pgfault", |
