From patchwork Tue Sep 26 06:09:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Huang, Ying" X-Patchwork-Id: 13398711 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 1799FE8181D for ; Tue, 26 Sep 2023 06:09:38 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A392D8D0067; Tue, 26 Sep 2023 02:09:37 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9C1A28D0005; Tue, 26 Sep 2023 02:09:37 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 862098D0067; Tue, 26 Sep 2023 02:09:37 -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 611298D0005 for ; Tue, 26 Sep 2023 02:09:37 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 2710740FB5 for ; Tue, 26 Sep 2023 06:09:37 +0000 (UTC) X-FDA: 81277721994.11.C819CAF Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.100]) by imf19.hostedemail.com (Postfix) with ESMTP id 187BE1A0010 for ; Tue, 26 Sep 2023 06:09:34 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=JAWfjDbX; dmarc=pass (policy=none) header.from=intel.com; spf=pass (imf19.hostedemail.com: domain of ying.huang@intel.com designates 134.134.136.100 as permitted sender) smtp.mailfrom=ying.huang@intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1695708575; 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:dkim-signature; bh=36opLWR6CJOCDKHWsDafiwu7OGcLAly4+3YEuY6IXMM=; b=3bECgy7IgXpfN8I4NMftWmpqZ0ie9huC+nxTS5ywcJ15OSLS2xAcDwy9dSWVRztoJPSPNo Ev87r9jwcjZdNfGQTpUsYA5NUIxV++9D33HFxxopww3xx4pNcKwM6GvOvYxd1oHfqGCqvA TLmQWJ2wMJxhc9pQojwUUUH/qvfSv3o= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=JAWfjDbX; dmarc=pass (policy=none) header.from=intel.com; spf=pass (imf19.hostedemail.com: domain of ying.huang@intel.com designates 134.134.136.100 as permitted sender) smtp.mailfrom=ying.huang@intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1695708575; a=rsa-sha256; cv=none; b=1uyVYektEjHccwPhPEhRsQLxIe3oN4xC1idgH8U+3RfGJXvk4zFqITPJP7LeVmAvFvCNjO 2CmGkvorVKkNcNmi7ZmgbRfBMy9KLicTW+naDl5fEDDKAobhcTuKOgCT6P0VeWXe5W9L9R K2WHCilZt2qypHuM1IaraXto5ioUXqA= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1695708575; x=1727244575; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=lVKcfu7RB9vKN2Hm50wym0zo99YnMLypq+qR+yt7FI8=; b=JAWfjDbXgIEtj3598j0W3Hw/t5mJEv1LcAHSeys7yaVuJnWR2D86FaZb 9bnStUP1ul8H1Udr6STgzrmy/3WG5Uh0bhxCKYKjz6C+pB8QsRifTvMNw ig4VqmXzKt9AO4FEGAsXwmvxalKmLe9W8JJaHFJABHZ4XF2mNi3na3Qyl 8cFQig2ZligKjChJ9EcQJEwD/elNncYZKqdUaT7UFxlb39OryguHnLGNH k6Sc8My6uniu0/yyaHQHd23wMvEYy6CLxk/+vq1eZcmX6PWcmOhq6b40Z WJ6jMPQqsnsOXvGpfRFHZYvdX+6Qkws10gD/EzSmzSFiCst2InL9f2SuB g==; X-IronPort-AV: E=McAfee;i="6600,9927,10843"; a="447991291" X-IronPort-AV: E=Sophos;i="6.03,177,1694761200"; d="scan'208";a="447991291" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Sep 2023 23:09:34 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10843"; a="892075860" X-IronPort-AV: E=Sophos;i="6.03,177,1694761200"; d="scan'208";a="892075860" Received: from aozhu-mobl.ccr.corp.intel.com (HELO yhuang6-mobl2.ccr.corp.intel.com) ([10.255.31.94]) by fmsmga001-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Sep 2023 23:08:27 -0700 From: Huang Ying To: Andrew Morton Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Arjan Van De Ven , Huang Ying , Sudeep Holla , Mel Gorman , Vlastimil Babka , David Hildenbrand , Johannes Weiner , Dave Hansen , Michal Hocko , Pavel Tatashin , Matthew Wilcox , Christoph Lameter Subject: [PATCH -V2 02/10] cacheinfo: calculate per-CPU data cache size Date: Tue, 26 Sep 2023 14:09:03 +0800 Message-Id: <20230926060911.266511-3-ying.huang@intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230926060911.266511-1-ying.huang@intel.com> References: <20230926060911.266511-1-ying.huang@intel.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 187BE1A0010 X-Stat-Signature: hjfzb6k3uztb8ihwrzi3oht6pr3465a8 X-HE-Tag: 1695708574-117470 X-HE-Meta: U2FsdGVkX1+cZarmc4KhYn3gBEBgFSIIZNFqlI78ySGRGlC0cEDlQO1W5U2mVsD/XKH9lOBajmPPjz1PqCQA3QWyqrZLUTLnworUZH5A1Nok5E/wfKOOncQcG5r/GkuLDAYahsxUI+LUcrKwCjF9UL4kqgQ5uXaIbMFlBdD56Yj5+twlY2Gi6hvgMiLAfPzk/S3V1US9AscnyZ/w3a2NwkXXcjCVghyizouPgOIhUuRiOxAtUTwwdMQlI2AqBu+xpCcv7BzsApzI75lyklA9dawe0FCJrcz9kQRCGUbRb1ORByEtxMPoSyOyjxUB8SbEoZjjsN2Wk24i+Q4HS/7Itg54vVquQyR2YTcKlKJrNr/CF0dkwFdBxM7ggc4SNjS80dSitivAAjO5zVWcOFBGIqZBlfiIIbfOMJCNi7Zs2Jwy1isIrfdavGuAvt4zIuwuyPq06Oz4BYg+Cgdt4Lq/vWcEzjw0GGlJsfrk4k4ZHrwJlZFE77wU3vR+HjH5XkvKX15s4+DAHLPNyumUMCdaj2wVRhvUIlS0xQIHI1eK6MomhWp7dY7pffr1UPkrJYa4qKeXwsky42ykTVFi8vUpqWwI24Fq/BXQ+ylrBOciK7BHJnlQpP9Jnk/fGO7mkpmWguORwNBiuyXlOvLZCxBlCcN5B7en/6JOMG0oPp4DaP4SGEf/CTAakyVF5tq/kDMwmZMWJOof2qu0v+W6OSHkv4iRGSDrXLC8zjvrKv3AfbRXtIpQenUT1SF24JFQy8yHq11erEARSCq5qS7c2g2x2zO9rFZF4KcPQ5XLgbeRWN1IjTXD/1pwKlqJOzuG09k5UwAljbqV20JqNjWqsfnMeAEVHmDSAqVOBEeyxJJOWlUMuYN/0kTiwMZePEcPEyjsk3tSVuWCJ2l7tX8uLwfya+wKbebge3K/LQ8Xa1PGeuxiN7ZmdkzRP4pZBadU8xBx8cwXCl7v7Qq60JRFXdV hxejAYHB Mp95cYNDwUa5w51ryBN0gY4W6lsujMlmfDB6NHERkdaoIIfvyBVtB+QFK2N667rmW8IZyvk8zoQ19gsf4FkE4kshRR5oaNbOhFVc29gcx2z+4lpN/leavn73UieTRrgP9LeXz/6ER89jLAEu05nnQIlP4IS+xXYmPr4cUqlKpkTXvwuADbIkyhNhSgZ57FiC3BSwD3QN/nA7bHJxzV/tv3kyqq6ccG27elFRqn+RC8rwF8g/LlBuxsjPv+TigZKzEYAp7zEjeE5Z6/E/HqMUCj07A2x0YQviWsFN3/9o028CcBtPGQb5pehFQndrGAOk8duuivRRDFWrnb7TiLVQOjGnWk8RguFo8Lh/huNcn4daka3WdiecO4K19HMLMvliqOVYmBs+T5yCSR79ySlrTUrNYcwgJG9L255W7za8kcVUqaaFwpIVF1u2dj2r2KGyWsar3u2a3rc65kWmc4BFSAk4Ceh7hThmENV4bY9/Uz79/6BMWNQuJM21vNoorG35Sxkfq6aXwE+hyE266yPfT46k88x4zF2fppC+BqW/LPpO35hwQuMTnNQYBU0SqftRItt17jasd3jpfsCZWATBw9aFtI7tMjBQt7A5N 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: Per-CPU data cache size is useful information. For example, it can be used to determine per-CPU cache size. So, in this patch, the data cache size for each CPU is calculated via data_cache_size / shared_cpu_weight. A brute-force algorithm to iterate all online CPUs is used to avoid to allocate an extra cpumask, especially in offline callback. Signed-off-by: "Huang, Ying" Cc: Sudeep Holla Cc: Andrew Morton Cc: Mel Gorman Cc: Vlastimil Babka Cc: David Hildenbrand Cc: Johannes Weiner Cc: Dave Hansen Cc: Michal Hocko Cc: Pavel Tatashin Cc: Matthew Wilcox Cc: Christoph Lameter --- drivers/base/cacheinfo.c | 42 ++++++++++++++++++++++++++++++++++++++- include/linux/cacheinfo.h | 1 + 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/drivers/base/cacheinfo.c b/drivers/base/cacheinfo.c index cbae8be1fe52..3e8951a3fbab 100644 --- a/drivers/base/cacheinfo.c +++ b/drivers/base/cacheinfo.c @@ -898,6 +898,41 @@ static int cache_add_dev(unsigned int cpu) return rc; } +static void update_data_cache_size_cpu(unsigned int cpu) +{ + struct cpu_cacheinfo *ci; + struct cacheinfo *leaf; + unsigned int i, nr_shared; + unsigned int size_data = 0; + + if (!per_cpu_cacheinfo(cpu)) + return; + + ci = ci_cacheinfo(cpu); + for (i = 0; i < cache_leaves(cpu); i++) { + leaf = per_cpu_cacheinfo_idx(cpu, i); + if (leaf->type != CACHE_TYPE_DATA && + leaf->type != CACHE_TYPE_UNIFIED) + continue; + nr_shared = cpumask_weight(&leaf->shared_cpu_map); + if (!nr_shared) + continue; + size_data += leaf->size / nr_shared; + } + ci->size_data = size_data; +} + +static void update_data_cache_size(bool cpu_online, unsigned int cpu) +{ + unsigned int icpu; + + for_each_online_cpu(icpu) { + if (!cpu_online && icpu == cpu) + continue; + update_data_cache_size_cpu(icpu); + } +} + static int cacheinfo_cpu_online(unsigned int cpu) { int rc = detect_cache_attributes(cpu); @@ -906,7 +941,11 @@ static int cacheinfo_cpu_online(unsigned int cpu) return rc; rc = cache_add_dev(cpu); if (rc) - free_cache_attributes(cpu); + goto err; + update_data_cache_size(true, cpu); + return 0; +err: + free_cache_attributes(cpu); return rc; } @@ -916,6 +955,7 @@ static int cacheinfo_cpu_pre_down(unsigned int cpu) cpu_cache_sysfs_exit(cpu); free_cache_attributes(cpu); + update_data_cache_size(false, cpu); return 0; } diff --git a/include/linux/cacheinfo.h b/include/linux/cacheinfo.h index a5cfd44fab45..4e7ccfa0c36d 100644 --- a/include/linux/cacheinfo.h +++ b/include/linux/cacheinfo.h @@ -73,6 +73,7 @@ struct cacheinfo { struct cpu_cacheinfo { struct cacheinfo *info_list; + unsigned int size_data; unsigned int num_levels; unsigned int num_leaves; bool cpu_map_populated;