From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from outbound.mr.icloud.com (mr-2003c-snip4-11.eps.apple.com [57.103.69.13]) (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 C3CDC22259F for ; Sun, 31 May 2026 04:24:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=57.103.69.13 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780201487; cv=none; b=G6+3INRx/oJbA1unTKBpPZrFBc9Wg3Q8BzzLCx1alM4V80HMUQ9WMdSMDuJQH0Kvexi5vxX+602QSv0SlxINjjsodKqO/aCNd9nPdOfCnnVWtxYSBK3YMAKs56xVOP/vZlkbMXIRp10skhAfuu+dkPW5CYNwx99X7oVx7Ew2GPE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780201487; c=relaxed/simple; bh=STH885JstUH7y5ZxJPHL4Ir8bFwC0BDenu+H0aByyxc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=o4p1c7zLL8uJEHzw9Lt3UA+WD9xGtoIfBY/iXfdlArkMu29CzcrAYgLYb+bsyscUZuita8IU5F+95Ikgu33jTfKThGlJTkhX6ftwRFAOIS5oaBQ76JJuJPt5UqQqKCWnEfk5g+ZsJspaJEuZ2HcVo3y7u7aPfFSVcTrKehGBw9w= 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=VHkdIhzZ; arc=none smtp.client-ip=57.103.69.13 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="VHkdIhzZ" Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPS id 4925D1800101; Sun, 31 May 2026 04:24:42 +0000 (UTC) X-ICL-Out-Info: HUtFAUMEWwJACUgBTUQeDx5WFlZNRAJCTQhJB0MFXwteDUAdVAVLVxQEFEYGVg1dE0wLcwRUB10FXVZQAlpLVBQEEVABWB5WXloXXk1FCA9CAVhbCFsEDx9MDFECQgVWXlQKHQRUB10FXVZQAlpLQgRLRWhcBVwcQBdIHV9qS1YUBBFQAVgeVl5aF15NWgJWTQVKA18BWwdDCFVHBUc0UR9VFFIdRA5tGFAWR0BBWh9EFB0ECw8IAEAKTQVfBitGFVcbVgNDRVEfVEYTGU4bV01QG18CQg8= Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=icloud.com; s=1a1hai; t=1780201486; x=1782793486; bh=bhbmzU8f+DtLeo7/JiKJOt5bFOzMaSbF+v57Q12naMo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:x-icloud-hme; b=VHkdIhzZnjFk2cZXEnEBPjAHnj87Z5xuzl8IbwKDWknQke1S4ttuSE0Yt2AJKxnjqb6ZHbeSHVENFSvtyqsw4hjP/HrOqVHPgFN43+P6Ibb77XpeTROX8fI3oTP0YrXStjV9nbcmfxQw59gAPPBuY5sonSU9EA5uYxnTWKDcN5V/z2Pd7dTTyzTYR1FwONLjP7bk0v748u6vZLWEQYOP6cefmsLw8amrxkt4HKpAzRX95qEhFl6yJQsaMmLo1o5ybmMCOsaYDel49V/GVzLsD32091lyIk4tyby0JHlYh0ahxozv5Tzkg9F4kWtCUVg6ZoVw4IhrqA+54Y9V8QH15Q== Received: from [127.0.0.1] (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPSA id 6C23A18000A7; Sun, 31 May 2026 04:24:32 +0000 (UTC) From: Luka Bai Date: Sun, 31 May 2026 12:23:52 +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-e7f8c2035621@tencent.com> References: <20260531-thp_collapse_hint-v1-0-e7f8c2035621@tencent.com> In-Reply-To: <20260531-thp_collapse_hint-v1-0-e7f8c2035621@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=1780201432; l=3543; i=lukabai@tencent.com; s=20260501; h=from:subject:message-id; bh=fMQSPKl1zRvOYMdFUia4IDMTy4aTjy06OEcQUlcbylM=; b=bz1zxYyHa5lxtxmHcNXbfs1M3uAkN7ZHBImHk3CMvCXzLxWyotuW5YDKhoOw9ngdW1Wc894ra z/FcpQWNm9dBJ4YAfErQdGG5wQ3HDntQnDYSNJ152LuXFBxCapLMPeS X-Developer-Key: i=lukabai@tencent.com; a=ed25519; pk=KeaVteSWd00GIAjFyWZnuFsKAKixjga1ZkLMcI66nPM= X-Proofpoint-GUID: oIUNazf8Xd8qv7Msv4T_iX4VlZJzjfUE X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTMxMDA0NSBTYWx0ZWRfXzQGwx+YHthkt NMolnw9VHyMV01ZN5GqsQK8DVS4RUWi3QY55OPudBP/OO0CJG3Hcp4BrszDO2TLL971FndIXa+T 8MrSOS+hZ06yPsgSsN4A7eiihAjPJSONa9XP0YIduhh/0DuKtk0Nkts+253cIuVPMLCZgos1jH0 FXmnSY3UzZp4JG88oUHS7h0hOiT+1bZE0mtcjaIS221W+NXaBiS150YYte+NBQbWwk3DqP+y0pO BcSNZJJvNS24fGhwLteKKG6o9qeoA4uEjF/REWSmWhXrqBr2WPw5br/c37wz+xUFs98Up7zsJ6o VgJNHPAqlc84i3ykuPaUmiWAPcOeWy1K+wsCB7h71SRj+Cj95y5UxRYRQhVrrc= X-Proofpoint-ORIG-GUID: oIUNazf8Xd8qv7Msv4T_iX4VlZJzjfUE X-Authority-Info-Out: v=2.4 cv=RJ6+3oi+ c=1 sm=1 tr=0 ts=6a1bb80c 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 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