From patchwork Fri Mar 7 06:35:30 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rakie Kim X-Patchwork-Id: 14006005 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 2C4E1C282DE for ; Fri, 7 Mar 2025 06:35:51 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 510AA280007; Fri, 7 Mar 2025 01:35:49 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 4C058280003; Fri, 7 Mar 2025 01:35:49 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 38A9D280007; Fri, 7 Mar 2025 01:35:49 -0500 (EST) 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 19A71280003 for ; Fri, 7 Mar 2025 01:35:49 -0500 (EST) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 2F3C052910 for ; Fri, 7 Mar 2025 06:35:50 +0000 (UTC) X-FDA: 83193794460.04.E17AE31 Received: from invmail4.hynix.com (exvmail4.hynix.com [166.125.252.92]) by imf13.hostedemail.com (Postfix) with ESMTP id 3689120003 for ; Fri, 7 Mar 2025 06:35:47 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf13.hostedemail.com: domain of rakie.kim@sk.com designates 166.125.252.92 as permitted sender) smtp.mailfrom=rakie.kim@sk.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741329348; 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:in-reply-to:references:references; bh=OeA8RoaxnPdD0Rk80XX7DkNpmbLbFHC8cy6YA2TiNmE=; b=C196wIVrHhZUAdUSyLSmeBghaAiJ+67QCpAG+n5KqWL7oIRFWftaI7jEVgB3NFLkLqqhfE bmBLOfn81Fc4kheI4692/RWiC9fF2OgZgMqPwloI0B8Ano5T7jpVznNFk+b9WWP43hvUPl cwSC9XARWrGbJxzLovaJuO3M1B43574= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf13.hostedemail.com: domain of rakie.kim@sk.com designates 166.125.252.92 as permitted sender) smtp.mailfrom=rakie.kim@sk.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741329348; a=rsa-sha256; cv=none; b=4xrhSNGvphd9ywJs3JvCauS3mQp6NNHzlAvuXOBquc05X1zQIMCVwD2lEm4susbu9vb9Dp XGN7bh4ChgrsGT1oo2FCLO1d1ShWlFfTHUg25lImQoGG8J82Oiw6Dxzif/j2QW1v5rQOhR YF3rS+DHNWBOiUIMXBhoFtIVJCjTkAE= X-AuditID: a67dfc5b-3c9ff7000001d7ae-7a-67ca93c2fd8a From: Rakie Kim To: gourry@gourry.net Cc: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-cxl@vger.kernel.org, joshua.hahnjy@gmail.com, dan.j.williams@intel.com, ying.huang@linux.alibaba.com, kernel_team@skhynix.com, honggyu.kim@sk.com, yunjeong.mun@sk.com, rakie.kim@sk.com Subject: [PATCH 1/4] mm/mempolicy: Support memory hotplug in weighted interleave Date: Fri, 7 Mar 2025 15:35:30 +0900 Message-ID: <20250307063534.540-2-rakie.kim@sk.com> X-Mailer: git-send-email 2.48.1.windows.1 In-Reply-To: <20250307063534.540-1-rakie.kim@sk.com> References: <20250307063534.540-1-rakie.kim@sk.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrNLMWRmVeSWpSXmKPExsXC9ZZnke6hyafSDX5NF7aYs34Nm8X0qRcY LX7ePc5ucXzrPHaL87NOsVhc3jWHzeLemv+sFqvXZDhweOycdZfdo7vtMrvH4j0vmTw2fZrE 7nFixm8Wj50PLT0+b5ILYI/isklJzcksSy3St0vgymhfO5ul4LJkxZ/ZzSwNjK9Fuhg5OSQE TCQ+felihbGfnL8LZHNwsAkoSRzbGwMSFhEQlZh3dDZLFyMXB7PAYiaJhYfXM4HUCAsESDw6 qQVSwyKgKrHg1X5GEJtXwFhi5d9tzBAjNSUaLt1jArE5gcYfX/WIEaRVCKjm765SiHJBiZMz n7CA2MwC8hLNW2czg6ySEDjDJrH49g52iDmSEgdX3GCZwMg/C0nPLCQ9CxiZVjEKZeaV5SZm 5pjoZVTmZVboJefnbmIEBvGy2j/ROxg/XQg+xCjAwajEw+sx9WS6EGtiWXFl7iFGCQ5mJRFe wc1AId6UxMqq1KL8+KLSnNTiQ4zSHCxK4rxG38pThATSE0tSs1NTC1KLYLJMHJxSDYz5a0MX Tkoq9H9o1Lom/0+lRgnjPRPL36/WLFxeJ9kh8odf2W7pYRXlAk0/Q/P4ZIknIYJrV/uffdxY cyRSlunBwvr83VfuXS/x3BMVPrP4qrCmzPbU5oUNGUcNBFZ1rz6uwnVbRmy5QlaQtMjnLckN r2XbQoVCds7pfHpx5QNv/ZeXi0oKKpRYijMSDbWYi4oTARf6rPteAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrKLMWRmVeSWpSXmKPExsXCNUNNS/fQ5FPpBs+ucVnMWb+GzWL61AuM Fj/vHme3+PzsNbPF8a3z2C0Ozz3JanF+1ikWi8u75rBZ3Fvzn9Xi0LXnrBar12RY/N62gs2B x2PnrLvsHt1tl9k9Fu95yeSx6dMkdo8TM36zeOx8aOnx7baHx+IXH5g8Pm+SC+CM4rJJSc3J LEst0rdL4MpoXzubpeCyZMWf2c0sDYyvRboYOTkkBEwknpy/y9rFyMHBJqAkcWxvDEhYREBU Yt7R2SxdjFwczAKLmSQWHl7PBFIjLBAg8eikFkgNi4CqxIJX+xlBbF4BY4mVf7cxQ4zUlGi4 dI8JxOYEGn981SNGkFYhoJq/u0ohygUlTs58wgJiMwvISzRvnc08gZFnFpLULCSpBYxMqxhF MvPKchMzc0z1irMzKvMyK/SS83M3MQIDd1ntn4k7GL9cdj/EKMDBqMTD6zH1ZLoQa2JZcWXu IUYJDmYlEV7BzUAh3pTEyqrUovz4otKc1OJDjNIcLErivF7hqQlCAumJJanZqakFqUUwWSYO TqkGxgnfEw6mVF0XSp5+wOhMb9hUbffv1zXfC0psWuZ74dS/jnM+GZzHk970s/HUm/+5ea7y 7/LWisKUaxpGvTaiZv82l+mENem7vP615FL5weWWfKHWrD02/9w1vs+b//gC5/vlxyKmrDX/ umfeiV1MT59VS2WfPy37T81BNsDm+88HOT07E+VWflViKc5INNRiLipOBADHSCavWAIAAA== X-CFilter-Loop: Reflected X-Stat-Signature: cq5bskapgxs61hp7z9rqdz635opawgqo X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: 3689120003 X-Rspam-User: X-HE-Tag: 1741329347-244990 X-HE-Meta: U2FsdGVkX18Jn72v2//QrRnaaL9q0ghBl5xxKDLxpZl6R0QlbT04YQ2FbnJWgflzGk0F0ieDCdC9Mc+a1O+KiW0NQ66R9/PLRLAmLu9CjF0k1LZEpMHKNrKdW1zonbrXaS+702uPPBQkggNIl8mPNPGGJC7rCEdJPZ24+t8MkSXjY0azR5sLUcJxeIGOr9FWhdPYR5YlO0mBWPiAmFV8z19ph7NoGtdWFZWpQ2hJtquj8A2Ndq9VJxfL9Wdmcz0pNEqkVgD/rfg0Rp9lc33JvrNXwjG6jlRKRatmCiswwA/h9SMPkzeYayVQ12SFFZfBVdQmUaRURzvbL4abH8uhXTfCDHAzB2MNIgjPx/8f+0Sm88Mi4rRqn1DRWEnjTW0fYkmgALLer9blgAJ07j0M/Pt2uT/Adj+ExsNthC+57c6/NnIW67uWJY+aMPMsJeNyFOJfEgQITsPQdSokIcuK+auOh69TF4Kz+F7VlJojNAjjHJudv4iLycmMS2SQ4X4QwH8SIWta7dskTm+EeSzOsBkyfM8hg8SASc+Mun73+OqE85/z+z5bSbIMKuYeBJV4ZFCHKRnDcs8CuB/z7nJqzoYwiQPRfr2Tmsps9JBWktRmjcQUnBrOk3WNVBX+PuJitJupatrmOiIlItR5SgLetu5tar2LOwozS1HR73OiM1IQEcF1Eat5DnNz65nlMVLF/Y4JJUQaJLHvf6hOtxatEKOi+7JAfWkM2FrVLav7JQKE/IFUN5KTRQv7X9rQC+bzdYSifhg65OxYgGdG3PsXVb/zJDCczAbx02VgN7vJR6VR9igJrT8n9QqEs3anMQsUSVKitu5v8sbXpJBplitraDP5WpX4MgvBk0OTg0Cni3kf8Ck0ATxNv+3GMzRrmMBETDcxlhu7IWPxbZS018TPsfNFJMN4F5XaAa8CnQ04rRii20RVnw+Ay020wfPA5qMY9GBgYTY1w6dlwicXlws gbHpo4x+ wV+HNdI21vBc/QX48FsZhWDmMPSC0XJXSwwDcQgBCj9dXdtjbYvgla/45uKwHsoidy/t0ajRNgD+LL1NaSAcPEOAKWTAp4TAJ2+9r 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: The weighted interleave policy distributes page allocations across multiple NUMA nodes based on their performance weight, thereby optimizing memory bandwidth utilization. The weight values for each node are configured through sysfs. Previously, the sysfs entries for configuring weighted interleave were only created during initialization. This approach had several limitations: - Sysfs entries were generated for all possible nodes at boot time, including nodes without memory, leading to unnecessary sysfs creation. - Some memory devices transition to an online state after initialization, but the existing implementation failed to create sysfs entries for these dynamically added nodes. As a result, memory hotplugged nodes were not properly recognized by the weighed interleave mechanism. To resolve these issues, this patch introduces two key improvements: 1) At initialization, only nodes that are online and have memory are recognized, preventing the creation of unnecessary sysfs entries. 2) Nodes that become available after initialization are dynamically detected and integrated through the memory hotplug mechanism. With this enhancement, the weighted interleave policy now properly supports memory hotplug, ensuring that newly added nodes are recognized and sysfs entries are created accordingly. Signed-off-by: Rakie Kim --- mm/mempolicy.c | 44 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/mm/mempolicy.c b/mm/mempolicy.c index bbaadbeeb291..385607179ebd 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -113,6 +113,7 @@ #include #include #include +#include #include "internal.h" @@ -3489,9 +3490,35 @@ static int add_weight_node(int nid, struct kobject *wi_kobj) return 0; } +struct kobject *wi_kobj; + +static int wi_node_notifier(struct notifier_block *nb, + unsigned long action, void *data) +{ + int err; + struct memory_notify *arg = data; + int nid = arg->status_change_nid; + + if (nid < 0) + goto notifier_end; + + switch(action) { + case MEM_ONLINE: + err = add_weight_node(nid, wi_kobj); + if (err) { + pr_err("failed to add sysfs [node%d]\n", nid); + kobject_put(wi_kobj); + return NOTIFY_BAD; + } + break; + } + +notifier_end: + return NOTIFY_OK; +} + static int add_weighted_interleave_group(struct kobject *root_kobj) { - struct kobject *wi_kobj; int nid, err; wi_kobj = kzalloc(sizeof(struct kobject), GFP_KERNEL); @@ -3505,16 +3532,23 @@ static int add_weighted_interleave_group(struct kobject *root_kobj) return err; } - for_each_node_state(nid, N_POSSIBLE) { + for_each_online_node(nid) { + if (!node_state(nid, N_MEMORY)) + continue; + err = add_weight_node(nid, wi_kobj); if (err) { pr_err("failed to add sysfs [node%d]\n", nid); - break; + goto err_out; } } - if (err) - kobject_put(wi_kobj); + + hotplug_memory_notifier(wi_node_notifier, DEFAULT_CALLBACK_PRI); return 0; + +err_out: + kobject_put(wi_kobj); + return err; } static void mempolicy_kobj_release(struct kobject *kobj)