Chris Li <chrisl@xxxxxxxxxx> 于2023年12月27日周三 07:43写道: > > Hi Kairui, > > Some early feedback on your patch. I am still working my way through > your patches. > Might have more questions. Hi Chris, Thanks for the review. > On Fri, Dec 22, 2023 at 2:24 AM Kairui Song <ryncsn@xxxxxxxxx> wrote: > > > > From: Kairui Song <kasong@xxxxxxxxxxx> > > > > When lru_gen is aging, it will update mm counters page by page, > > which causes a higher overhead if age happens frequently or there > > are a lot of pages in one generation getting moved. > > Optimize this by doing the counter update in batch. > > > > Although most __mod_*_state has its own caches the overhead > > is still observable. > > > > Tested in a 4G memcg on a EPYC 7K62 with: > > > > memcached -u nobody -m 16384 -s /tmp/memcached.socket \ > > -a 0766 -t 16 -B binary & > > > > memtier_benchmark -S /tmp/memcached.socket \ > > -P memcache_binary -n allkeys \ > > --key-minimum=1 --key-maximum=16000000 -d 1024 \ > > --ratio=1:0 --key-pattern=P:P -c 2 -t 16 --pipeline 8 -x 6 > > > > Average result of 18 test runs: > > > > Before: 44017.78 Ops/sec > > After: 44687.08 Ops/sec (+1.5%) > > > > Signed-off-by: Kairui Song <kasong@xxxxxxxxxxx> > > --- > > mm/vmscan.c | 64 +++++++++++++++++++++++++++++++++++++++++++++-------- > > 1 file changed, 55 insertions(+), 9 deletions(-) > > > > diff --git a/mm/vmscan.c b/mm/vmscan.c > > index b4ca3563bcf4..e3b4797b9729 100644 > > --- a/mm/vmscan.c > > +++ b/mm/vmscan.c > > @@ -3095,9 +3095,47 @@ static int folio_update_gen(struct folio *folio, int gen) > > return ((old_flags & LRU_GEN_MASK) >> LRU_GEN_PGOFF) - 1; > > } > > > > +/* > > + * Update LRU gen in batch for each lru_gen LRU list. The batch is limited to > > + * each gen / type / zone level LRU. Batch is applied after finished or aborted > > + * scanning one LRU list. > > + */ > > +struct gen_update_batch { > > + int delta[MAX_NR_GENS]; > > +}; > > + > > +static void lru_gen_update_batch(struct lruvec *lruvec, bool type, int zone, > "type" need to be int, it is either LRU_GEN_FILE or LRU_GEN_ANON. Yes, I'll update it with some more test results later.