From mboxrd@z Thu Jan 1 00:00:00 1970 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 3D3EFC19776 for ; Fri, 28 Feb 2025 06:40:25 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6E2B2280002; Fri, 28 Feb 2025 01:40:24 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 692B1280001; Fri, 28 Feb 2025 01:40:24 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 55A66280002; Fri, 28 Feb 2025 01:40:24 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 36E43280001 for ; Fri, 28 Feb 2025 01:40:24 -0500 (EST) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id B782B1C718B for ; Fri, 28 Feb 2025 06:40:23 +0000 (UTC) X-FDA: 83168404326.03.6B6085E Received: from invmail4.hynix.com (exvmail4.skhynix.com [166.125.252.92]) by imf01.hostedemail.com (Postfix) with ESMTP id ED73640011 for ; Fri, 28 Feb 2025 06:40:20 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf01.hostedemail.com: domain of yunjeong.mun@sk.com designates 166.125.252.92 as permitted sender) smtp.mailfrom=yunjeong.mun@sk.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740724821; a=rsa-sha256; cv=none; b=DMfnn67zoFj5pWdryEHfnjse4/1he9JjKglpcMK216w1QdAinkOpdnnUqMLqDorLwzHJdf zkmoeQIvboxwF/j0AwhORMG1pK2I94A119eMRpw2AWQk6OwPGAlb9wc4CM/zadxQdkwvyK nDQ0iYODkPupqAgaQUWIX0sgE8qhi4g= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf01.hostedemail.com: domain of yunjeong.mun@sk.com designates 166.125.252.92 as permitted sender) smtp.mailfrom=yunjeong.mun@sk.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740724821; 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=sagTSHyh9DvxwBRV/JarG5OcDGQ0OGFJGq38dJZc1vM=; b=G7VYbQdukI0SYfzCa+DuP4H+EEkl+8OFLBuqoCAcJyVLAs1Ly1yJOwn9e0sMANf/Arwb3i pCKAUTqpt9D3ZfAtpAhTBqtFEkUEV0iaQxVR7+Fvlhm38rTUXk6wArlsD85QifeUaol29y RUBR7iFwRWjfR3OFkp+rD6R0EJpph04= X-AuditID: a67dfc5b-3c9ff7000001d7ae-39-67c15a52e4db From: Yunjeong Mun To: Joshua Hahn Cc: honggyu.kim@sk.com, gregkh@linuxfoundation.org, rakie.kim@sk.com, akpm@linux-foundation.org, rafael@kernel.org, lenb@kernel.org, dan.j.williams@intel.com, Jonathan.Cameron@huawei.com, dave.jiang@intel.com, horen.chuang@linux.dev, hannes@cmpxchg.org, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, linux-mm@kvack.org, kernel-team@meta.com, kernel_team@skhynix.com Subject: Re: [PATCH 1/2 v6] mm/mempolicy: Weighted Interleave Auto-tuning Date: Fri, 28 Feb 2025 15:39:55 +0900 Message-ID: <20250228064016.1325-1-yunjeong.mun@sk.com> X-Mailer: git-send-email 2.48.1.windows.1 In-Reply-To: <20250226213518.767670-1-joshua.hahnjy@gmail.com> References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrHLMWRmVeSWpSXmKPExsXC9ZZnoW5Q1MF0g7e9shZz1q9hs5g+9QKj xYmbjWwWzYvXs1ms3uRrcbv/HKvFqoXX2CyOb53HbrHvIlDZzodv2SyW7+tntLi8aw6bxb01 /1kt5n6ZyuzA53H4zXtmj52z7rJ7tBx5y+qxeM9LJo9NqzrZPDZ9msTucWLGbxaPhQ1TmT32 z13D7nHuYoXH501yAdxRXDYpqTmZZalF+nYJXBn3dzUyF+yWqXh/Nq6B8ZloFyMnh4SAiUTz 1ePsMPbOA8+YQGw2AQ2Jg4dOMoPYIgKaEidaJwHZXBzMAtOZJRofbGQFSQgLeEq0HVnJ2MXI wcEioCqxcrUXSJhXwFzi7/KJLBAzNSUaLt0Dm8kpYCfx8MhhNhBbSIBH4tWG/YwQ9YISJ2c+ AatnFpCXaN46G2yXhEA7u8SxQ2ehjpOUOLjiBssERv5ZSHpmIelZwMi0ilEoM68sNzEzx0Qv ozIvs0IvOT93EyMwVpbV/onewfjpQvAhRgEORiUe3hNRB9KFWBPLiitzDzFKcDArifDOigUK 8aYkVlalFuXHF5XmpBYfYpTmYFES5zX6Vp4iJJCeWJKanZpakFoEk2Xi4JRqYExw21175kX2 7dpVM9QM3whP97SuqJu2akrL8pXRATneVh2r7z4u7pr+uJvl04IP2mtj+1peXjzs1eI/4cDy JS/mzBFarHL6prXcnri+3yoLj8We8C+MmX6GzTLj8L4TzqyqRox8K4/LLNR/IPLpWaCGUsH1 LMc5dUn15xOT7eyjv2UwrmdfuUOJpTgj0VCLuag4EQDWmk3IkQIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrMLMWRmVeSWpSXmKPExsXCNUNWRzco6mC6wc11vBZz1q9hs5g+9QKj xYmbjWwWzYvXs1ms3uRr8fnZa2aL2/3nWC1WLbzGZnF86zx2i30XgWoPzz3JarHz4Vs2i+X7 +hktLu+aw2Zxb81/Vou5X6YyWxy69pzVQdDj8Jv3zB47Z91l92g58pbVY/Gel0wem1Z1snls +jSJ3ePEjN8sHgsbpjJ77J+7ht3j3MUKj2+3PTwWv/jA5PF5k1wAbxSXTUpqTmZZapG+XQJX xv1djcwFu2Uq3p+Na2B8JtrFyMkhIWAisfPAMyYQm01AQ+LgoZPMILaIgKbEidZJQDYXB7PA dGaJxgcbWUESwgKeEm1HVjJ2MXJwsAioSqxc7QUS5hUwl/i7fCILxExNiYZL98BmcgrYSTw8 cpgNxBYS4JF4tWE/I0S9oMTJmU/A6pkF5CWat85mnsDIMwtJahaS1AJGplWMIpl5ZbmJmTmm esXZGZV5mRV6yfm5mxiBUbGs9s/EHYxfLrsfYhTgYFTi4T0RdSBdiDWxrLgy9xCjBAezkgjv rFigEG9KYmVValF+fFFpTmrxIUZpDhYlcV6v8NQEIYH0xJLU7NTUgtQimCwTB6dUA+PcPzz9 kT571rVcilWY+TbBKl3G7NpOLeZdLi0ndRq57Y+7n9v+7M8HyTVvd7VvU99qGhanNOFzz7fy DndHp4y4xT3R5xqPTnU6cN4vXFt9AS8v+8tKvytO8YYeEVHqbWzmGuYlyy528oQ7bbPqamzw UVh269Matc8SHJkqS1J/O64727L0ixJLcUaioRZzUXEiAGDzoLaGAgAA X-CFilter-Loop: Reflected X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: ED73640011 X-Stat-Signature: jztninyfp3oygh3miwiqewj9oyfgsmzq X-Rspam-User: X-HE-Tag: 1740724820-747727 X-HE-Meta: U2FsdGVkX1/hMgdyJL26FC6aVGR6tztU9DcwLulOFg6kzUCVdBJWwQhSVHcidfGhaUJJCoDuIvTMle69TX2hWrx9UvWmXosstfKGMW9V7wHegtVAYjVbR/Tg3UqsHngSY+4rb2Zt0bJm0aVKqkvUUlqDTq5sJ+wio/u4VNQvlm4UFAaw9VJC2uRliD6cR0TgQ9UFAyKHtiSxlebEGhNr5d9A9R6yhTTgo1YrvR4+TYsMKJU79zygXfGSSTbrTIv7IcEkwf64VAYtCN19O4KD+aLmFktW8LZBpNZpkijCyC+hC0HcSbqNe7WZq9QW6VNh10F1XaYHCQxUi5uUU7HlExJC8Jbj12Zr3cemTcqQaDvfLPM4bwWBy4EDheMV3pZaId1JlEXQqp7x6j86AV0WT9ZewUe1jnFKW64rbm/akn5bfbAD0aUHz3byVB2MZhlmnNMdxhDdjJhwHMMOllqRurttd2o5h7BLjQrB0zMRLcP2je8q97jiYn2Pbhsv+1tQDftTHfouth24STCUj2rpGumv43EMqAawj7KEfPmQRJ6NqI26Nz+IR7Os3EhzOzRf4IprmBA4TXGK2iFqQqcxf2Y/3/xq6a3eZVxRb3PdfUrnKL3Ge2sf3AEi22hhG1LTUJfMPyj281Mntu0xcnnFS4tEeTn8VFYbVJgohXCrVsyQFhvR0Dm38i/MjsXFJ5gKJxXusPDtAIEEjQtlH7drVpGGn65JLVCIM3VMhi4MTIcvZmuO2vxcdBn5WH3CSEMcN/MCNnwBimad4POl/FRiyUmOELU1fGxmllOA4xIstCZyqR89nd6yZ509P6WV/TVRtY/EF6mafqCUpgUTq8yetYI/kSkPFQS+GBle/rED5pF9rRH9H5jwtYMVIlHID0YKkN4ra2oacQXsEcqEpLBeJHy/yGvjkdAyWuaNDPWnhznvTXHk+nghVN225Hyv1XOqPawIUjNZJ8Px4fTO/V/ g4lhHgrP 79Dqg2XKrUR0lX32u8jGPClY9l3Lozb/9SYRQQmLoHEFoeB2yp8XpN+RpUzAyEHkPRqXP 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: Hi, Joshua. First of all I accidentally sent the wrong email a few hours ago. Please disregard it. Sorry for the confusion. On Wed, 26 Feb 2025 13:35:17 -0800 Joshua Hahn wrote: [...snip...] > > +/* > + * Convert bandwidth values into weighted interleave weights. > + * Call with iw_table_lock. > + */ > +static void reduce_interleave_weights(unsigned int *bw, u8 *new_iw) > +{ > + u64 sum_bw = 0; > + unsigned int cast_sum_bw, sum_iw = 0; > + unsigned int scaling_factor = 1, iw_gcd = 1; > + int nid; > + > + /* Recalculate the bandwidth distribution given the new info */ > + for_each_node_state(nid, N_MEMORY) > + sum_bw += bw[nid]; > + > + for (nid = 0; nid < nr_node_ids; nid++) { > + /* Set memoryless nodes' weights to 1 to prevent div/0 later */ > + if (!node_state(nid, N_MEMORY)) { > + new_iw[nid] = 1; > + continue; > + } > + > + scaling_factor = 100 * bw[nid]; > + > + /* > + * Try not to perform 64-bit division. > + * If sum_bw < scaling_factor, then sum_bw < U32_MAX. > + * If sum_bw > scaling_factor, then bw[nid] is less than > + * 1% of the total bandwidth. Round up to 1%. > + */ > + if (bw[nid] && sum_bw < scaling_factor) { > + cast_sum_bw = (unsigned int)sum_bw; > + new_iw[nid] = scaling_factor / cast_sum_bw; > + } else { > + new_iw[nid] = 1; > + } > + sum_iw += new_iw[nid]; > + } > + > + /* > + * Scale each node's share of the total bandwidth from percentages > + * to whole numbers in the range [1, weightiness] > + */ > + for_each_node_state(nid, N_MEMORY) { > + scaling_factor = weightiness * new_iw[nid]; > + new_iw[nid] = max(scaling_factor / sum_iw, 1); > + if (nid == 0) > + iw_gcd = new_iw[0]; > + iw_gcd = gcd(iw_gcd, new_iw[nid]); > + } > + > + /* 1:2 is strictly better than 16:32. Reduce by the weights' GCD. */ > + for_each_node_state(nid, N_MEMORY) > + new_iw[nid] /= iw_gcd; > +} In my understanding, new_iw[nid] values are scaled twice, first to 100 and then to a weightines value of 32. I think this scaling can be done just once, directly to weightness value as follows: diff --git a/mm/mempolicy.c b/mm/mempolicy.c index 50cbb7c047fa..65a7e2baf161 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -176,47 +176,22 @@ static u8 get_il_weight(int node) static void reduce_interleave_weights(unsigned int *bw, u8 *new_iw) { u64 sum_bw = 0; - unsigned int cast_sum_bw, sum_iw = 0; - unsigned int scaling_factor = 1, iw_gcd = 1; + unsigned int scaling_factor = 1, iw_gcd = 0; int nid; /* Recalculate the bandwidth distribution given the new info */ for_each_node_state(nid, N_MEMORY) sum_bw += bw[nid]; - for (nid = 0; nid < nr_node_ids; nid++) { [...snip...] - /* - * Try not to perform 64-bit division. - * If sum_bw < scaling_factor, then sum_bw < U32_MAX. - * If sum_bw > scaling_factor, then bw[nid] is less than - * 1% of the total bandwidth. Round up to 1%. - */ [...snip...] - sum_iw += new_iw[nid]; - } - /* * Scale each node's share of the total bandwidth from percentages * to whole numbers in the range [1, weightiness] */ for_each_node_state(nid, N_MEMORY) { - scaling_factor = weightiness * new_iw[nid]; - new_iw[nid] = max(scaling_factor / sum_iw, 1); - if (nid == 0) - iw_gcd = new_iw[0]; + scaling_factor = weightiness * bw[nid]; + new_iw[nid] = max(scaling_factor / sum_bw, 1); + if (!iw_gcd) + iw_gcd = new_iw[nid]; iw_gcd = gcd(iw_gcd, new_iw[nid]); } Please let me know how you think about this. Best regards, Yunjeong