Thread (51 messages) 51 messages, 4 authors, 2022-04-07

Re: [PATCH v9 06/14] mm: multi-gen LRU: minimal implementation

From: Barry Song <hidden>
Date: 2022-03-19 11:15:15
Also in: linux-doc, linux-mm, lkml

+                            unsigned long *min_seq, bool can_swap, bool *need_aging)
+{
+       int gen, type, zone;
+       long old = 0;
+       long young = 0;
+       long total = 0;
+       struct lru_gen_struct *lrugen = &lruvec->lrugen;
+
+       for (type = !can_swap; type < ANON_AND_FILE; type++) {
+               unsigned long seq;
+
+               for (seq = min_seq[type]; seq <= max_seq; seq++) {
+                       long size = 0;
+
+                       gen = lru_gen_from_seq(seq);
+
+                       for (zone = 0; zone < MAX_NR_ZONES; zone++)
+                               size += READ_ONCE(lrugen->nr_pages[gen][type][zone]);
+
+                       total += size;
+                       if (seq == max_seq)
+                               young += size;
+                       if (seq + MIN_NR_GENS == max_seq)
+                               old += size;
+               }
+       }
+
+       /* try to spread pages out across MIN_NR_GENS+1 generations */
+       if (min_seq[LRU_GEN_FILE] + MIN_NR_GENS > max_seq)
+               *need_aging = true;
+       else if (min_seq[LRU_GEN_FILE] + MIN_NR_GENS < max_seq)
+               *need_aging = false;
+       else if (young * MIN_NR_GENS > total)
+               *need_aging = true;
Could we have some doc here? Given MIN_NR_GENS=2 and MAX_NR_GENS=4,
it seems you mean if we have three generations and the youngest pages are more
than 1/2 of the total pages, we need aging?

+       else if (old * (MIN_NR_GENS + 2) < total)
+               *need_aging = true;
it seems you mean if the oldest pages are less than 1/4 of the total pages,
we need aging? Can we have comments to explain why here?

your commit message only says " The aging produces young generations.
Given an lruvec, it increments max_seq when max_seq-min_seq+1
approaches MIN_NR_GENS." it can't explain what the code is doing
here.

+       else
+               *need_aging = false;
+
+       return total > 0 ? total : 0;
+}
Thanks
Barry

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help