[RFC PATCH 1/6] mm/mglru: add PUD-level Bloom filter state
Baoquan He <[email protected]>
| Newsgroups | org.kvack.linux-mm |
|---|---|
| Message-ID | <[email protected]> |
Add a second, coarser pair of double-buffered Bloom filters to struct lru_gen_mm_state. Like the PMD-level filters, they flip each generation, but they operate at 1GB (PUD) granularity so the page table walker can skip whole PUD subtrees whose 512 PMDs would all fail the PMD-level filter. This mainly targets the page tables of processes whose memory lives only on other NUMA nodes (cross-node empty walks). No behavior change yet; the filters are populated and consumed by follow-up patches. Signed-off-by: Baoquan He <[email protected]> --- include/linux/mmzone.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index a26c8b855222..2bda24522d9f 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -608,8 +608,16 @@ struct lru_gen_mm_state { struct list_head *head; /* where the last iteration ended before */ struct list_head *tail; - /* Bloom filters flip after each iteration */ + /* PMD-level Bloom filters flip after each iteration */ unsigned long *filters[NR_BLOOM_FILTERS]; + /* + * PUD-level Bloom filters flip after each iteration. Same double + * buffering as the PMD-level filters, but coarser: they remember + * which 1GB PUD subtrees had young leaf entries last generation, + * so walk_pud_range() can skip whole subtrees whose PMD iteration + * would find nothing worth scanning (e.g. cross-node empty walks). + */ + unsigned long *pud_filters[NR_BLOOM_FILTERS]; /* the mm stats for debugging */ unsigned long stats[NR_HIST_GENS][NR_MM_STATS]; }; -- 2.54.0