aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKiryl Shutsemau (Meta) <kas@kernel.org>2026-10-12 15:30:09 +0100
committerLinus Torvalds <torvalds@linux-foundation.org>2026-10-13 04:01:32 -0700
commit549531755d329ec48439e3263535351ba1c5acd5 (patch)
treee56d24e86147e65a8ade3cfe69dee2bfdac279fa
parent82fc13ff3a1e35fdd5e4c83b26877d18a7502511 (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.h1
-rw-r--r--mm/page_alloc.c1
-rw-r--r--mm/vmstat.c1
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",