On Wed, Oct 18, 2023 at 8:17 PM Huan Yang <link@xxxxxxxx> wrote: > > Hi Yu Zhao, > > Thanks for your reply. > > 在 2023/10/19 0:21, Yu Zhao 写道: > > On Wed, Oct 18, 2023 at 2:22 AM Huan Yang <link@xxxxxxxx> wrote: > >> For multi-gen lru reclaim in evict_folios, like shrink_inactive_list, > >> gather folios which isolate to reclaim, and invoke shirnk_folio_list. > >> > >> But, when complete shrink, it not gather shrink reclaim stat into sc, > >> we can't get info like nr_dirty\congested in reclaim, and then > >> control writeback, dirty number and mark as LRUVEC_CONGESTED, or > >> just bpf trace shrink and get correct sc stat. > >> > >> This patch fix this by simple copy code from shrink_inactive_list when > >> end of shrink list. > > MGLRU doesn't try to write back dirt file pages in the reclaim path -- > > it filters them out in sort_folio() and leaves them to the page > Nice to know this, sort_folio() filters some folio indeed. > But, I want to know, if we touch some folio in shrink_folio_list(), may some > folio become dirty or writeback even if sort_folio() filter then? Good question: in that case MGLRU still doesn't try to write those folios back because isolate_folio() cleared PG_reclaim and shrink_folio_list() checks PG_reclaim: if (folio_test_dirty(folio)) { /* * Only kswapd can writeback filesystem folios * to avoid risk of stack overflow. But avoid * injecting inefficient single-folio I/O into * flusher writeback as much as possible: only * write folios when we've encountered many * dirty folios, and when we've already scanned * the rest of the LRU for clean folios and see * the same dirty folios again (with the reclaim * flag set). */ if (folio_is_file_lru(folio) && (!current_is_kswapd() || !folio_test_reclaim(folio) || !test_bit(PGDAT_DIRTY, &pgdat->flags))) {