From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from outbound.mr.icloud.com (mr-2001f-snip4-8.eps.apple.com [57.103.68.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 88DF22EC09B for ; Sun, 31 May 2026 04:28:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=57.103.68.61 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780201704; cv=none; b=fx43kXr79tuRx9CSagHqqxkj6BioQ6p16RPFdRPaJBIUu7N6l2LCIBjXiqSLiIePzwoMc+szBz13vTT6aUdiB7ZaiUbUuIeh83eLqToPWHyuutHwZrKFLI2YN7sx1xAtvbxu4lZ0pnXd1VIziCRGR0891I+IoKRjjG7vZJeTeeE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780201704; c=relaxed/simple; bh=STH885JstUH7y5ZxJPHL4Ir8bFwC0BDenu+H0aByyxc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=sWv9rf5yIiGZPzQMvslytxGx2OQ8mENgeEjZLwf7B/9zVC6XGnnLHRu8XapBAmw73sOeacHCKIrGSDpW8T3Hdy4V8jIbGZ2WN0oDi/Mwo2NyI1cCly2+o8nBNYFhEMhEudApPIwrj4iitairBgaaCDD7J4UtL4qgBsf+VMmT9rc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=icloud.com; spf=pass smtp.mailfrom=icloud.com; dkim=pass (2048-bit key) header.d=icloud.com header.i=@icloud.com header.b=VR3BYHPX; arc=none smtp.client-ip=57.103.68.61 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=icloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=icloud.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=icloud.com header.i=@icloud.com header.b="VR3BYHPX" Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-4 (Postfix) with ESMTPS id 11D151800171; Sun, 31 May 2026 04:28:16 +0000 (UTC) X-ICL-Out-Info: HUtFAUMEWwJACUgBTUQeDx5WFlZNRAJCTQhJB0MFXwteDUAdVAVLVxQEFEYGVg1dE0wLcwRUB10FXVZQAlpLVBQEEVABWB5WXloXXk1FCA9CAVhbCFsEDx9MDFECQgVWXlQKHQRUB10FXVZQAlpLQgRLRWhcBVwcQBdIHV9qS1YUBBFQAVgeVl5aF15NWgJWTQVKA18BWwdDCFVHBUc0UR9VFFIdRA5tGFAWR0BBWh9EFEAFWwRYCxNdTFBfVitGFVcbVgNDRVEfVEYTGU4bV01QG18CQg8= Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=icloud.com; s=1a1hai; t=1780201703; x=1782793703; bh=bhbmzU8f+DtLeo7/JiKJOt5bFOzMaSbF+v57Q12naMo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:x-icloud-hme; b=VR3BYHPXC/5ooK91OfM9H7foeW+CQSHUnC+y9ZCelBzSsdaOv6XMTtXaOQs+HSqO5UeF7fLQ2IJIZA3Z7uVVyeQI+vCvWKqu/wstdMaHb70qGkAbdM2PLjM8YFq0I8Zp1zbcur1RDH9YmLLBI4iHjB9bElUEKgepwYJoZVOy6V7HeOZNjl10X8Phe+QJNFCyMgbqgYPVuYpC0ciuBjk7Rd6fCWR9Z89PJEJ9+TThbcYh5FsDyQo+W6XrCifuaaXxNH8T2pteqrRCQ7kbD5FVBoBgvNf4GRzV72pa2RbKE5nwCcddgBpyEIClC2/j4giwkKgpOh6wS1wH5awxvFgOEQ== Received: from [127.0.0.1] (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-4 (Postfix) with ESMTPSA id C45731800114; Sun, 31 May 2026 04:28:06 +0000 (UTC) From: Luka Bai Date: Sun, 31 May 2026 12:27:20 +0800 Subject: [PATCH 4/5] mm/khugepaged: add accounting for successful hint or non-hint collapse Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260531-thp_collapse_hint-v1-4-866339cd4c2a@tencent.com> References: <20260531-thp_collapse_hint-v1-0-866339cd4c2a@tencent.com> In-Reply-To: <20260531-thp_collapse_hint-v1-0-866339cd4c2a@tencent.com> To: linux-mm@kvack.org Cc: Andrew Morton , David Hildenbrand , Lorenzo Stoakes , Zi Yan , Baolin Wang , "Liam R. Howlett" , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Kairui Song , Qi Zheng , Shakeel Butt , Axel Rasmussen , Yuanchu Xie , Wei Xu , Rik van Riel , Harry Yoo , Jann Horn , Johannes Weiner , linux-kernel@vger.kernel.org, Luka Bai X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1780201643; l=3543; i=lukabai@tencent.com; s=20260501; h=from:subject:message-id; bh=fMQSPKl1zRvOYMdFUia4IDMTy4aTjy06OEcQUlcbylM=; b=g6hskuajwDifuMlmQvwXr7m3gvsQsG3xboa6bdOJ6SgjH/Fyfhd7w2b5Q80kpTF2fGF4LNo8F 0yMQCfVmh3mArC+6szHFufSG++WLY6mSpGGl0aVod/sTQ7MAhojQ/Pz X-Developer-Key: i=lukabai@tencent.com; a=ed25519; pk=KeaVteSWd00GIAjFyWZnuFsKAKixjga1ZkLMcI66nPM= X-Authority-Info-Out: v=2.4 cv=AvTjHe9P c=1 sm=1 tr=0 ts=6a1bb8e4 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=x7bEGLp0ZPQA:10 a=UaoJkeuwEpQA:10 a=VkNPw1HP01LnGYTKEx00:22 a=GvQkQWPkAAAA:8 a=0Ztl7DgICfUfD0EaiaYA:9 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: yz54fiqE8TjX4RhqkROvSzCb1_eTk_JV X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTMxMDA0NiBTYWx0ZWRfX6jolbC6oTORJ jDnOhHXnV+NXz2xs37S9CoZAHvweRKv5SyS3VtzwTOkjyvw7C6aQkmgdFQ6Zim/eeFsF2jhmPod AoOFBOPvCz9EX/SSpHehGjp0fT6niK7Npb3Dzhac6aEIvkF5m09cSyMTw8CZbPRnww38EO4NYQp naXS1Wi4WIMDWuT6nN8LnShZL9p32T1od0eDceDXhBXp9Ob09iHPWS2okUGhXpCr/Rgq71n8Z5O Us38k33MJiQkrXn1TfNeAaQUGWiOz3yRh3JZiZEcqe1EH9oUY7uoib0htE5dLIX0fJpTFTcpAjU zIkJ/PsXG/MvhBUpS0PdxgFMxtZPOHe+yjr9erkbx0hLH+cdLl636DHL9DyjhU= X-Proofpoint-GUID: yz54fiqE8TjX4RhqkROvSzCb1_eTk_JV From: Luka Bai Add two mthp attributes for the accounting of the number of successful khugepaged collapse, either by hint or not by hint so that we can know them easily from userspace. Note that these two statistics only care about the collapse initiated by khugepaged, and they will not consider the collapse raised by MADV_COLLAPSE. Signed-off-by: Luka Bai --- include/linux/huge_mm.h | 2 ++ mm/huge_memory.c | 4 ++++ mm/khugepaged.c | 18 +++++++++++++++++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h index edece3e26985..9df0d7f71e95 100644 --- a/include/linux/huge_mm.h +++ b/include/linux/huge_mm.h @@ -147,6 +147,8 @@ enum mthp_stat_item { MTHP_STAT_COLLAPSE_EXCEED_SWAP, MTHP_STAT_COLLAPSE_EXCEED_NONE, MTHP_STAT_COLLAPSE_EXCEED_SHARED, + MTHP_STAT_KHUGEPAGED_COLLAPSE_HINT, + MTHP_STAT_KHUGEPAGED_COLLAPSE_NON_HINT, __MTHP_STAT_COUNT }; diff --git a/mm/huge_memory.c b/mm/huge_memory.c index bf9b480bb3b0..0031fb4b0b09 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -720,6 +720,8 @@ DEFINE_MTHP_STAT_ATTR(nr_anon_partially_mapped, MTHP_STAT_NR_ANON_PARTIALLY_MAPP DEFINE_MTHP_STAT_ATTR(collapse_exceed_swap_pte, MTHP_STAT_COLLAPSE_EXCEED_SWAP); DEFINE_MTHP_STAT_ATTR(collapse_exceed_none_pte, MTHP_STAT_COLLAPSE_EXCEED_NONE); DEFINE_MTHP_STAT_ATTR(collapse_exceed_shared_pte, MTHP_STAT_COLLAPSE_EXCEED_SHARED); +DEFINE_MTHP_STAT_ATTR(khugepaged_collapse_hint, MTHP_STAT_KHUGEPAGED_COLLAPSE_HINT); +DEFINE_MTHP_STAT_ATTR(khugepaged_collapse_non_hint, MTHP_STAT_KHUGEPAGED_COLLAPSE_NON_HINT); static struct attribute *anon_stats_attrs[] = { @@ -775,6 +777,8 @@ static struct attribute *any_stats_attrs[] = { &split_failed_attr.attr, &collapse_alloc_attr.attr, &collapse_alloc_failed_attr.attr, + &khugepaged_collapse_hint_attr.attr, + &khugepaged_collapse_non_hint_attr.attr, NULL, }; diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 3f5eb8be06d1..2f21c0b6ab46 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -147,6 +147,15 @@ struct mthp_range { struct collapse_control { bool is_khugepaged; + /* + * True while khugepaged is draining a collapse hint queued via + * khugepaged_add_collapse_hint(). Used by collapse_single_pmd() to + * attribute a successful collapse to MTHP_STAT_KHUGEPAGED_COLLAPSE_HINT + * or MTHP_STAT_KHUGEPAGED_COLLAPSE_NON_HINT. Only meaningful when the + * collapse is initiated by khugepaged (is_khugepaged == true). + */ + bool from_priority_hint; + /* Num pages scanned per node */ u32 node_load[MAX_NUMNODES]; @@ -3012,8 +3021,13 @@ static enum scan_result collapse_single_pmd(unsigned long addr, mmap_read_unlock(mm); } end: - if (cc->is_khugepaged && result == SCAN_SUCCEED) + if (cc->is_khugepaged && result == SCAN_SUCCEED) { ++khugepaged_pages_collapsed; + count_mthp_stat(HPAGE_PMD_ORDER, + cc->from_priority_hint ? + MTHP_STAT_KHUGEPAGED_COLLAPSE_HINT : + MTHP_STAT_KHUGEPAGED_COLLAPSE_NON_HINT); + } return result; } @@ -3227,7 +3241,9 @@ static int collapse_scan_one_priority_entry(unsigned int progress_max, addr + HPAGE_PMD_SIZE > ALIGN_DOWN(vma->vm_end, HPAGE_PMD_SIZE)) goto skip_hint; + cc->from_priority_hint = true; *result = collapse_single_pmd(addr, vma, &lock_dropped, cc); + cc->from_priority_hint = false; if (*result != SCAN_SUCCEED) (*fail_count)++; skip_hint: -- 2.52.0