Hi Gregory On 4/24/26 6:51 PM, Gregory Price wrote: > On Fri, Apr 24, 2026 at 06:27:02PM +0530, Donet Tom wrote: >>> + >>> + /* >>> + * Record only accesses from lower tiers. >>> + */ >>> + if (node_is_toptier(pfn_to_nid(pfn))) >>> + return 0; >> >> Just a thought—could we check this at the beginning of the function, before >> the switch case? >> >> > Can you please trim responses to omit un-related code? Not all of us use > mail clients that auto-collapse quoted regions and it takes a lot of > scrolling to reach here n_n;;; Apologies for that, and thanks for pointing it out. I’ll keep the responses concise and include only the relevant parts going forward. > >>> +static void kmigrated_do_work(pg_data_t *pgdat) >>> +{ >>> + unsigned long section_nr, s_begin, start_pfn; >>> + struct mem_section *ms; >>> + int nid; >>> + >>> + clear_bit(PGDAT_KMIGRATED_ACTIVATE, &pgdat->flags); >>> + s_begin = next_present_section_nr(-1); >>> + for_each_present_section_nr(s_begin, section_nr) { >>> + start_pfn = section_nr_to_pfn(section_nr); >> >> I may be missing something, but in pghot_setup_hot_map() and >> kmigrated_do_work() we seem to iterate over all memory sections. On large >> memory systems, could this become a bottleneck right? >> > I think this is going to end up being a function of page / section size. > > I would hesitate to over-optimize on this early-on, otherwise we'll find Sure. > ourselves re-building a bunch of DAMON functionality that chunks memory > into regions and such. > > But it is a concern. > >> Since hot_map is allocated only for lower-tier memory and the hotness >> information is primarily used there, would it make sense to skip scanning >> higher-tier sections? >> >> for_each_online_node(nid) { >>         if (node_is_toptier(nid)) >>             continue; >> >>         start_pfn = node_start_pfn(nid); >>         end_pfn = node_end_pfn(nid); >> >>         s_begin = pfn_to_section_nr(start_pfn); >>         for_each_present_section_nr(s_begin, section_nr) { >>     } >> } >> >> Would this approach be reasonable, or am I overlooking something? >> > re: your note later on - kmigrated doesn't run for top tier nodes > > kmigrated_run() { if (node_is_toptier(nid)) return 0; } > >>> + >>> +static int kmigrated_run(int nid) >>> +{ >>> + pg_data_t *pgdat = NODE_DATA(nid); >>> + int ret; >>> + >>> + if (node_is_toptier(nid)) >>> + return 0; >> I might be missing something, but since this function is only called from >> pghot_init(), would it make sense to check the condition before calling >> kmigrated_run() to avoid the function call overhead? >> > this gets optimized out when static is inlined and optimized. > Thanks, Gregory. I might be missing something, but since kmigrated_run() is not marked inline (static int kmigrated_run()), will it still be optimized or inlined by the compiler without the inline keyword?- Donet > > ~Gregory >