From patchwork Wed Mar 12 07:56:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rakie Kim X-Patchwork-Id: 14013063 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 CF9A9C2BA1B for ; Wed, 12 Mar 2025 07:56:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C8F3E280003; Wed, 12 Mar 2025 03:56:42 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C1A42280001; Wed, 12 Mar 2025 03:56:42 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A90FB280003; Wed, 12 Mar 2025 03:56:42 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 8AD20280001 for ; Wed, 12 Mar 2025 03:56:42 -0400 (EDT) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id A86B355FEC for ; Wed, 12 Mar 2025 07:56:44 +0000 (UTC) X-FDA: 83212142328.13.570EF54 Received: from invmail4.hynix.com (exvmail4.hynix.com [166.125.252.92]) by imf05.hostedemail.com (Postfix) with ESMTP id C400F100005 for ; Wed, 12 Mar 2025 07:56:42 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf05.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=1741766203; a=rsa-sha256; cv=none; b=nOwcpHhP4cUrV5+LeymFdQnlaXBnkor52mH/k/rXIlrezqe5ThFpKBcEutFvqORzcE0Una n6i6adaM2vDaG5y6P9S3/DDTSkNA6Jb6MhJ0ZNReVMGc4lnBj0QyquVC1ejwxHDM3gF34g OerOpyxsVQW4tQV2b8f2T/pDCi/acq0= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf05.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=1741766203; 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=SY4JLJwFvY0ZqsCcit9xtPtQZDbygFxdQdZQwLZjENo=; b=0F1OHbj5L5IXpgREVyTedMSPj2ylKGgno4RoSz1UAUyGGN/8Qo+LJkq9+8FWayOAv6sQMF hDZ1uKtjtYpjP72D4mYgQ/+1FsVrAnLMuo0AC6yrEU6dbMP+cO9P1H5k+IJWwNivfDkW0I eVqybwuu/MYV8wMUuHc6fcjlSEmVoyA= X-AuditID: a67dfc5b-669ff7000002311f-09-67d13e371826 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 v2 2/4] mm/mempolicy: Support memory hotplug in weighted interleave Date: Wed, 12 Mar 2025 16:56:25 +0900 Message-ID: <20250312075628.648-2-rakie.kim@sk.com> X-Mailer: git-send-email 2.48.1.windows.1 In-Reply-To: <20250312075628.648-1-rakie.kim@sk.com> References: <20250312075628.648-1-rakie.kim@sk.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrLLMWRmVeSWpSXmKPExsXC9ZZnka653cV0gxM3pC3mrF/DZjF96gVG i593j7NbHN86j93i/KxTLBaXd81hs7i35j+rxeo1GQ4cHjtn3WX36G67zO6xeM9LJo9Nnyax e5yY8ZvFY+dDS4/Pm+QC2KO4bFJSczLLUov07RK4Mk7t62EqWC1VMWXNfvYGxm2iXYycHBIC JhLzZs9ghbGv37zB1sXIwcEmoCRxbG8MSFhEQFRi3tHZLF2MXBzMAouZJBYeXs8EkhAWCJZ4 c/E/mM0ioCqxovsZ2BxeAWOJqXMOMUPM1JRouHQPrIYTaP6Lz9fAbCGgmuXrpjNC1AtKnJz5 hAXEZhaQl2jeOpsZZJmEwAk2iSXNa6EGSUocXHGDZQIj/ywkPbOQ9CxgZFrFKJSZV5abmJlj opdRmZdZoZecn7uJERjIy2r/RO9g/HQh+BCjAAejEg+vQM6FdCHWxLLiytxDjBIczEoivKtt gUK8KYmVValF+fFFpTmpxYcYpTlYlMR5jb6VpwgJpCeWpGanphakFsFkmTg4pRoYJbrvZv5r j7Sez7DUR6rsezPb1fv5e6P47rMEFmz/ZPNxnt7KliXRC8JXXF+h2PQm2+LDHLOFEzoO91Z2 /Y4pO21oHyp4JVP6oFqQnXtxz9cbZRVs0y4vYF4j0cy6+HzgnTKW/hpm2U3NP2VfM3/66JP8 OCgpQaZR4YW+LPvfpvOxMzhy1O8osRRnJBpqMRcVJwIAscJsSGACAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrOLMWRmVeSWpSXmKPExsXCNUNNS9fc7mK6wdEp3BZz1q9hs5g+9QKj xc+7x9ktPj97zWxxfOs8dovDc0+yWpyfdYrF4vKuOWwW99b8Z7U4dO05q8XqNRkWv7etYHPg 8dg56y67R3fbZXaPxXteMnls+jSJ3ePEjN8sHjsfWnp8u+3hsfjFByaPz5vkAjijuGxSUnMy y1KL9O0SuDJO7ethKlgtVTFlzX72BsZtol2MnBwSAiYS12/eYOti5OBgE1CSOLY3BiQsIiAq Me/obJYuRi4OZoHFTBILD69nAkkICwRLvLn4H8xmEVCVWNH9jBXE5hUwlpg65xAzxExNiYZL 98BqOIHmv/h8DcwWAqpZvm46I0S9oMTJmU9YQGxmAXmJ5q2zmScw8sxCkpqFJLWAkWkVo0hm XlluYmaOqV5xdkZlXmaFXnJ+7iZGYPAuq/0zcQfjl8vuhxgFOBiVeHgPqF5IF2JNLCuuzD3E KMHBrCTCu9oWKMSbklhZlVqUH19UmpNafIhRmoNFSZzXKzw1QUggPbEkNTs1tSC1CCbLxMEp 1cCYs0mwrrdw0aKNvbf6ZIMvtlov95w0TXbh4kamrwXrbjkveSkh8nae02TpyPrfrLuOHFC/ sqLTxab304Hz9Xz/v6d3Hi3ws1u1ZGqYpLmkVuyZt2s0i97+P15upmZ9kjHJ2uKtk6kve8W/ A2sT9Ce4Pe9l23E4tKExXm/64ZDuS5tFFLhfKnoqsRRnJBpqMRcVJwIAYzKyqloCAAA= X-CFilter-Loop: Reflected X-Rspam-User: X-Rspamd-Queue-Id: C400F100005 X-Rspamd-Server: rspam05 X-Stat-Signature: 3wgaau8yfk87cmebnohainwx36szr6my X-HE-Tag: 1741766202-367018 X-HE-Meta: U2FsdGVkX1/H69InMHMM6B5bwA7kn89t9DSSgpdCAMij0vcHZ2r/AKJ8SnoKm5gGNDaTGl4tKz3nVK9dFECoFUIitCiWGWqK5MjG2ykYJ81rNKS5pAES1G3Z7XrbfdijTD9A0Xjy5UpKRprgu651WsFZ9pSY83tEKeMzJ+isYgc3A8CZGbjffT8x857ZPJHMZLhSoHCzWg2wWOUMHUXTk/N9jq324gg5QRfeh6UFfW0QIksFmhf7+/V5bEGXsT2NijOi3pnMITAfTo0pJLNqhxm1fpPqwdTdhqpNphWFZz83FnAovIJyaE1d1LebrZTzjTABIy8mSGT5U1UBsVXJCUVfjTUC+4hyZKkFWKK6bzyxtFTJx43h4s3y+zgs+Cnt76MRYWcAiyNLj9Fa639lFZmubu/rgxfHE4u0VcjjlR5ffL3yT77H867ppzasL6x4McOGbSEkK87O/tmecn+UFavo5PZtFLhmICdkFeD8G6nUcR50zCL0WO0ha+NWQ0kUB1mSwAn5hzGqA4AUOluBQPnsEZqukwRTlLMqD2pP+N44Dh7OPShuXBqDut1nfJbZiihFtaI24zz0eDbeSxoUts5heM9AqQOB4b0NaCMu99ijI6hVz0AWq5cX7/jar9n/wcPsnc+On2FKMI8GB69qFjCDrvPt8okxS2uyR3jWMtcWL2GRjCFsgU0s8WrbLc9Mo/RKv6VnOQjmeH3aEAIWYXupTOMLYoHKU3GpCWpV00g8ZUX8MRhZjmTz1/i0bQ7byFPfkQBjPij/mbz2JbqRbRDbJVks3+/laEp7KKhK5BUO1xjjzSrJnRoG4UtNMi5QhiO0AVGBPxGogh3qYF2MTAflmS/3B0CbHzpvK92+170r3XdfebjpPshRf9nZMcpsC0IPUWWFj1d82DEIxl9lrhz7JtXR28UzEaDqSXhmMUD4509JLTnfFtRRO7ZcW/D8ky23+rMhpbYGoji6UqT PjQO+dx0 0pysXk087nRg/0dPj/qPkiiwE71IBnfL2iXq5+LBC5u8UUT+b/ASozqcTXgpfwJbtNLgVCyG/egIFHFBMfcZN5JoP9ri9v7WAl4Nb 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 | 47 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 42 insertions(+), 5 deletions(-) diff --git a/mm/mempolicy.c b/mm/mempolicy.c index 1691748badb2..94efff89e0be 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -113,6 +113,7 @@ #include #include #include +#include #include "internal.h" @@ -3489,9 +3490,38 @@ 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; + case MEM_OFFLINE: + sysfs_wi_node_release(node_attrs[nid], wi_kobj); + 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 +3535,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)