From: Mike Kravetz <mike.kravetz@oracle.com>
To: Muchun Song <muchun.song@linux.dev>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
Muchun Song <songmuchun@bytedance.com>,
Joao Martins <joao.m.martins@oracle.com>,
Oscar Salvador <osalvador@suse.de>,
David Hildenbrand <david@redhat.com>,
Miaohe Lin <linmiaohe@huawei.com>,
David Rientjes <rientjes@google.com>,
Anshuman Khandual <anshuman.khandual@arm.com>,
Naoya Horiguchi <naoya.horiguchi@linux.dev>,
Barry Song <21cnbao@gmail.com>, Michal Hocko <mhocko@suse.com>,
Matthew Wilcox <willy@infradead.org>,
Xiongchun Duan <duanxiongchun@bytedance.com>,
Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [PATCH v4 3/8] hugetlb: perform vmemmap optimization on a list of pages
Date: Tue, 19 Sep 2023 13:49:54 -0700 [thread overview]
Message-ID: <20230919204954.GA425719@monkey> (raw)
In-Reply-To: <e284396d-c32d-b69d-21c6-7025db93b873@linux.dev>
On 09/19/23 11:10, Muchun Song wrote:
>
>
> On 2023/9/19 07:01, Mike Kravetz wrote:
> > When adding hugetlb pages to the pool, we first create a list of the
> > allocated pages before adding to the pool. Pass this list of pages to a
> > new routine hugetlb_vmemmap_optimize_folios() for vmemmap optimization.
> >
> > Due to significant differences in vmemmmap initialization for bootmem
> > allocated hugetlb pages, a new routine prep_and_add_bootmem_folios
> > is created.
> >
> > We also modify the routine vmemmap_should_optimize() to check for pages
> > that are already optimized. There are code paths that might request
> > vmemmap optimization twice and we want to make sure this is not
> > attempted.
> >
> > Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com>
> > ---
> > mm/hugetlb.c | 50 +++++++++++++++++++++++++++++++++++++-------
> > mm/hugetlb_vmemmap.c | 11 ++++++++++
> > mm/hugetlb_vmemmap.h | 5 +++++
> > 3 files changed, 58 insertions(+), 8 deletions(-)
> >
> > diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> > index 8624286be273..d6f3db3c1313 100644
> > --- a/mm/hugetlb.c
> > +++ b/mm/hugetlb.c
> > @@ -2269,6 +2269,11 @@ static void prep_and_add_allocated_folios(struct hstate *h,
> > {
> > struct folio *folio, *tmp_f;
> > + /*
> > + * Send list for bulk vmemmap optimization processing
> > + */
>
> From the kernel development document, one-line comment format is "/**/".
>
Will change the comments introduced here.
> > + hugetlb_vmemmap_optimize_folios(h, folio_list);
> > +
> > /*
> > * Add all new pool pages to free lists in one lock cycle
> > */
> > @@ -3309,6 +3314,40 @@ static void __init hugetlb_folio_init_vmemmap(struct folio *folio,
> > prep_compound_head((struct page *)folio, huge_page_order(h));
> > }
> > +static void __init prep_and_add_bootmem_folios(struct hstate *h,
> > + struct list_head *folio_list)
> > +{
> > + struct folio *folio, *tmp_f;
> > +
> > + /*
> > + * Send list for bulk vmemmap optimization processing
> > + */
> > + hugetlb_vmemmap_optimize_folios(h, folio_list);
> > +
> > + /*
> > + * Add all new pool pages to free lists in one lock cycle
> > + */
> > + spin_lock_irq(&hugetlb_lock);
> > + list_for_each_entry_safe(folio, tmp_f, folio_list, lru) {
> > + if (!folio_test_hugetlb_vmemmap_optimized(folio)) {
> > + /*
> > + * If HVO fails, initialize all tail struct pages
> > + * We do not worry about potential long lock hold
> > + * time as this is early in boot and there should
> > + * be no contention.
> > + */
> > + hugetlb_folio_init_tail_vmemmap(folio,
> > + HUGETLB_VMEMMAP_RESERVE_PAGES,
> > + pages_per_huge_page(h));
> > + }
> > + __prep_account_new_huge_page(h, folio_nid(folio));
> > + enqueue_hugetlb_folio(h, folio);
> > + }
> > + spin_unlock_irq(&hugetlb_lock);
> > +
> > + INIT_LIST_HEAD(folio_list);
>
> I'm not sure what is the purpose of the reinitialization to list head?
>
There really is no purpose. This was copied from
prep_and_add_allocated_folios which also has this unnecessary call. It is
unnecessary as enqueue_hugetlb_folio() will do a list_move for each
folio on the list. Therefore, at the end of the loop we KNOW the list
is empty.
I will remove here and in prep_and_add_allocated_folios.
Thanks,
--
Mike Kravetz
next prev parent reply other threads:[~2023-09-19 20:50 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-18 23:01 [PATCH v4 0/8] Batch hugetlb vmemmap modification operations Mike Kravetz
2023-09-18 23:01 ` [PATCH v4 1/8] hugetlb: optimize update_and_free_pages_bulk to avoid lock cycles Mike Kravetz
2023-09-18 23:01 ` [PATCH v4 2/8] hugetlb: restructure pool allocations Mike Kravetz
2023-09-18 23:01 ` [PATCH v4 3/8] hugetlb: perform vmemmap optimization on a list of pages Mike Kravetz
2023-09-19 3:10 ` Muchun Song
2023-09-19 20:49 ` Mike Kravetz [this message]
2023-09-20 3:05 ` Muchun Song
2023-09-18 23:01 ` [PATCH v4 4/8] hugetlb: perform vmemmap restoration " Mike Kravetz
2023-09-19 9:52 ` Muchun Song
2023-09-19 20:57 ` Mike Kravetz
2023-09-20 2:56 ` Muchun Song
2023-09-20 3:03 ` Muchun Song
2023-09-21 1:12 ` Mike Kravetz
2023-09-21 9:31 ` Muchun Song
2023-09-21 9:47 ` Muchun Song
2023-09-21 21:58 ` Mike Kravetz
2023-09-22 8:19 ` Muchun Song
2023-09-22 17:01 ` Mike Kravetz
2023-09-22 17:28 ` Mike Kravetz
2023-09-18 23:01 ` [PATCH v4 5/8] hugetlb: batch freeing of vmemmap pages Mike Kravetz
2023-09-19 6:09 ` Muchun Song
2023-09-19 21:32 ` Mike Kravetz
2023-09-18 23:01 ` [PATCH v4 6/8] hugetlb: batch PMD split for bulk vmemmap dedup Mike Kravetz
2023-09-19 6:27 ` Muchun Song
2023-09-19 8:18 ` Joao Martins
2023-09-19 6:42 ` Muchun Song
2023-09-19 8:26 ` Joao Martins
2023-09-19 8:41 ` Muchun Song
2023-09-19 8:55 ` Joao Martins
2023-09-19 8:57 ` Muchun Song
2023-09-19 15:09 ` Joao Martins
2023-09-20 2:47 ` Muchun Song
2023-09-20 10:39 ` Joao Martins
2023-09-21 1:42 ` Muchun Song
2023-09-18 23:01 ` [PATCH v4 7/8] hugetlb: batch TLB flushes when freeing vmemmap Mike Kravetz
2023-09-18 23:02 ` [PATCH v4 8/8] hugetlb: batch TLB flushes when restoring vmemmap Mike Kravetz
2023-09-19 6:48 ` Muchun Song
2023-09-19 21:53 ` Mike Kravetz
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=20230919204954.GA425719@monkey \
--to=mike.kravetz@oracle.com \
--cc=21cnbao@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=anshuman.khandual@arm.com \
--cc=david@redhat.com \
--cc=duanxiongchun@bytedance.com \
--cc=joao.m.martins@oracle.com \
--cc=linmiaohe@huawei.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@suse.com \
--cc=muchun.song@linux.dev \
--cc=naoya.horiguchi@linux.dev \
--cc=osalvador@suse.de \
--cc=rientjes@google.com \
--cc=songmuchun@bytedance.com \
--cc=willy@infradead.org \
/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.