From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from outbound.mr.icloud.com (mr-2006h-snip4-11.eps.apple.com [57.103.70.63]) (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 761BF22259F for ; Sun, 31 May 2026 04:24:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=57.103.70.63 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780201466; cv=none; b=Z9paQ0NRior5dOBaaZXc9iL7udg3Q1WlJHmAblCH8uSJZNriXSzRTLxBsiQQEyTOEi12mU0OdnnfvsXGOnCnd/QnJF8h3h88h+oFNTssQ6O5sKMiZjOA9GA0d4v9kf/mvZaW93CZFm1QN347GINvBZs0E4n6Ut/cE/cfWB9pCTU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780201466; c=relaxed/simple; bh=74V7JE4yvLIG0JN3uxxDarz9QqLQvqPMNULvc4WFvUI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Eh/MksjVz+Gt72MeKSVjm5xs41EQCTJ5QWjLvoJ20HYLOGCg4Do4BwPmwQe0MXYgxfXLhoEC+CppeH6tUyBwMtsXNAmBKGPOcGmB1uEnghA2YzldpmhIuG4Xly4q8vdiq9l+nKVi91MHQuo7O54MOQ0CcICPGhE6Kg5NLSO2V1A= 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=GnpxXBYw; arc=none smtp.client-ip=57.103.70.63 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="GnpxXBYw" 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 600701800152; Sun, 31 May 2026 04:24:22 +0000 (UTC) X-ICL-Out-Info: HUtFAUMEWwJACUgBTUQeDx5WFlZNRAJCTQhJB0MFXwteDUAdVAVLVxQEFEYGVg1dE0wLcwRUB10FXVZQAlpLVBQEEVABWB5WXloXXk1FCA9CAVhbCFsEDx9MDFECQgVWXlQKHQRUB10FXVZQAlpLQgRLRWhcBVwcQBdIHV9qS1YUBBFQAVgeVl5aF15NWgJWTQVKA18BWwdDCFVHBUc0UR9VFFIdRA5tGFAWR0BBWh9CFB0ECw8IAEAKTQVfBitGFVcbVgNDRVEfVEYTGU4bV01QG18CQg8= Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=icloud.com; s=1a1hai; t=1780201464; x=1782793464; bh=t9h/Ynv08eT/7kBNC5M5hKRxLaGxANkcJA7nimD4RAY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:x-icloud-hme; b=GnpxXBYwN4yqsrLNGVjVjc5BgfZVIVQP3ncDcxui9Kxz8GRsmF3D6OWe151oq+cV4k7tueJJiDy1gSz240wAAst2DUdXElpuPcJMuRnTSLf0Z5zZ+W/APuxzYd2Tx7ftj7y43OrG/rH2cyubtVh7x4CGWrtqEWvpGPl+C7C/whO4uNWJYotXN9CghsWfGPOWz/s9K9uXdeMnzho1wbSxK2YcLnPgwJH1hWGNWcorlg19vMONWznByCiPXUDvBba6U2iFR2HuGte89iNTkJn8p78NqOu7kQZ/g05MM6Qz6BIjFYdaPvw/89h6shjQH7Pr8z/EWwScNXDbllPvV4SVYQ== 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 1F7B01800135; Sun, 31 May 2026 04:24:12 +0000 (UTC) From: Luka Bai Date: Sun, 31 May 2026 12:23:50 +0800 Subject: [PATCH 2/5] mm/khugepaged: use slab cache instead of normal kmalloc 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-2-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=2998; i=lukabai@tencent.com; s=20260501; h=from:subject:message-id; bh=IK4miDrmdbabkQyFGW59A5b6GPx3fnGu+q5Q4xvrQwg=; b=qK5zrbTJtisyR+NW+EpEaQwvDavZnmZa7UsxawqaJ9Gzz12GKaYF9g3TSlb3B6/TtJzOpv92D 8CanBl0VBhODOoEefC41u8Q8hPB70UYd5y2UeWlSzFOeMAHSkRpZQPF X-Developer-Key: i=lukabai@tencent.com; a=ed25519; pk=KeaVteSWd00GIAjFyWZnuFsKAKixjga1ZkLMcI66nPM= X-Authority-Info-Out: v=2.4 cv=AcS83nXG c=1 sm=1 tr=0 ts=6a1bb7f8 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=gYzHG_maUEIFqAho4fMA:9 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: B_25PpsYthx_2GB5CPRjr7NKC0y3rCcS X-Proofpoint-GUID: B_25PpsYthx_2GB5CPRjr7NKC0y3rCcS X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTMxMDA0NSBTYWx0ZWRfXyiXca6Dkd1a7 QOXxv9TE21ZnGWEUqm6vvV5dCUyPVy56XBSdu6nMYUQRIngFA5wOE8VK3hJEvuuXXiVbJeKLYdK dwk6GCWg9gE5JK10s7JghJI/YkIU4sfsbUuUYFwv2YdK2FhdY2LYu74h+Z5Kga2U6yKZrBKQes/ /Rjsep2gxppbN9PF/q2m3wHVMMRpwQiT/OKXU2C4IT1bJIcg8eaYzfkjE52I3MhdVztoenVbufN naqzcFjBzM9icQVGB6QPfAISZEqt3phVcDXCQB9KrG1jZTAjJBcW6H6ubZF4ld2ddDkt5T1DIri 62kekgwUd8PIi3ZKORzuB3Hdlb3+O43wV/LQ7tbVqnDjIZ4o6qyzxdXBd5m1LE= From: Luka Bai We added a kmem slab cached called collapse_hint_cache for khugepaged collapse hint, to improve the performance in allocation and freeing for the hint structs. Signed-off-by: Luka Bai --- mm/khugepaged.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 5090ffae73f3..04cf85ea5557 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -98,6 +98,7 @@ static unsigned int khugepaged_max_ptes_shared __read_mostly; static DEFINE_READ_MOSTLY_HASHTABLE(mm_slots_hash, MM_SLOTS_HASH_BITS); static struct kmem_cache *mm_slot_cache __ro_after_init; +static struct kmem_cache *collapse_hint_cache __ro_after_init; #define KHUGEPAGED_PRIORITY_QUEUE_MAX_FAIL 10 @@ -555,6 +556,13 @@ int __init khugepaged_init(void) if (!mm_slot_cache) return -ENOMEM; + collapse_hint_cache = KMEM_CACHE(khugepaged_collapse_hint, 0); + if (!collapse_hint_cache) { + kmem_cache_destroy(mm_slot_cache); + mm_slot_cache = NULL; + return -ENOMEM; + } + for (i = 0; i < NR_KHUGEPAGED_PRIORITY_LEVEL; i++) INIT_LIST_HEAD(&khugepaged_priority_queue[i]); @@ -569,6 +577,7 @@ int __init khugepaged_init(void) void __init khugepaged_destroy(void) { kmem_cache_destroy(mm_slot_cache); + kmem_cache_destroy(collapse_hint_cache); } static inline int collapse_test_exit(struct mm_struct *mm) @@ -686,7 +695,7 @@ static void khugepaged_release_collapse_hints( list_for_each_entry_safe(hint, tmp, &req->hints, node) { list_del(&hint->node); - kfree(hint); + kmem_cache_free(collapse_hint_cache, hint); } } @@ -3013,7 +3022,7 @@ void khugepaged_add_collapse_hint(struct mm_struct *mm, if (!mm_flags_test(MMF_VM_HUGEPAGE, mm)) return; - hint = kmalloc_obj(struct khugepaged_collapse_hint); + hint = kmem_cache_alloc(collapse_hint_cache, GFP_KERNEL); if (!hint) return; @@ -3025,14 +3034,14 @@ void khugepaged_add_collapse_hint(struct mm_struct *mm, * just "best-effort" optimization. */ if (!spin_trylock(&khugepaged_mm_lock)) { - kfree(hint); + kmem_cache_free(collapse_hint_cache, hint); return; } slot = mm_slot_lookup(mm_slots_hash, mm); if (!slot) { spin_unlock(&khugepaged_mm_lock); - kfree(hint); + kmem_cache_free(collapse_hint_cache, hint); return; } khp_mm_slot = mm_slot_entry(slot, struct khugepaged_mm_slot, slot); @@ -3125,7 +3134,7 @@ static int collapse_scan_one_priority_entry(unsigned int progress_max, addr = hint->address; if (unlikely(collapse_test_exit_or_disable(mm))) { - kfree(hint); + kmem_cache_free(collapse_hint_cache, hint); break; } @@ -3149,7 +3158,7 @@ static int collapse_scan_one_priority_entry(unsigned int progress_max, if (*result != SCAN_SUCCEED) (*fail_count)++; skip_hint: - kfree(hint); + kmem_cache_free(collapse_hint_cache, hint); } if (!lock_dropped) -- 2.52.0