From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from outbound.mr.icloud.com (mr-2001f-snip4-6.eps.apple.com [57.103.68.59]) (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 77EA02D3750 for ; Sun, 31 May 2026 04:27:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=57.103.68.59 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780201679; cv=none; b=A4YGElZuEGyP2uPwLh34kUHwnT+2sn/12y/lUJRIRBiHj+tN1BeS0abIpIKsuOgiN2rwfCc/Jt4zK4DDSYTm9zHZWH4jTzGqaTXRlmsdaQ2Ng9kRdOPlH+Q/Nq0ZAewruIrY9SF0Ja0bwS7QaDN/dBrobfIEGZmUA9S2fcpPFtc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780201679; c=relaxed/simple; bh=74V7JE4yvLIG0JN3uxxDarz9QqLQvqPMNULvc4WFvUI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=d1p4NpHp0H/YyIyBxvUzjoj8b5PgEGPeB5aq4KVAWoIqwDwRwG/RSdDXshO4V+5nbeALkcl4fQImT1AcnWvGAufe+t9hOrcsKIymqb7Rjel+FoHLKjKg2N9/iADDUiPfNwlh4+FxAsy3+sNIJ9brWAzBsUi1X1fIAtfbYjEwLbs= 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=RIb6NQoC; arc=none smtp.client-ip=57.103.68.59 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="RIb6NQoC" 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 60997180013D; Sun, 31 May 2026 04:27:55 +0000 (UTC) X-ICL-Out-Info: HUtFAUMEWwJACUgBTUQeDx5WFlZNRAJCTQhJB0MFXwteDUAdVAVLVxQEFEYGVg1dE0wLcwRUB10FXVZQAlpLVBQEEVABWB5WXloXXk1FCA9CAVhbCFsEDx9MDFECQgVWXlQKHQRUB10FXVZQAlpLQgRLRWhcBVwcQBdIHV9qS1YUBBFQAVgeVl5aF15NWgJWTQVKA18BWwdDCFVHBUc0UR9VFFIdRA5tGFAWR0BBWh9CFEAFWwRYCxNdTFBfVitGFVcbVgNDRVEfVEYTGU4bV01QG18CQg8= Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=icloud.com; s=1a1hai; t=1780201678; x=1782793678; bh=t9h/Ynv08eT/7kBNC5M5hKRxLaGxANkcJA7nimD4RAY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:x-icloud-hme; b=RIb6NQoCWqkSi9d8/57Seu80aFsgI8o7zbmXDvewzfEnKpyd4abxPqmg7JUvcEdPeF767vTiPvjSCZeC0jLxbYlklqg1bxTVQbyqKYETw/2poKWKh2iygi9MUxcuDdGVxms9DL8EN1ugB8CFZOxRk72ep4WXzlvPmTCIP6taHUKVWgmXKwHbhLEfy7Fibr220vL8ZE7LGcwJrrc3yXqw+EgrnSloUvBKfdgXLQSXvMICfXS+cytRgClkr66gQtfqWnwgl91KHwUr8NB9alxHX/rZr7xC+DRvoZgHdccCionoq3Ohsx0BHMnmIGOitW3batTBjAKjd7gSxlQNaoS6+Q== 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 472341800114; Sun, 31 May 2026 04:27:44 +0000 (UTC) From: Luka Bai Date: Sun, 31 May 2026 12:27:18 +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-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=2998; i=lukabai@tencent.com; s=20260501; h=from:subject:message-id; bh=IK4miDrmdbabkQyFGW59A5b6GPx3fnGu+q5Q4xvrQwg=; b=25BP/QidmIIMdY6i6uWSXAANFJ6EHVM+SNF76MvPHXem3VllQIhb9Nvnq+lwJnpu0kI7vaE5S 3jx0hHZdCprDk+Lb0G+7XRUQnZJiFQTPMntsOsR0LRastmpEfON1GBL X-Developer-Key: i=lukabai@tencent.com; a=ed25519; pk=KeaVteSWd00GIAjFyWZnuFsKAKixjga1ZkLMcI66nPM= X-Proofpoint-GUID: Lk8E2F88_Z5a2ahnBfM5agzJL3mWuPqD X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTMxMDA0NiBTYWx0ZWRfX/80evBJfXAM+ q1w3c3bdQEPP8SHCaqi28rjymeG/kLhpf+OaZxD6rrTOd2gtH49AwAaK9fXPb0/gR0Ua8lIzYOQ hLKm23YnwH4rawxd/vQfCxDyqd6AE/AeoV2PCvHo7fyiORbalzRRKsfXxzTXIzVRLGYk7pNCIDY emMAS+Cn8bqJn9ieuAvaZGftx84yGga7r22ii9weVkjhnFfPb0g/TYTi9ZVQm4fHtffI3Ghs3/1 Zwlq5S2gjQ8w4C4XdRNQj49drENXSBeEJgCgOiyAOWuRgGHsU3KFJIayYKX4dBcLLIdCGuF4TQZ CwiWsEtOOCNcCLyh7DuUnR1xNiHJgqD/MXlZTPExUHcHtBJA1A+gN9PDm0WjYI= X-Proofpoint-ORIG-GUID: Lk8E2F88_Z5a2ahnBfM5agzJL3mWuPqD X-Authority-Info-Out: v=2.4 cv=H57WAuYi c=1 sm=1 tr=0 ts=6a1bb8cd 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 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