From patchwork Fri Apr 19 17:56:09 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jianfeng Wang X-Patchwork-Id: 13636701 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 74D77C4345F for ; Fri, 19 Apr 2024 17:56:20 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BB7B76B0083; Fri, 19 Apr 2024 13:56:19 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B68616B0088; Fri, 19 Apr 2024 13:56:19 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A09636B0089; Fri, 19 Apr 2024 13:56:19 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 8218E6B0083 for ; Fri, 19 Apr 2024 13:56:19 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 36DCD161500 for ; Fri, 19 Apr 2024 17:56:19 +0000 (UTC) X-FDA: 82027035678.09.92336B5 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by imf15.hostedemail.com (Postfix) with ESMTP id 41F88A0006 for ; Fri, 19 Apr 2024 17:56:17 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2023-11-20 header.b=IehBl+aA; spf=pass (imf15.hostedemail.com: domain of jianfeng.w.wang@oracle.com designates 205.220.165.32 as permitted sender) smtp.mailfrom=jianfeng.w.wang@oracle.com; dmarc=pass (policy=quarantine) header.from=oracle.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1713549377; a=rsa-sha256; cv=none; b=R83ncXCLAoa2MCSI71I4ZUlpM3FsjzzvaXCu1TDZ9Po/cKZk4aN8ncp+/JK6NrLLNF2jJ6 Ye1qVvkeJ/4w1X9YFeUl7P5M03WYONBkZkbTuWtLlDL5f0mMXCmag/yMiGXLHZgcAtoZEt 0qk2kxrkTR5XYKXbjxdqC95P8wfr8Ak= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2023-11-20 header.b=IehBl+aA; spf=pass (imf15.hostedemail.com: domain of jianfeng.w.wang@oracle.com designates 205.220.165.32 as permitted sender) smtp.mailfrom=jianfeng.w.wang@oracle.com; dmarc=pass (policy=quarantine) header.from=oracle.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1713549377; 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-transfer-encoding:content-transfer-encoding: in-reply-to:references:dkim-signature; bh=sEyQAxGxkU6mSg9BlzN0eOIMTIjIcy8X5ZvmftEfrfQ=; b=GcGALbr3urzeAJinHrfspPGfPFQYGfcRcopfsNNszdxkRaO/h96RVM8iXXnTauZhmP+Zgq emozdvN/ogZCTPUziFf7Z1/YzjdhsxgNIwYWB1fB9kgALCRfsNiA3ivvE/HykrFtOwoBdZ FZBUYzZW2GcxyubKtD19jgetetShwfA= Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 43JGiLv8028465; Fri, 19 Apr 2024 17:56:13 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : mime-version : content-transfer-encoding; s=corp-2023-11-20; bh=sEyQAxGxkU6mSg9BlzN0eOIMTIjIcy8X5ZvmftEfrfQ=; b=IehBl+aAG37co6abmxWdSg1oRCJ9zcSFM7nS3t+jq2Jk/GDd0yiatz7cGZJoIjRtOoye xSnc3s9WwN2D/oHGNjtCJoio4/almODMTEX2qNAiyukL2uut++6TuJRO3DZ6j8q9Z37m 8T3CzUvwnyWpBdwcec4YVP4e70nK73pLUi3zNP3sd6/Le+sMZuE8k4hFO2CotFz5cMSh iQGOMI5EY0KLwlGxw3QKVhvmKK1ECg0mtOYrd8utIsZpjEICrq4PGS2Bnw3gXQfuO9kv WpSWdVu/ZunKGSEKjJnixWIuWjxnuoSS/d7yTDftG7HulXdGpnxSVhTyp5KDAoTKmWhR og== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3xfgn2wemx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 19 Apr 2024 17:56:12 +0000 Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 43JH48SH005568; Fri, 19 Apr 2024 17:56:12 GMT Received: from jfwang-mac.us.oracle.com (dhcp-10-159-230-131.vpn.oracle.com [10.159.230.131]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3xkc7xd76r-1; Fri, 19 Apr 2024 17:56:12 +0000 From: Jianfeng Wang To: linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: vbabka@suse.cz, cl@linux.com, akpm@linux-foundation.org, penberg@kernel.org, rientjes@google.com Subject: [PATCH v3 0/2] slub: introduce count_partial_free_approx() Date: Fri, 19 Apr 2024 10:56:09 -0700 Message-ID: <20240419175611.47413-1-jianfeng.w.wang@oracle.com> X-Mailer: git-send-email 2.42.1 MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-04-19_13,2024-04-19_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 malwarescore=0 suspectscore=0 spamscore=0 adultscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2404010000 definitions=main-2404190137 X-Proofpoint-ORIG-GUID: coliv5PNpXCgK6sJJQ9zoeoB9O46W5Nq X-Proofpoint-GUID: coliv5PNpXCgK6sJJQ9zoeoB9O46W5Nq X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 41F88A0006 X-Stat-Signature: qpsmdpbjfx9io6beemqkyyz9jpnjys6t X-Rspam-User: X-HE-Tag: 1713549377-584983 X-HE-Meta: U2FsdGVkX19DxhVvMI/u/uQWS+xVdW/GPebZ5kdVLKNP8ciBNpMuXdKM6JHaAWd/0A/koMAffhAGPjS5wcCPKl8e6nGAXqOFF9VoB9BCJhLaHVXEMcgT45yvLdO0yBv2gIJoSJAC1cWsXK+9NAtmtShu6xvh+ztimihCjMuREXJq7wJBiAOkf8fXioQ33f4Miy+Earb+hhGWmNk2rexrEfs/P7HmFIuQZbpuMc1Te/zTJX5BC+7N9XjrKy/MRiZarRjHXLhFMpzVUYBqPuOePh7Hlvfs65kcL1CgECQVuqBnDRnwwHXXgT3JEplU1Z07pM5+fch0bGVixv52kY/qUTkvYUueh1bg8zVpRyg1Mz/tpJyagL/AWI7U+clPH2MZB0pvWQPZQuLaZJjJaq+HGmbpTQz2D76rRCHYTW3YmD5V9drj/NSapdv0orAjIgFI1+HEc6xc76K65rwESL2dA3RSAAxwkGcfyB768ElLNYLE8zlU9Et5WduSeRmyUts+wLqRCY93UME89+QGj/2ExtrFHhGdzU+obrhAcEjsXhQksZBYJB9a4kWecLz1tRspefFfWiTOmObFBneustMRrUZFUjEuYQ00A+Xittv8xVjypAEzjVGAEv6FuuuyEVRYZxFphqfRbtHFsCA/9JHc47Ec9qPq3nEe72vf+O4XRGRpp4ne6rWecqihqJXgC1DF35omcyz2emhyk/5Cxvvt1+Py3zaJf0EhAcgy2gOKNRMhdRGp3uHi3sXot0BrNIj/Rf8MfMBLMXxgxNFwxvfRiPPCBuvzkGyc3E48J8t+33oeCNJoWE1jDXS3obqvZEBnRN+G+C5bTs7JA2/xnP9vxul7teB+uo517fSh9RI9s4lrh/88xalFXldCM/QTmbSHiSvjZeuPNLZsnVyeOa5S/rgSjzazcD308AydNNJBV9wFPk9tolqn/8MoStuvmmUdtbeeatorkttChjteuFW I8IPXpGZ n7pCyNcrHfjtcgEdtcFV19OClWGmdewz1s19nBf73PCut5qEQ53gu0P4WurBKQMDZ6NEI88YPzgkePkn9Xb1qgEW///MV5cN5PFpyC7XX2SlCnQqhGaTebaxTV6/VUt/rAyqnTIzvQfq/9owZxMRaD4B7+/nGErSqsM0E5yHWGE2LrEGVmmtYjhNC28EV8kA6kfW+AiKurhaceYypft4OJHYgXv6abypo70JIj6dFAYK5pICF3LuHU79CJttxM/Gk39RPxAdb1HNnOqH/S0UVXaC2gSgY3pbHcoUDyr+5qMqr6pCL/LF/qYrjK5ZnCLW53hM8 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: This patch fixes a known issue in get_slabinfo() which relies on count_partial() to get the exact count of free objects in a kmem_cache_node's partial list. For some slubs, their partial lists can be extremely long. Currently, count_partial() traverses a partial list to get the exact count of objects. This process may take a long time, during which slab allocations are blocked and IRQs are disabled. In production, even NMI watchdog can be triggered due to this matter. The proposed fix is to limit the number of slabs to scan and output an approximated count for a long partial list. The v1 patch counts N slabs from the list's head and then uses it to estimate the total object count in the list. As suggested by Vlastimil, the v2 patch uses an alternative, i.e., counting N/2 from the list's head and tail, produces a more accurate approximation after the partial list is sorted by kmem_cache_shrink(). In this version, the implementation is moved to a new function count_partial_free_approx(). count_partial() is still used in sysfs for users who still want the exact object count. --- Changes since v2 [2] - Introduce count_partial_free_approx() and keep count_partial() - Use count_partial_free_approx() in get_slabinfo() and slab_out_of_memory() Changes since v1 [1] - Update the approximation method by counting from the list's head and tail - Cap the approximation by the total object count - Update the commit message to add benchmark results and explain the choice [1] https://lore.kernel.org/linux-mm/20240411164023.99368-1-jianfeng.w.wang@oracle.com/ [2] https://lore.kernel.org/linux-mm/20240417185938.5237-2-jianfeng.w.wang@oracle.com/ Thanks, --Jianfeng Jianfeng Wang (2): slub: introduce count_partial_free_approx() slub: use count_partial_free_approx() in slab_out_of_memory() mm/slub.c | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-)