From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0D61BC433EF for ; Sat, 18 Sep 2021 04:55:50 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id A98736008E for ; Sat, 18 Sep 2021 04:55:49 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org A98736008E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvack.org Received: by kanga.kvack.org (Postfix) id 3E9BF6B0071; Sat, 18 Sep 2021 00:55:49 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 399C4900002; Sat, 18 Sep 2021 00:55:49 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 288C16B0073; Sat, 18 Sep 2021 00:55:49 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0024.hostedemail.com [216.40.44.24]) by kanga.kvack.org (Postfix) with ESMTP id 19BCE6B0071 for ; Sat, 18 Sep 2021 00:55:49 -0400 (EDT) Received: from smtpin21.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id CD94A180ACF62 for ; Sat, 18 Sep 2021 04:55:48 +0000 (UTC) X-FDA: 78599481576.21.E43512F Received: from mail-ed1-f46.google.com (mail-ed1-f46.google.com [209.85.208.46]) by imf15.hostedemail.com (Postfix) with ESMTP id 99C2BD000097 for ; Sat, 18 Sep 2021 04:55:48 +0000 (UTC) Received: by mail-ed1-f46.google.com with SMTP id g21so37751749edw.4 for ; Fri, 17 Sep 2021 21:55:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=ugNAmrfcnEDQKSRKVwaF/l+fOTrdNqkk/PXYk6xWiRg=; b=XrCJSfTfzio6OySF2BG05KJTBlfYMJt+/HoWhZGZ26+aCG+G5Ufn+4gGVri7R89eJr RzZBGhYPUMMipFg7IaBg5uOqz1UE+XZYH/7/PCMais2EJF/NGQ4fchoBy8MubH84B5dL icdLavBRh5sf7BNYTqJPFz4dWZpmrjugRD3CUo793l0lSP8gWCxUxXj5ZMZ9Z9sJ55oR SH2W4pgewQrn44G8nwu7k28hLH2j1+NJIc71KuD7nDOUs6sdpLq8m/He9YXHTWIm6tuE +mbpuZIcljHSIkYoW7hpIdiHSsXgbeWcxBG8OhUNc0HaNX/RnITob9GUlaD+JLBjCrpt qTZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=ugNAmrfcnEDQKSRKVwaF/l+fOTrdNqkk/PXYk6xWiRg=; b=qaGd7kS9fVV+qeJta6peg/Lv6b2MaCnFW+r9/Z2lAlhsdvzn5FEouiTyVZaMCXsk+1 +mha9d7g5r5TzMSEwxyk6Hh5CxLH2AFjIn3hmFfcagLYVENbdd0f5tGnPGxHXXaqTUkL pZ2ezAkRg/OU8PRGeWRzgYJi/oJwf4/zU5xrA4sBuYaxpBgQu55qkCfhdtYYmFMsszgB 00m5xBF4eGZ7fffiVRi97DnSsh9xYD6w1X/cndbojIgkL8PIxZUzCOQ8Z+PI6x0kXhD7 gi53tq2oZMUJBRTWkCXv+Hwv99mNi02v4hHHGvLTh8lT+8VzEmeIdGGts/ct3ywcHzwP L28Q== X-Gm-Message-State: AOAM532i1DKrGGq4NMlypQ/1EdNmskKq0Y0JW1S0iyhi2O8KiiZEWipa clPkORgd6Wm6EwxRAqePxB1+LFQlYDF9KDTIW6c= X-Google-Smtp-Source: ABdhPJyluD/oiIDcmDEv0opbjIIC6hZzNYGqhAUaldypW6bYEwlI/rJccmkztulILIfdedaX4ECzzjgqaja6UePFL5I= X-Received: by 2002:aa7:d7d5:: with SMTP id e21mr17147376eds.27.1631940947451; Fri, 17 Sep 2021 21:55:47 -0700 (PDT) MIME-Version: 1.0 References: <20210917034815.80264-1-songmuchun@bytedance.com> <20210917034815.80264-3-songmuchun@bytedance.com> In-Reply-To: <20210917034815.80264-3-songmuchun@bytedance.com> From: Barry Song <21cnbao@gmail.com> Date: Sat, 18 Sep 2021 16:55:36 +1200 Message-ID: Subject: Re: [PATCH RESEND v2 2/4] mm: hugetlb: replace hugetlb_free_vmemmap_enabled with a static_key To: Muchun Song Cc: mike.kravetz@oracle.com, Andrew Morton , osalvador@suse.de, mhocko@suse.com, Barry Song , david@redhat.com, chenhuang5@huawei.com, bodeddub@amazon.com, Jonathan Corbet , Matthew Wilcox , duanxiongchun@bytedance.com, fam.zheng@bytedance.com, smuchun@gmail.com, zhengqi.arch@bytedance.com, linux-doc@vger.kernel.org, LKML , Linux-MM Content-Type: text/plain; charset="UTF-8" Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=XrCJSfTf; spf=pass (imf15.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.208.46 as permitted sender) smtp.mailfrom=21cnbao@gmail.com; dmarc=pass (policy=none) header.from=gmail.com X-Stat-Signature: ws6xwrnc4gj9is8riyb5enb9urzyzsie X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 99C2BD000097 X-HE-Tag: 1631940948-335045 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Sat, Sep 18, 2021 at 12:08 AM Muchun Song wrote: > > The page_head_if_fake() is used throughout memory management and the > conditional check requires checking a global variable, although the > overhead of this check may be small, it increases when the memory > cache comes under pressure. Also, the global variable will not be > modified after system boot, so it is very appropriate to use static > key machanism. > > Signed-off-by: Muchun Song > --- > include/linux/hugetlb.h | 6 +++++- > include/linux/page-flags.h | 6 ++++-- > mm/hugetlb_vmemmap.c | 10 +++++----- > 3 files changed, 14 insertions(+), 8 deletions(-) > > diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h > index f7ca1a3870ea..ee3ddf3d12cf 100644 > --- a/include/linux/hugetlb.h > +++ b/include/linux/hugetlb.h > @@ -1057,7 +1057,11 @@ static inline void set_huge_swap_pte_at(struct mm_struct *mm, unsigned long addr > #endif /* CONFIG_HUGETLB_PAGE */ > > #ifdef CONFIG_HUGETLB_PAGE_FREE_VMEMMAP > -extern bool hugetlb_free_vmemmap_enabled; > +DECLARE_STATIC_KEY_MAYBE(CONFIG_HUGETLB_PAGE_FREE_VMEMMAP_DEFAULT_ON, > + hugetlb_free_vmemmap_enabled_key); > +#define hugetlb_free_vmemmap_enabled \ > + static_key_enabled(&hugetlb_free_vmemmap_enabled_key) > + > #else > #define hugetlb_free_vmemmap_enabled false > #endif > diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h > index 7b1a918ebd43..d68d2cf30d76 100644 > --- a/include/linux/page-flags.h > +++ b/include/linux/page-flags.h > @@ -185,7 +185,8 @@ enum pageflags { > #ifndef __GENERATING_BOUNDS_H > > #ifdef CONFIG_HUGETLB_PAGE_FREE_VMEMMAP > -extern bool hugetlb_free_vmemmap_enabled; > +DECLARE_STATIC_KEY_MAYBE(CONFIG_HUGETLB_PAGE_FREE_VMEMMAP_DEFAULT_ON, > + hugetlb_free_vmemmap_enabled_key); > > /* > * If the feature of freeing some vmemmap pages associated with each HugeTLB > @@ -204,7 +205,8 @@ extern bool hugetlb_free_vmemmap_enabled; > */ > static __always_inline const struct page *page_head_if_fake(const struct page *page) > { > - if (!hugetlb_free_vmemmap_enabled) > + if (!static_branch_maybe(CONFIG_HUGETLB_PAGE_FREE_VMEMMAP_DEFAULT_ON, > + &hugetlb_free_vmemmap_enabled_key)) A question bothering me is that we still have hugetlb_free_vmemmap_enabled defined as static_key_enabled(&hugetlb_free_vmemmap_enabled_key). but here you are using static_branch_maybe() with the CONFIG and refer the key directly. Do we only need one of them? Or something is wrong? > return page; > > /* > diff --git a/mm/hugetlb_vmemmap.c b/mm/hugetlb_vmemmap.c > index 527bcaa44a48..5b80129c684c 100644 > --- a/mm/hugetlb_vmemmap.c > +++ b/mm/hugetlb_vmemmap.c > @@ -188,9 +188,9 @@ > #define RESERVE_VMEMMAP_NR 1U > #define RESERVE_VMEMMAP_SIZE (RESERVE_VMEMMAP_NR << PAGE_SHIFT) > > -bool hugetlb_free_vmemmap_enabled __read_mostly = > - IS_ENABLED(CONFIG_HUGETLB_PAGE_FREE_VMEMMAP_DEFAULT_ON); > -EXPORT_SYMBOL(hugetlb_free_vmemmap_enabled); > +DEFINE_STATIC_KEY_MAYBE(CONFIG_HUGETLB_PAGE_FREE_VMEMMAP_DEFAULT_ON, > + hugetlb_free_vmemmap_enabled_key); > +EXPORT_SYMBOL(hugetlb_free_vmemmap_enabled_key); > > static int __init early_hugetlb_free_vmemmap_param(char *buf) > { > @@ -204,9 +204,9 @@ static int __init early_hugetlb_free_vmemmap_param(char *buf) > return -EINVAL; > > if (!strcmp(buf, "on")) > - hugetlb_free_vmemmap_enabled = true; > + static_branch_enable(&hugetlb_free_vmemmap_enabled_key); > else if (!strcmp(buf, "off")) > - hugetlb_free_vmemmap_enabled = false; > + static_branch_disable(&hugetlb_free_vmemmap_enabled_key); > else > return -EINVAL; > > -- > 2.11.0 > Thanks barry