From: Zach O'Keefe <zokeefe@google.com>
To: Peter Xu <peterx@redhat.com>
Cc: Alex Shi <alex.shi@linux.alibaba.com>,
David Hildenbrand <david@redhat.com>,
David Rientjes <rientjes@google.com>,
Matthew Wilcox <willy@infradead.org>,
Michal Hocko <mhocko@suse.com>,
Pasha Tatashin <pasha.tatashin@soleen.com>,
Rongwei Wang <rongwei.wang@linux.alibaba.com>,
SeongJae Park <sj@kernel.org>, Song Liu <songliubraving@fb.com>,
Vlastimil Babka <vbabka@suse.cz>, Yang Shi <shy828301@gmail.com>,
Zi Yan <ziy@nvidia.com>,
linux-mm@kvack.org, Andrea Arcangeli <aarcange@redhat.com>,
Andrew Morton <akpm@linux-foundation.org>,
Arnd Bergmann <arnd@arndb.de>,
Axel Rasmussen <axelrasmussen@google.com>,
Chris Kennelly <ckennelly@google.com>,
Chris Zankel <chris@zankel.net>, Helge Deller <deller@gmx.de>,
Hugh Dickins <hughd@google.com>,
Ivan Kokshaysky <ink@jurassic.park.msu.ru>,
"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
Jens Axboe <axboe@kernel.dk>,
"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
Matt Turner <mattst88@gmail.com>,
Max Filippov <jcmvbkbc@gmail.com>,
Miaohe Lin <linmiaohe@huawei.com>,
Minchan Kim <minchan@kernel.org>,
Patrick Xia <patrickx@google.com>,
Pavel Begunkov <asml.silence@gmail.com>,
Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Subject: Re: [PATCH v6 01/15] mm: khugepaged: don't carry huge page to the next loop for !CONFIG_NUMA
Date: Wed, 29 Jun 2022 18:15:01 -0700 [thread overview]
Message-ID: <Yrz5FfLesXOktJTn@google.com> (raw)
In-Reply-To: <Yry60Pbm4DAkqFy9@xz-m1.local>
On Jun 29 16:49, Peter Xu wrote:
> On Fri, Jun 03, 2022 at 05:39:50PM -0700, Zach O'Keefe wrote:
> > -static bool khugepaged_prealloc_page(struct page **hpage, bool *wait)
> > +/* Sleep for the first alloc fail, break the loop for the second fail */
> > +static bool alloc_fail_should_sleep(struct page **hpage, bool *wait)
> > {
> > if (IS_ERR(*hpage)) {
> > if (!*wait)
> > - return false;
> > + return true;
> >
> > *wait = false;
> > *hpage = NULL;
> > khugepaged_alloc_sleep();
> > - } else if (*hpage) {
> > - put_page(*hpage);
> > - *hpage = NULL;
> > }
> > -
> > - return true;
> > + return false;
> > }
>
> One nitpick here:
>
> It's weird to me to sleep in a function called XXX_should_sleep(), we'd
> normally expect to sleep only if it returns true.
>
> Meanwhile, would this be a very good chance to unwrap this function already
> to remove the "bool*" reference, which looks not pretty? Something like:
>
> ---8<---
> diff --git a/mm/khugepaged.c b/mm/khugepaged.c
> index 16be62d493cd..807c10cd0816 100644
> --- a/mm/khugepaged.c
> +++ b/mm/khugepaged.c
> @@ -2235,9 +2235,6 @@ static void khugepaged_do_scan(void)
> lru_add_drain_all();
>
> while (progress < pages) {
> - if (!khugepaged_prealloc_page(&hpage, &wait))
> - break;
> -
> cond_resched();
>
> if (unlikely(kthread_should_stop() || try_to_freeze()))
> @@ -2253,6 +2250,18 @@ static void khugepaged_do_scan(void)
> else
> progress = pages;
> spin_unlock(&khugepaged_mm_lock);
> +
> + if (IS_ERR(*hpage)) {
> + /*
> + * If fail to allocate the first time, try to sleep
> + * for a while. When hit again, cancel the scan.
> + */
> + if (!wait)
> + break;
> + wait = false;
> + *hpage = NULL;
> + khugepaged_alloc_sleep();
> + }
> }
> ---8<---
>
> Would this look slightly better?
Hey Peter,
Thanks for taking the time to review. I think open coding this looks good. One
small detail is that if we move this to the end of the loop, we'll need to check
that progress < pages still before sleeping - else we run the risk of doing an
alloc sleep and a scan sleep.
But I'll let Yang make the call since it's his patch - he's just been kind
enough to donate it for this cause :)
Thanks,
Zach
> Thanks,
>
> --
> Peter Xu
>
next prev parent reply other threads:[~2022-06-30 1:15 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-04 0:39 [PATCH v6 00/15] mm: userspace hugepage collapse Zach O'Keefe
2022-06-04 0:39 ` [PATCH v6 01/15] mm: khugepaged: don't carry huge page to the next loop for !CONFIG_NUMA Zach O'Keefe
2022-06-06 18:25 ` Yang Shi
2022-06-29 20:49 ` Peter Xu
2022-06-30 1:15 ` Zach O'Keefe [this message]
2022-06-04 0:39 ` [PATCH v6 02/15] mm/khugepaged: record SCAN_PMD_MAPPED when scan_pmd() finds THP Zach O'Keefe
2022-06-06 20:45 ` Yang Shi
2022-06-07 16:01 ` Zach O'Keefe
2022-06-07 19:32 ` Zach O'Keefe
2022-06-07 21:27 ` Yang Shi
2022-06-08 0:27 ` Zach O'Keefe
2022-06-04 0:39 ` [PATCH v6 03/15] mm/khugepaged: add struct collapse_control Zach O'Keefe
2022-06-06 2:41 ` kernel test robot
2022-06-06 16:40 ` Zach O'Keefe
2022-06-06 16:40 ` Zach O'Keefe
2022-06-06 20:20 ` Yang Shi
2022-06-06 20:20 ` Yang Shi
2022-06-06 21:22 ` Yang Shi
2022-06-06 21:22 ` Yang Shi
2022-06-06 22:23 ` Andrew Morton
2022-06-06 22:23 ` Andrew Morton
2022-06-06 23:53 ` Yang Shi
2022-06-06 23:53 ` Yang Shi
2022-06-08 0:42 ` Zach O'Keefe
2022-06-08 0:42 ` Zach O'Keefe
2022-06-08 1:00 ` Yang Shi
2022-06-08 1:00 ` Yang Shi
2022-06-08 1:06 ` Zach O'Keefe
2022-06-08 1:06 ` Zach O'Keefe
2022-06-04 0:39 ` [PATCH v6 04/15] mm/khugepaged: dedup and simplify hugepage alloc and charging Zach O'Keefe
2022-06-06 20:50 ` Yang Shi
2022-06-29 21:58 ` Peter Xu
2022-06-30 20:14 ` Zach O'Keefe
2022-06-04 0:39 ` [PATCH v6 05/15] mm/khugepaged: make allocation semantics context-specific Zach O'Keefe
2022-06-06 20:58 ` Yang Shi
2022-06-07 19:56 ` Zach O'Keefe
2022-06-04 0:39 ` [PATCH v6 06/15] mm/khugepaged: pipe enum scan_result codes back to callers Zach O'Keefe
2022-06-06 22:39 ` Yang Shi
2022-06-07 0:17 ` Zach O'Keefe
2022-06-04 0:39 ` [PATCH v6 07/15] mm/khugepaged: add flag to ignore khugepaged heuristics Zach O'Keefe
2022-06-06 22:51 ` Yang Shi
2022-06-04 0:39 ` [PATCH v6 08/15] mm/khugepaged: add flag to ignore THP sysfs enabled Zach O'Keefe
2022-06-06 23:02 ` Yang Shi
[not found] ` <YrzehlUoo2iMMLC2@xz-m1.local>
[not found] ` <CAAa6QmRXD5KboM8=ZZRPThOmcLEPtxzf0XyjkCeY_vgR7VOPqg@mail.gmail.com>
2022-06-30 2:32 ` Peter Xu
2022-06-30 14:17 ` Zach O'Keefe
2022-06-04 0:39 ` [PATCH v6 09/15] mm/madvise: introduce MADV_COLLAPSE sync hugepage collapse Zach O'Keefe
2022-06-06 23:53 ` Yang Shi
2022-06-07 22:48 ` Zach O'Keefe
2022-06-08 0:39 ` Yang Shi
2022-06-09 17:35 ` Zach O'Keefe
2022-06-09 18:51 ` Yang Shi
2022-06-10 14:51 ` Zach O'Keefe
2022-06-04 0:39 ` [PATCH v6 10/15] mm/khugepaged: rename prefix of shared collapse functions Zach O'Keefe
2022-06-06 23:56 ` Yang Shi
2022-06-07 0:31 ` Zach O'Keefe
2022-06-04 0:40 ` [PATCH v6 11/15] mm/madvise: add MADV_COLLAPSE to process_madvise() Zach O'Keefe
2022-06-07 19:14 ` Yang Shi
2022-06-04 0:40 ` [PATCH v6 12/15] selftests/vm: modularize collapse selftests Zach O'Keefe
2022-06-04 0:40 ` [PATCH v6 13/15] selftests/vm: add MADV_COLLAPSE collapse context to selftests Zach O'Keefe
2022-06-04 0:40 ` [PATCH v6 14/15] selftests/vm: add selftest to verify recollapse of THPs Zach O'Keefe
2022-06-04 0:40 ` [PATCH v6 15/15] tools headers uapi: add MADV_COLLAPSE madvise mode to tools Zach O'Keefe
2022-06-06 23:58 ` Yang Shi
2022-06-07 0:24 ` Zach O'Keefe
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=Yrz5FfLesXOktJTn@google.com \
--to=zokeefe@google.com \
--cc=James.Bottomley@hansenpartnership.com \
--cc=aarcange@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=alex.shi@linux.alibaba.com \
--cc=arnd@arndb.de \
--cc=asml.silence@gmail.com \
--cc=axboe@kernel.dk \
--cc=axelrasmussen@google.com \
--cc=chris@zankel.net \
--cc=ckennelly@google.com \
--cc=david@redhat.com \
--cc=deller@gmx.de \
--cc=hughd@google.com \
--cc=ink@jurassic.park.msu.ru \
--cc=jcmvbkbc@gmail.com \
--cc=kirill.shutemov@linux.intel.com \
--cc=linmiaohe@huawei.com \
--cc=linux-mm@kvack.org \
--cc=mattst88@gmail.com \
--cc=mhocko@suse.com \
--cc=minchan@kernel.org \
--cc=pasha.tatashin@soleen.com \
--cc=patrickx@google.com \
--cc=peterx@redhat.com \
--cc=rientjes@google.com \
--cc=rongwei.wang@linux.alibaba.com \
--cc=shy828301@gmail.com \
--cc=sj@kernel.org \
--cc=songliubraving@fb.com \
--cc=tsbogend@alpha.franken.de \
--cc=vbabka@suse.cz \
--cc=willy@infradead.org \
--cc=ziy@nvidia.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.