Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

mm/damon/paddr: activate DAMOS_LRU_PRIO targets instead of marking accessed

DAMOS_LRU_DEPRIOD directly deactivates the pages, while DAMOS_LRU_PRIO
calls folio_mark_accessed(), which does incremental activation. The
incremental activation was assumed to be useful for making sure the pages
of the hot memory region are really hot. After the introduction of
DAMOS_LRU_PRIO, the young page filter has added. Users can use the young
page filter to make sure the page is eligible to be activated. Meanwhile,
the asymmetric behavior of DAMOS_LRU_[DE]PRIO can confuse users.

Directly activate given pages for DAMOS_LRU_PRIO, to eliminate the
unnecessary incremental activation steps, and be symmetric with
DAMOS_LRU_DEPRIO for easier usages.

Link: https://lkml.kernel.org/r/20260113152717.70459-5-sj@kernel.org
Signed-off-by: SeongJae Park <sj@kernel.org>
Cc: David Hildenbrand <david@kernel.org>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Liam Howlett <liam.howlett@oracle.com>
Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

SeongJae Park and committed by
Andrew Morton
80820e69 5022134c

+8 -10
+8 -10
mm/damon/paddr.c
··· 206 206 return damon_pa_core_addr(applied * PAGE_SIZE, addr_unit); 207 207 } 208 208 209 - static inline unsigned long damon_pa_mark_accessed_or_deactivate( 209 + static inline unsigned long damon_pa_de_activate( 210 210 struct damon_region *r, unsigned long addr_unit, 211 - struct damos *s, bool mark_accessed, 211 + struct damos *s, bool activate, 212 212 unsigned long *sz_filter_passed) 213 213 { 214 214 phys_addr_t addr, applied = 0; ··· 227 227 else 228 228 *sz_filter_passed += folio_size(folio) / addr_unit; 229 229 230 - if (mark_accessed) 231 - folio_mark_accessed(folio); 230 + if (activate) 231 + folio_activate(folio); 232 232 else 233 233 folio_deactivate(folio); 234 234 applied += folio_nr_pages(folio); ··· 240 240 return damon_pa_core_addr(applied * PAGE_SIZE, addr_unit); 241 241 } 242 242 243 - static unsigned long damon_pa_mark_accessed(struct damon_region *r, 243 + static unsigned long damon_pa_activate_pages(struct damon_region *r, 244 244 unsigned long addr_unit, struct damos *s, 245 245 unsigned long *sz_filter_passed) 246 246 { 247 - return damon_pa_mark_accessed_or_deactivate(r, addr_unit, s, true, 248 - sz_filter_passed); 247 + return damon_pa_de_activate(r, addr_unit, s, true, sz_filter_passed); 249 248 } 250 249 251 250 static unsigned long damon_pa_deactivate_pages(struct damon_region *r, 252 251 unsigned long addr_unit, struct damos *s, 253 252 unsigned long *sz_filter_passed) 254 253 { 255 - return damon_pa_mark_accessed_or_deactivate(r, addr_unit, s, false, 256 - sz_filter_passed); 254 + return damon_pa_de_activate(r, addr_unit, s, false, sz_filter_passed); 257 255 } 258 256 259 257 static unsigned long damon_pa_migrate(struct damon_region *r, ··· 325 327 case DAMOS_PAGEOUT: 326 328 return damon_pa_pageout(r, aunit, scheme, sz_filter_passed); 327 329 case DAMOS_LRU_PRIO: 328 - return damon_pa_mark_accessed(r, aunit, scheme, 330 + return damon_pa_activate_pages(r, aunit, scheme, 329 331 sz_filter_passed); 330 332 case DAMOS_LRU_DEPRIO: 331 333 return damon_pa_deactivate_pages(r, aunit, scheme,