From: Yu Zhao <yuzhao@google.com>
To: Barry Song <21cnbao@gmail.com>
Cc: "Andrew Morton" <akpm@linux-foundation.org>,
"Linus Torvalds" <torvalds@linux-foundation.org>,
"Andi Kleen" <ak@linux.intel.com>,
"Aneesh Kumar" <aneesh.kumar@linux.ibm.com>,
"Catalin Marinas" <catalin.marinas@arm.com>,
"Dave Hansen" <dave.hansen@linux.intel.com>,
"Hillf Danton" <hdanton@sina.com>, "Jens Axboe" <axboe@kernel.dk>,
"Jesse Barnes" <jsbarnes@google.com>,
"Johannes Weiner" <hannes@cmpxchg.org>,
"Jonathan Corbet" <corbet@lwn.net>,
"Matthew Wilcox" <willy@infradead.org>,
"Mel Gorman" <mgorman@suse.de>,
"Michael Larabel" <Michael@michaellarabel.com>,
"Michal Hocko" <mhocko@kernel.org>,
"Mike Rapoport" <rppt@kernel.org>,
"Rik van Riel" <riel@surriel.com>,
"Vlastimil Babka" <vbabka@suse.cz>,
"Will Deacon" <will@kernel.org>,
"Ying Huang" <ying.huang@intel.com>,
LAK <linux-arm-kernel@lists.infradead.org>,
"Linux Doc Mailing List" <linux-doc@vger.kernel.org>,
LKML <linux-kernel@vger.kernel.org>,
Linux-MM <linux-mm@kvack.org>,
"Kernel Page Reclaim v2" <page-reclaim@google.com>,
x86 <x86@kernel.org>, "Brian Geffon" <bgeffon@google.com>,
"Jan Alexander Steffens" <heftig@archlinux.org>,
"Oleksandr Natalenko" <oleksandr@natalenko.name>,
"Steven Barrett" <steven@liquorix.net>,
"Suleiman Souhlal" <suleiman@google.com>,
"Daniel Byrne" <djbyrne@mtu.edu>,
"Donald Carr" <d@chaos-reins.com>,
"Holger Hoffstätte" <holger@applied-asynchrony.com>,
"Konstantin Kharlamov" <Hi-Angel@yandex.ru>,
"Shuang Zhai" <szhai2@cs.rochester.edu>,
"Sofia Trinh" <sofia.trinh@edi.works>,
"Vaibhav Jain" <vaibhav@linux.ibm.com>
Subject: Re: [PATCH v9 06/14] mm: multi-gen LRU: minimal implementation
Date: Mon, 21 Mar 2022 18:30:06 -0600 [thread overview]
Message-ID: <CAOUHufYmUPZY0gCC+wYk6Vr1L8KEx+tJeEAhjpBfUnLJsAHq5A@mail.gmail.com> (raw)
In-Reply-To: <CAGsJ_4zw0gX0+OPE3MPaSRH53LdVR0TNv1RN5DK9dtNPvgd8iQ@mail.gmail.com>
On Sat, Mar 19, 2022 at 5:15 AM Barry Song <21cnbao@gmail.com> wrote:
>
> > + 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?
Will do.
> 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?
Yes.
> > + 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?
Yes.
> 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.
Fair enough. Approaching MIN_NR_GENS=2 means getting close to it. From
the consumer's POV, if it *reaches* 2, the eviction will have to
stall, because the two youngest generations are not yet fully aged,
i.e., the second chance policy similar to the active/inactive lru.
From the producer's POV, the aging tries to be lazy to reduce the
overhead. So ideally, we want 3 generations, which gives a reasonable
range [2, 4], hence the first two if's.
In addition, we want pages to spread out evenly over these 3
generations, meaning an average 1/3 of total pages for each
generation, which gives another reasonable range [1/2, 1/4]. Since the
eviction reduces the number of old pages, we only need to check
against the lower bound, i.e., 1/4. On the other hand, page (re)faults
increase the number of young pages, so in this case, we need to check
against the upper bound.
I'll include these details in the next spin.
next prev parent reply other threads:[~2022-03-22 0:30 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-09 2:12 [PATCH v9 00/14] Multi-Gen LRU Framework Yu Zhao
2022-03-09 2:12 ` [PATCH v9 01/14] mm: x86, arm64: add arch_has_hw_pte_young() Yu Zhao
2022-03-11 10:55 ` Barry Song
2022-03-11 22:57 ` Yu Zhao
2022-03-09 2:12 ` [PATCH v9 02/14] mm: x86: add CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG Yu Zhao
2022-03-16 22:15 ` Barry Song
2022-03-09 2:12 ` [PATCH v9 03/14] mm/vmscan.c: refactor shrink_node() Yu Zhao
2022-03-18 1:15 ` Barry Song
2022-03-09 2:12 ` [PATCH v9 04/14] Revert "include/linux/mm_inline.h: fold __update_lru_size() into its sole caller" Yu Zhao
2022-03-09 2:12 ` [PATCH v9 05/14] mm: multi-gen LRU: groundwork Yu Zhao
2022-03-14 8:08 ` Huang, Ying
2022-03-14 9:30 ` Yu Zhao
2022-03-15 0:34 ` Huang, Ying
2022-03-15 0:50 ` Yu Zhao
2022-03-21 18:58 ` Justin Forbes
2022-03-21 19:17 ` Prarit Bhargava
2022-03-22 4:52 ` Yu Zhao
2022-03-16 23:25 ` Barry Song
2022-03-21 9:04 ` Yu Zhao
2022-03-21 11:47 ` Barry Song
2022-03-09 2:12 ` [PATCH v9 06/14] mm: multi-gen LRU: minimal implementation Yu Zhao
2022-03-16 5:55 ` Huang, Ying
2022-03-16 7:54 ` Yu Zhao
2022-03-19 3:01 ` Barry Song
2022-03-19 3:11 ` Yu Zhao
2022-03-23 7:47 ` Barry Song
2022-03-24 6:24 ` Yu Zhao
2022-03-24 8:13 ` Barry Song
2022-03-19 10:14 ` Barry Song
2022-03-21 23:51 ` Yu Zhao
2022-03-19 11:15 ` Barry Song
2022-03-22 0:30 ` Yu Zhao [this message]
2022-03-21 12:51 ` Aneesh Kumar K.V
2022-03-22 4:02 ` Yu Zhao
2022-03-21 13:01 ` Aneesh Kumar K.V
2022-03-22 4:39 ` Yu Zhao
2022-03-22 5:26 ` Aneesh Kumar K.V
2022-03-22 5:55 ` Yu Zhao
2022-03-09 2:12 ` [PATCH v9 07/14] mm: multi-gen LRU: exploit locality in rmap Yu Zhao
2022-04-07 2:29 ` Barry Song
2022-04-07 3:04 ` Yu Zhao
2022-04-07 3:46 ` Barry Song
2022-04-07 23:51 ` Yu Zhao
2022-03-09 2:12 ` [PATCH v9 08/14] mm: multi-gen LRU: support page table walks Yu Zhao
2022-03-09 2:12 ` [PATCH v9 09/14] mm: multi-gen LRU: optimize multiple memcgs Yu Zhao
2022-03-09 2:12 ` [PATCH v9 10/14] mm: multi-gen LRU: kill switch Yu Zhao
2022-03-22 7:47 ` Barry Song
2022-03-22 8:20 ` Yu Zhao
2022-03-22 8:45 ` Barry Song
2022-03-22 9:00 ` Yu Zhao
2022-03-09 2:12 ` [PATCH v9 11/14] mm: multi-gen LRU: thrashing prevention Yu Zhao
2022-03-22 7:22 ` Barry Song
2022-03-22 8:14 ` Yu Zhao
2022-03-09 2:12 ` [PATCH v9 12/14] mm: multi-gen LRU: debugfs interface Yu Zhao
2022-03-09 2:12 ` [PATCH v9 13/14] mm: multi-gen LRU: admin guide Yu Zhao
2022-03-10 12:29 ` Mike Rapoport
2022-03-11 0:37 ` Yu Zhao
2022-03-09 2:12 ` [PATCH v9 14/14] mm: multi-gen LRU: design doc Yu Zhao
2022-03-11 8:22 ` Mike Rapoport
2022-03-11 9:38 ` Yu Zhao
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAOUHufYmUPZY0gCC+wYk6Vr1L8KEx+tJeEAhjpBfUnLJsAHq5A@mail.gmail.com \
--to=yuzhao@google.com \
--cc=21cnbao@gmail.com \
--cc=Hi-Angel@yandex.ru \
--cc=Michael@michaellarabel.com \
--cc=ak@linux.intel.com \
--cc=akpm@linux-foundation.org \
--cc=aneesh.kumar@linux.ibm.com \
--cc=axboe@kernel.dk \
--cc=bgeffon@google.com \
--cc=catalin.marinas@arm.com \
--cc=corbet@lwn.net \
--cc=d@chaos-reins.com \
--cc=dave.hansen@linux.intel.com \
--cc=djbyrne@mtu.edu \
--cc=hannes@cmpxchg.org \
--cc=hdanton@sina.com \
--cc=heftig@archlinux.org \
--cc=holger@applied-asynchrony.com \
--cc=jsbarnes@google.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@suse.de \
--cc=mhocko@kernel.org \
--cc=oleksandr@natalenko.name \
--cc=page-reclaim@google.com \
--cc=riel@surriel.com \
--cc=rppt@kernel.org \
--cc=sofia.trinh@edi.works \
--cc=steven@liquorix.net \
--cc=suleiman@google.com \
--cc=szhai2@cs.rochester.edu \
--cc=torvalds@linux-foundation.org \
--cc=vaibhav@linux.ibm.com \
--cc=vbabka@suse.cz \
--cc=will@kernel.org \
--cc=willy@infradead.org \
--cc=x86@kernel.org \
--cc=ying.huang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox