Messages in this thread | | | From | Yu Zhao <> | Date | Tue, 22 Mar 2022 02:20:20 -0600 | Subject | Re: [PATCH v9 10/14] mm: multi-gen LRU: kill switch |
| |
On Tue, Mar 22, 2022 at 1:47 AM Barry Song <21cnbao@gmail.com> wrote: > ... > > +static bool drain_evictable(struct lruvec *lruvec) > > +{ > > + int gen, type, zone; > > + int remaining = MAX_LRU_BATCH; > > + > > + for_each_gen_type_zone(gen, type, zone) { > > + struct list_head *head = &lruvec->lrugen.lists[gen][type][zone]; > > + > > + while (!list_empty(head)) { > > + bool success; > > + struct folio *folio = lru_to_folio(head); > > + > > + VM_BUG_ON_FOLIO(folio_test_unevictable(folio), folio); > > + VM_BUG_ON_FOLIO(folio_test_active(folio), folio); > > + VM_BUG_ON_FOLIO(folio_is_file_lru(folio) != type, folio); > > + VM_BUG_ON_FOLIO(folio_zonenum(folio) != zone, folio); > > + > > + success = lru_gen_del_folio(lruvec, folio, false); > > + VM_BUG_ON(!success); > > + lruvec_add_folio(lruvec, folio); > > for example, max_seq=4(GEN=0) and max_seq-1=3, then we are supposed to put > max_seq in the head of active list. but your code seems to be putting max_seq-1 > after putting max_seq, then max_seq is more likely to be evicted > afterwards as it > is in the tail of the active list.
This is correct.
> anyway, it might not be so important. I can't imagine we will > frequently switch mglru > with lru dynamically. will we?
I certainly hope not :)
| |