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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 88AFEC4345F for ; Wed, 24 Apr 2024 15:41:40 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id EDED06B0283; Wed, 24 Apr 2024 11:41:39 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E8F186B0285; Wed, 24 Apr 2024 11:41:39 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D7E556B0288; Wed, 24 Apr 2024 11:41:39 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id B98826B0283 for ; Wed, 24 Apr 2024 11:41:39 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 56F871203A8 for ; Wed, 24 Apr 2024 15:41:39 +0000 (UTC) X-FDA: 82044840318.30.63129AD Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf19.hostedemail.com (Postfix) with ESMTP id 8B85C1A0010 for ; Wed, 24 Apr 2024 15:41:37 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=none; spf=pass (imf19.hostedemail.com: domain of ryan.roberts@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=ryan.roberts@arm.com; dmarc=pass (policy=none) header.from=arm.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1713973297; a=rsa-sha256; cv=none; b=AOURjxPH34NhGTg3hBd90n8pa7dWxjt0kkpHTKgVwQK3PjFXPobSDIO1qB+7VU0T7nSZEC pf2PsJUBRwzWYMAzxg61M7FR0PEtu5H6XrjysnexYuI2IKqKjZX8SO3mkGPIEWT62ORWyD bikkBnwjgHHwIoBQz+lnB2FqXoEN57Y= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=none; spf=pass (imf19.hostedemail.com: domain of ryan.roberts@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=ryan.roberts@arm.com; dmarc=pass (policy=none) header.from=arm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1713973297; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=311R666ZqdnPYzFUWxZS9joLbDsGQyRQSi08ptf5A6E=; b=uKNhmO9qF1dgR6TohIuBwU8hTHvRO7RVa77K/8nVCdpzvkCuE/JRfKefRIzvvlZblZHKJn a/fB8WVPA6Nxd3ttk+7aDG6JuhBzoXyA9jtyw/1/TGZGJWlg0WM3SO/133mPM2tlqzMZRX ZB2AjIAMAYU8XOpXPvFDm8j5BzZtBkY= Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 344EB1063; Wed, 24 Apr 2024 08:42:04 -0700 (PDT) Received: from [10.1.25.156] (XHFQ2J9959.cambridge.arm.com [10.1.25.156]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 865833F73F; Wed, 24 Apr 2024 08:41:35 -0700 (PDT) Message-ID: Date: Wed, 24 Apr 2024 16:41:34 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 1/2] mm: add per-order mTHP split counters Content-Language: en-GB To: Lance Yang , akpm@linux-foundation.org, Barry Song <21cnbao@gmail.com> Cc: 21cnbao@gmail.com, david@redhat.com, baolin.wang@linux.alibaba.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org References: <20240424135148.30422-1-ioworker0@gmail.com> <20240424135148.30422-2-ioworker0@gmail.com> From: Ryan Roberts In-Reply-To: <20240424135148.30422-2-ioworker0@gmail.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 8B85C1A0010 X-Stat-Signature: sn9zz6upjh9gtcx5o1tpb47eoqt8syym X-Rspam-User: X-HE-Tag: 1713973297-625867 X-HE-Meta: U2FsdGVkX1/lnCT70ZohL/YMuOikzJtXZt5syu1j6uGWCx9hxcUfZhHin86PT8Wq2XGBc3a/yAArIqrJZzsLJbr+jBBnsy3wlbxsoUVZDFnHuYRG47CvVHdIHsRlWx115UO5JUeviX9xZbQceHF1ID0JrlfpzTYxrnokCR89hyIvi+JvOVWAhvqyxgeQdAAdlkjElL4ijAt51nDPlllS725mNbBiixW9HmklY9dfkIOfMqvDXjopmpI1iGSXGM9Q0EmK8aPDzWycnwGu/l6IOvqtU6fQHIPvqRSW+SxpS1qha2kIe3nN2jfcIg5NXCuVbxYefjPp55AjFRaoovYyZRryxlZO8Df4vq07zuZLgoEtD6Jq+dUWpOZ6d1rqSumi1HbvZameuYUJdkvvbv50+rfuhETq9V6ZnXX5PfPJ3uI93KgWZUgsRM0OrFMCcAYfsgfVo0FLQHpjgR/DqVVZPPjR6BuEuhWRLT7kDh04ZIwuCm/PyeXAI7M6Z2QwsFoPdq+rSDFGewFlqdlWv7KrFaUFYXsagKUAXAsQd+t5qBp93mCrtyZACzRCZ8od3O5RuuHPXy7TeIizUuTLnNKgdLa/nPFMm5no4sJdhys0f60xZhwH8vMIcbaJFYJIBhpkE2xcUyWh5ghqAtruc5AipJ7cAT454AS0271zsw7p7Xk82PbfeYhlqprcm776xMsdk9g4NWZih4m4/zIpRjxKJZBOkpZ3wLq9p2eQ4AOeyzFixR2vdX+RYp9zsHBRTlU0Hpqs7rY7PeCfL6xDylJw6qHPvaV4g6eFwRW3lnAacy/7nQ0/wQtTmxN/FzbMnroV58cmO77XlmvCalgwAHnLjRKezJHrJSZZQMsR9fWsMjbNitmTJudh4OE3LQ/f45sGZH/iuE3gpkEeQcYgHgO8w6Z656+WDQkeBGb0DYtzqLbcKzhlBrzWQhWkauTq4KNio508V4x8NkbdaTRhHQu AlRGGtmy RtHEN6lz9R1XK3ny+KcAXtheuHkMxjfLgN4xVQdZZ2UNx6gpp9a+BihhCTIafkQjxzDOx150reZFB14dJTswBy6EgNXDflDDkK9a1IZM0+iLZkVWvvtnFkFRgQ9nIMZLFczNJFv68znEOPXb8gGuk2Wajn6NNwCkpbqEQgq9AMQblPNU+VSQVjHWLJGa/834OQyb67fYPM2d9QjdJZlmGT3sz1Ed4wihRbFoY8eQ1EEx8BjaYZTNik4AJ7DAmUGn0ISubNeMgF61o6EqtfrscPcv2NoA8428EOdgM 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: List-Subscribe: List-Unsubscribe: + Barry On 24/04/2024 14:51, Lance Yang wrote: > At present, the split counters in THP statistics no longer include > PTE-mapped mTHP. Therefore, this commit introduces per-order mTHP split > counters to monitor the frequency of mTHP splits. This will assist > developers in better analyzing and optimizing system performance. > > /sys/kernel/mm/transparent_hugepage/hugepages-/stats > split_page > split_page_failed > deferred_split_page > > Signed-off-by: Lance Yang > --- > include/linux/huge_mm.h | 3 +++ > mm/huge_memory.c | 14 ++++++++++++-- > 2 files changed, 15 insertions(+), 2 deletions(-) > > diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h > index 56c7ea73090b..7b9c6590e1f7 100644 > --- a/include/linux/huge_mm.h > +++ b/include/linux/huge_mm.h > @@ -272,6 +272,9 @@ enum mthp_stat_item { > MTHP_STAT_ANON_FAULT_FALLBACK_CHARGE, > MTHP_STAT_ANON_SWPOUT, > MTHP_STAT_ANON_SWPOUT_FALLBACK, > + MTHP_STAT_SPLIT_PAGE, > + MTHP_STAT_SPLIT_PAGE_FAILED, > + MTHP_STAT_DEFERRED_SPLIT_PAGE, > __MTHP_STAT_COUNT > }; > > diff --git a/mm/huge_memory.c b/mm/huge_memory.c > index 055df5aac7c3..52db888e47a6 100644 > --- a/mm/huge_memory.c > +++ b/mm/huge_memory.c > @@ -557,6 +557,9 @@ DEFINE_MTHP_STAT_ATTR(anon_fault_fallback, MTHP_STAT_ANON_FAULT_FALLBACK); > DEFINE_MTHP_STAT_ATTR(anon_fault_fallback_charge, MTHP_STAT_ANON_FAULT_FALLBACK_CHARGE); > DEFINE_MTHP_STAT_ATTR(anon_swpout, MTHP_STAT_ANON_SWPOUT); > DEFINE_MTHP_STAT_ATTR(anon_swpout_fallback, MTHP_STAT_ANON_SWPOUT_FALLBACK); > +DEFINE_MTHP_STAT_ATTR(split_page, MTHP_STAT_SPLIT_PAGE); > +DEFINE_MTHP_STAT_ATTR(split_page_failed, MTHP_STAT_SPLIT_PAGE_FAILED); > +DEFINE_MTHP_STAT_ATTR(deferred_split_page, MTHP_STAT_DEFERRED_SPLIT_PAGE); > > static struct attribute *stats_attrs[] = { > &anon_fault_alloc_attr.attr, > @@ -564,6 +567,9 @@ static struct attribute *stats_attrs[] = { > &anon_fault_fallback_charge_attr.attr, > &anon_swpout_attr.attr, > &anon_swpout_fallback_attr.attr, > + &split_page_attr.attr, > + &split_page_failed_attr.attr, > + &deferred_split_page_attr.attr, > NULL, > }; > > @@ -3083,7 +3089,7 @@ int split_huge_page_to_list_to_order(struct page *page, struct list_head *list, > XA_STATE_ORDER(xas, &folio->mapping->i_pages, folio->index, new_order); > struct anon_vma *anon_vma = NULL; > struct address_space *mapping = NULL; > - bool is_thp = folio_test_pmd_mappable(folio); > + int order = folio_order(folio); > int extra_pins, ret; > pgoff_t end; > bool is_hzp; > @@ -3262,8 +3268,10 @@ int split_huge_page_to_list_to_order(struct page *page, struct list_head *list, > i_mmap_unlock_read(mapping); > out: > xas_destroy(&xas); > - if (is_thp) > + if (order >= HPAGE_PMD_ORDER) > count_vm_event(!ret ? THP_SPLIT_PAGE : THP_SPLIT_PAGE_FAILED); > + count_mthp_stat(order, !ret ? MTHP_STAT_SPLIT_PAGE : > + MTHP_STAT_SPLIT_PAGE_FAILED); > return ret; > } > > @@ -3327,6 +3335,8 @@ void deferred_split_folio(struct folio *folio) > if (list_empty(&folio->_deferred_list)) { > if (folio_test_pmd_mappable(folio)) > count_vm_event(THP_DEFERRED_SPLIT_PAGE); > + count_mthp_stat(folio_order(folio), > + MTHP_STAT_DEFERRED_SPLIT_PAGE); There is a very long conversation with Barry about adding a 'global "mTHP became partially mapped 1 or more processes" counter (inc only)', which terminates at [1]. There is a lot of discussion about the required semantics around the need for partial map to cover alignment and contiguity as well as whether all pages are mapped, and to trigger once it becomes partial in at least 1 process. MTHP_STAT_DEFERRED_SPLIT_PAGE is giving much simpler semantics, but less information as a result. Barry, what's your view here? I'm guessing this doesn't quite solve what you are looking for? [1] https://lore.kernel.org/linux-mm/6cc7d781-884f-4d8f-a175-8609732b87eb@arm.com/ Thanks, Ryan > list_add_tail(&folio->_deferred_list, &ds_queue->split_queue); > ds_queue->split_queue_len++; > #ifdef CONFIG_MEMCG