在 2020/11/26 下午12:52, Yu Zhao 写道: >> */ >> void __pagevec_lru_add(struct pagevec *pvec) >> { >> - int i; >> - struct lruvec *lruvec = NULL; >> + int i, nr_lruvec; >> unsigned long flags = 0; >> + struct page *page; >> + struct lruvecs lruvecs; >> >> - for (i = 0; i < pagevec_count(pvec); i++) { >> - struct page *page = pvec->pages[i]; >> + nr_lruvec = sort_page_lruvec(&lruvecs, pvec); > Simply looping pvec multiple times (15 at most) for different lruvecs > would be better because 1) it requires no extra data structures and > therefore has better cache locality (theoretically faster) 2) it only > loops once when !CONFIG_MEMCG and !CONFIG_NUMA and therefore has no > impact on Android and Chrome OS. > With multiple memcgs, it do help a lot, I had gotten 30% grain on readtwice case. but yes, w/o MEMCG and NUMA, it's good to keep old behavior. So would you like has a proposal for this? Thanks Alex