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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id AD915C4332F for ; Thu, 9 Nov 2023 20:40:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345211AbjKIUkO (ORCPT ); Thu, 9 Nov 2023 15:40:14 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46008 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345218AbjKIUkK (ORCPT ); Thu, 9 Nov 2023 15:40:10 -0500 Received: from NAM04-BN8-obe.outbound.protection.outlook.com (mail-bn8nam04on2048.outbound.protection.outlook.com [40.107.100.48]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5818C44B6 for ; Thu, 9 Nov 2023 12:40:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fDadJFXIOVrwBeYm+k2eOcz4q/Awq/Gq6Qi96wVss47xZoYfGSpMsfC/GwUoMk/YXkHC+hp23IrMMFFmuBGKqbl7euLArvMECInv3felS06WVLzKwkQiEsgZhLx7Jp0/tQ0dVj8XoNLymtluUospBM7yqosbPf7DKuKj9FzRilkEvFMoEg8MQhaXasgtM+XtyttR2thecXJTpMdKJtd64m82wzEd5IHgyDa91luSOL9TGz101YmWDdXLszLH5MP6thd+CF1Gd0dx0LVGt0rHTH8lpH/8jcduLIEkS4JY19jYm0rWoV9OPGVrF9aMzFjbxWqVLUzUwcO9e9yi2HQDjQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=wYIa5fy7kF/TGatw9BcLLimowzzKdW9eKuMZ7ci3e4M=; b=dvbpleYXv9GYFvj+aN66koANWDpCkfYnLQOOOaJPmnH0XE6moWmVYrA/xgj/BSDTyNphkUFymTIjhdp7fulJlafiXEReEq82zc4LJ32AWGe2pvPvbRG+vvixykWsMOkj0iUGQQuzBPvR9d9TX6s97R1MOwFRMOh1h/SYAbDRv6qKy+UDHgm20cAzbdl4Y64EW/+iWHQy4kNcHT2G8/3FN0+I6TBEqV60dSMWFLQQOipSqQo3d34kZLAijmYwI3y7ODfuLGfEXuKu19ZGjmIgkGhSUSJcly4Tw8TLmR8W9wczNdHL22c0XwjLgJOEQ/4Dgq7lMwjWKk6FgvM/TTRGXQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wYIa5fy7kF/TGatw9BcLLimowzzKdW9eKuMZ7ci3e4M=; b=mzIdzvoskd+Xy6FqcPSF7fgLYSh4AoQfm7L+MZfo51WEJmlM2BfSu/VzhqBbOaRIBP/dq6axLkPuFvYob37EfMC1zrZWtu80RvBLzqVjTyLUSfs8Ky3fnKM1HMDHg9w2jw1TXFaUvzl0lz6qwgbFqXRMXUOEYzGfN3dbXeZSe+c= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; Received: from MW3PR12MB4553.namprd12.prod.outlook.com (2603:10b6:303:2c::19) by SA1PR12MB6917.namprd12.prod.outlook.com (2603:10b6:806:24c::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.28; Thu, 9 Nov 2023 20:40:06 +0000 Received: from MW3PR12MB4553.namprd12.prod.outlook.com ([fe80::1549:8c93:8585:ca1b]) by MW3PR12MB4553.namprd12.prod.outlook.com ([fe80::1549:8c93:8585:ca1b%4]) with mapi id 15.20.6977.019; Thu, 9 Nov 2023 20:40:06 +0000 Message-ID: Date: Thu, 9 Nov 2023 14:40:04 -0600 User-Agent: Mozilla Thunderbird From: "Moger, Babu" Subject: Re: [PATCH v7 12/24] x86/resctrl: Add cpumask_any_housekeeping() for limbo/overflow Reply-To: babu.moger@amd.com To: James Morse , x86@kernel.org, linux-kernel@vger.kernel.org Cc: Fenghua Yu , Reinette Chatre , Thomas Gleixner , Ingo Molnar , Borislav Petkov , H Peter Anvin , shameerali.kolothum.thodi@huawei.com, D Scott Phillips OS , carl@os.amperecomputing.com, lcherian@marvell.com, bobo.shaobowang@huawei.com, tan.shaopeng@fujitsu.com, baolin.wang@linux.alibaba.com, Jamie Iles , Xin Hao , peternewman@google.com, dfustini@baylibre.com, amitsinght@marvell.com References: <20231025180345.28061-1-james.morse@arm.com> <20231025180345.28061-13-james.morse@arm.com> Content-Language: en-US In-Reply-To: <20231025180345.28061-13-james.morse@arm.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: SN6PR01CA0029.prod.exchangelabs.com (2603:10b6:805:b6::42) To MW3PR12MB4553.namprd12.prod.outlook.com (2603:10b6:303:2c::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MW3PR12MB4553:EE_|SA1PR12MB6917:EE_ X-MS-Office365-Filtering-Correlation-Id: 80a7ebc5-9d05-4f34-f11e-08dbe1640e85 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: tEUjLFCaxn7iOK52PWRDtIhmFFcNkyIW4Zv7g/RG2sPG17YyTZilyO6htlDYvUmYUzNI74irDr42viHsiS2KiY+9KUXSt1DeTg8sjfce4S98H7OMLPg+hj4YLAj3twu6PAATWZyZf2f8VuTV0lYjuRYfLXhaV4wwwFDMaMwELeOG/eaax/2ms2C9QdBIpSXn4+hkqke3RHiMSLcwCX3klMaQTRG5L+ix8T3HLd0RHKhsjumKQcCR5igt7kFRWgpDvMhPZmMrZwCjq4iWMTAD2+YAW/YQ9iH5QFyaCgsIj48Em2MrQgLajY0wUoDm83AHCSme/ooQdawijnaa2VnKg8AWkq4bqsF7mGtc6esksGTDzqb0Q+r4vW9zJ06wRGGLOHofFFDu/+pdTCWY6jL2dfnCQEgzMDVUm0AElljd5MaajwmQrDC1PIQ3EqPEi0InRZ2bBFXojCa/oE0uxu/HQ+RPAIX3F2o+eaDtsrKZvBtyO4aWJ5PQfLlouHxm4PTVP4y5a7E734/nujYI4Dj5lTOCJ7ABlVgDCPb5CsA4QJNc/35j69hUVibz9H/aoVI2p/MN+PHbzA3Px4v88jK/rxtFZOWq4Q9GL74xVy3Hpf8DBpC+8dh4JyZF+jB9/YEwC39fxLSGktw28DUT+Le3iQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW3PR12MB4553.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(396003)(346002)(376002)(136003)(39860400002)(366004)(230922051799003)(186009)(1800799009)(451199024)(64100799003)(31686004)(2616005)(53546011)(6512007)(66556008)(478600001)(6486002)(6506007)(2906002)(54906003)(38100700002)(316002)(36756003)(5660300002)(31696002)(86362001)(41300700001)(3450700001)(66946007)(26005)(8676002)(7416002)(83380400001)(66476007)(4326008)(8936002)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?YXh2UVBaYzdrc2ZzenA4SUxFaUlmc3RjSGhVdnc3a1dxMG1FNklFZ3ZPQm1x?= =?utf-8?B?L1Y1QUhsVVF6bVFnb2h5WWxQSFh3QU9kUXh1dlI1ZVRzczE0Q2xSV3JKS0dG?= =?utf-8?B?cm42SGxiZkk1TXI2a01UWDdoL3BSdzBNdmc0aFBGa2lSNUhHTE1UVEVKSG1u?= =?utf-8?B?dkR3TnpQRC9sYi9kbmorVWk0V2FTdytIeDVPaDk0OTRGU09SazQyUXFQK3Zx?= =?utf-8?B?N2ZUcHBZQ1czNG5UUkxSTmZHNDc5WjRNZjdnT1FVbXl2OXkvbyt5U2w2MGRt?= =?utf-8?B?WTVRUFNPU3hpL2RSbDA1c2NDeHdVQVh5RFdyc2w1cU04Q1RWbVdRR29nMWJ2?= =?utf-8?B?NXRpeGkvL24zeTRHNWlPV0FRMU9rMUxpWWExcmFBNU5rSGFrcGNraEZzbStC?= =?utf-8?B?NXJTWHNOSEowVGx0eDdSSGcxQXk4d1hRQkxuSmdHWWxZdnlUQnFla0hTSjda?= =?utf-8?B?ZTR0Y0wza01RR0lHUjQ0L3c5SWZFNVVVT1R0Ynp6RTA0Vm1OOXF0NWphcEFm?= =?utf-8?B?WTFDbytGdUxRMmt5RFNZaGtUR1REUU5EQUt4dnh2aUxyY3dCY2ZtWTVsVHl2?= =?utf-8?B?cWprYWFPSGRuU0VZYUpIR203L0Y4WW9VRjlDbVpDaWE4NlJPM2tsbTFHdTBE?= =?utf-8?B?VVQwNStJWnVpd0VnUUdxK0tsaG1Ha2ZHbkNBcGdidjdXeDJUbmpGNmdFZ2Vt?= =?utf-8?B?ODNTM2VGaHUrR3FHcmVxL2QxRmIveGJqQnhrM0JoQ0JLejRJRGhVZCtPaUZI?= =?utf-8?B?dXNvOWE4MnJyU0JIWXlQZFkvRHR0UG5Sd2FzaFcxTGt5M2hHUkRrRzgwaGhh?= =?utf-8?B?V0orYlQ0SEx6T2NreGxzVlhWU3cyVE9MNFZwNzFOMllvb3oySUJVWlV5WlF6?= =?utf-8?B?UzNxZVB5S0FWMlpScUNPZ01FYjgvZ2dzcWFWcFBuN21JNFFkQjFPd1JZMytQ?= =?utf-8?B?KzBQV1hUM1AzMUlKU0tlOG5KQndyVk5vUFRRakRwYk40cHdkdTh5UmU3Uk4w?= =?utf-8?B?SGZaSHkwM29mYk9sQ0ZlZzNPUmorYkpCcnhtWU9oYjE2N21QQmxISlhiQlZE?= =?utf-8?B?d0FJRHJqK25hajN3dU5ucGE0RzYzaDZBWlpIWWZFdXMvSjIya21PeFBIOWxF?= =?utf-8?B?aVB4dU5YbEpLNU5hQnFmdS92MW0wRVQ4VStxS2oweC9Ga1RsbE1KNTVoOE1K?= =?utf-8?B?WTF6MkwvL3duTE1GSnBPOEVtby9LdC9ZVjlpWEppNWFqcENxRXdrUmxvRlNu?= =?utf-8?B?ZVZXaGF2Rk1LaHhzSE1PYTJCVk9XSFMvTm9FOTNvdGQ0VkhrK1l4UzdtWjFz?= =?utf-8?B?ZXlkalBLZVJ5M3I5a1lVeis4blVlU3BaZ0gvZWxEWEF2WUhIbnlraTdTTVVB?= =?utf-8?B?MnpieEhBSndUUnNPc1NsQ2Mwa1N1cDdQUHIxVUIxTStYVXBKSjM1eDlHbTBF?= =?utf-8?B?blpUQnYwNngzZnhybUNJdzFZQjZMV0IrU1FxMmdVSU56dnc2aG9LaXp6dC9Z?= =?utf-8?B?ZUliSXpVNkhOdHRDVmFycWs5bHRHQWVQMWJRTW5VUnErdFo1TFJZa3lVdFND?= =?utf-8?B?RTNqQ2JMTGxKTTFjTTVyWkttYlN4Uy9LSjNwQjJqdTFJckZuTm9YNW10SFlX?= =?utf-8?B?RlJML00vWVBZb004QTFsWjViMER6cEs3NWNvRW1JYXljYUVzYi9iZU1iYUUy?= =?utf-8?B?bVl3R05QV0RHSkdCdFR5THFsRkFiVzY2dkpaTS9FV204cXkzcnFmNDlidCs1?= =?utf-8?B?YmZXaFlQdThGN20rNjJEZndOSjFEVkg2dGlJKy9XWmI1R21kbTZWUitIL0Qr?= =?utf-8?B?bnBOVzBTVFI1bzZobFJkd3dZQ00vSnc0SkJ2WUJ3Q2JTcWQ5aVJjYlRkZ1da?= =?utf-8?B?dUM1L1pmZFozeU5vVHpNdDBUUmpSU2tVMlNGVzRPeTlVWElDNG4rUTRRYXh4?= =?utf-8?B?TnRJaEF2M256c2hST2NteTBUN3ZNSUdmZHloS2p1L3FVR2lpVWJuVml0OEZo?= =?utf-8?B?akI0OElvZ3VEekt3U3lhY3dGb1BiUWQ5eDVQY05Cc25CaVdlcXMydGxoQ1Y1?= =?utf-8?B?YUZ1Q1h0Mm9aZlpZQ2VBalo5Wm9ybWY1T0NrTzlLV3RvUElTT28wbC9kREEv?= =?utf-8?Q?D+EY=3D?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 80a7ebc5-9d05-4f34-f11e-08dbe1640e85 X-MS-Exchange-CrossTenant-AuthSource: MW3PR12MB4553.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Nov 2023 20:40:06.0958 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: BbMMqRN2gqRTxkWZ5Xev97fKOwo8N15i2767EQPTHaUtKzUX3wZ9FXc7D9LTVaSl X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6917 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 10/25/23 13:03, James Morse wrote: > The limbo and overflow code picks a CPU to use from the domain's list > of online CPUs. Work is then scheduled on these CPUs to maintain > the limbo list and any counters that may overflow. > > cpumask_any() may pick a CPU that is marked nohz_full, which will > either penalise the work that CPU was dedicated to, or delay the > processing of limbo list or counters that may overflow. Perhaps > indefinitely. Delaying the overflow handling will skew the bandwidth > values calculated by mba_sc, which expects to be called once a second. > > Add cpumask_any_housekeeping() as a replacement for cpumask_any() > that prefers housekeeping CPUs. This helper will still return > a nohz_full CPU if that is the only option. The CPU to use is > re-evaluated each time the limbo/overflow work runs. This ensures > the work will move off a nohz_full CPU once a housekeeping CPU is > available. > > Tested-by: Shaopeng Tan > Tested-by: Peter Newman > Reviewed-by: Shaopeng Tan > Signed-off-by: James Morse Reviewed-by: Babu Moger > --- > Changes since v3: > * typos fixed > > Changes since v4: > * Made temporary variables unsigned > > Changes since v5: > * Restructured cpumask_any_housekeeping() to avoid later churn. > > Changes since v6: > * Update mbm_work_cpu/cqm_work_cpu when rescheduling. > --- > arch/x86/kernel/cpu/resctrl/internal.h | 24 ++++++++++++++++++++++++ > arch/x86/kernel/cpu/resctrl/monitor.c | 20 +++++++++++++------- > 2 files changed, 37 insertions(+), 7 deletions(-) > > diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/resctrl/internal.h > index 521afa016b05..33e24fcc8dd0 100644 > --- a/arch/x86/kernel/cpu/resctrl/internal.h > +++ b/arch/x86/kernel/cpu/resctrl/internal.h > @@ -7,6 +7,7 @@ > #include > #include > #include > +#include > > #include > > @@ -56,6 +57,29 @@ > /* Max event bits supported */ > #define MAX_EVT_CONFIG_BITS GENMASK(6, 0) > > +/** > + * cpumask_any_housekeeping() - Choose any CPU in @mask, preferring those that > + * aren't marked nohz_full > + * @mask: The mask to pick a CPU from. > + * > + * Returns a CPU in @mask. If there are housekeeping CPUs that don't use > + * nohz_full, these are preferred. > + */ > +static inline unsigned int cpumask_any_housekeeping(const struct cpumask *mask) > +{ > + unsigned int cpu, hk_cpu; > + > + cpu = cpumask_any(mask); > + if (!tick_nohz_full_cpu(cpu)) > + return cpu; > + > + hk_cpu = cpumask_nth_andnot(0, mask, tick_nohz_full_mask); > + if (hk_cpu < nr_cpu_ids) > + cpu = hk_cpu; > + > + return cpu; > +} > + > struct rdt_fs_context { > struct kernfs_fs_context kfc; > bool enable_cdpl2; > diff --git a/arch/x86/kernel/cpu/resctrl/monitor.c b/arch/x86/kernel/cpu/resctrl/monitor.c > index cf512d4d383e..718770aea2af 100644 > --- a/arch/x86/kernel/cpu/resctrl/monitor.c > +++ b/arch/x86/kernel/cpu/resctrl/monitor.c > @@ -783,7 +783,6 @@ static void mbm_update(struct rdt_resource *r, struct rdt_domain *d, > void cqm_handle_limbo(struct work_struct *work) > { > unsigned long delay = msecs_to_jiffies(CQM_LIMBOCHECK_INTERVAL); > - int cpu = smp_processor_id(); > struct rdt_resource *r; > struct rdt_domain *d; > > @@ -794,8 +793,11 @@ void cqm_handle_limbo(struct work_struct *work) > > __check_limbo(d, false); > > - if (has_busy_rmid(d)) > - schedule_delayed_work_on(cpu, &d->cqm_limbo, delay); > + if (has_busy_rmid(d)) { > + d->cqm_work_cpu = cpumask_any_housekeeping(&d->cpu_mask); > + schedule_delayed_work_on(d->cqm_work_cpu, &d->cqm_limbo, > + delay); > + } > > mutex_unlock(&rdtgroup_mutex); > } > @@ -805,7 +807,7 @@ void cqm_setup_limbo_handler(struct rdt_domain *dom, unsigned long delay_ms) > unsigned long delay = msecs_to_jiffies(delay_ms); > int cpu; > > - cpu = cpumask_any(&dom->cpu_mask); > + cpu = cpumask_any_housekeeping(&dom->cpu_mask); > dom->cqm_work_cpu = cpu; > > schedule_delayed_work_on(cpu, &dom->cqm_limbo, delay); > @@ -815,7 +817,6 @@ void mbm_handle_overflow(struct work_struct *work) > { > unsigned long delay = msecs_to_jiffies(MBM_OVERFLOW_INTERVAL); > struct rdtgroup *prgrp, *crgrp; > - int cpu = smp_processor_id(); > struct list_head *head; > struct rdt_resource *r; > struct rdt_domain *d; > @@ -839,7 +840,12 @@ void mbm_handle_overflow(struct work_struct *work) > update_mba_bw(prgrp, d); > } > > - schedule_delayed_work_on(cpu, &d->mbm_over, delay); > + /* > + * Re-check for housekeeping CPUs. This allows the overflow handler to > + * move off a nohz_full CPU quickly. > + */ > + d->mbm_work_cpu = cpumask_any_housekeeping(&d->cpu_mask); > + schedule_delayed_work_on(d->mbm_work_cpu, &d->mbm_over, delay); > > out_unlock: > mutex_unlock(&rdtgroup_mutex); > @@ -852,7 +858,7 @@ void mbm_setup_overflow_handler(struct rdt_domain *dom, unsigned long delay_ms) > > if (!static_branch_likely(&rdt_mon_enable_key)) > return; > - cpu = cpumask_any(&dom->cpu_mask); > + cpu = cpumask_any_housekeeping(&dom->cpu_mask); > dom->mbm_work_cpu = cpu; > schedule_delayed_work_on(cpu, &dom->mbm_over, delay); > } -- Thanks Babu Moger