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 12D92C369C2 for ; Fri, 25 Apr 2025 20:18:49 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 382D76B0007; Fri, 25 Apr 2025 16:18:48 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 35A966B0008; Fri, 25 Apr 2025 16:18:48 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 246EA6B000C; Fri, 25 Apr 2025 16:18:48 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 06C406B0007 for ; Fri, 25 Apr 2025 16:18:47 -0400 (EDT) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id A03F714097C for ; Fri, 25 Apr 2025 20:18:48 +0000 (UTC) X-FDA: 83373679536.20.64A2881 Received: from out-173.mta0.migadu.com (out-173.mta0.migadu.com [91.218.175.173]) by imf26.hostedemail.com (Postfix) with ESMTP id 7451D140003 for ; Fri, 25 Apr 2025 20:18:46 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=BIk2XVRN; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf26.hostedemail.com: domain of shakeel.butt@linux.dev designates 91.218.175.173 as permitted sender) smtp.mailfrom=shakeel.butt@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1745612327; a=rsa-sha256; cv=none; b=WbMBJSmjJzUgPsVUPPVTbWbCWMUhIMFQE2guMhURfKSwnes501+kCNZHz5hu10nuw+0seA m1V5hqNfdGJFS22VeIbdrzShEvcNv7ecMxEIRf1RMgnWZ14E0+awBUVUr7/2kceLmCjoRa isCPULaqRtQsux8U0+Lk8byp+k9pNlE= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=BIk2XVRN; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf26.hostedemail.com: domain of shakeel.butt@linux.dev designates 91.218.175.173 as permitted sender) smtp.mailfrom=shakeel.butt@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1745612327; 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-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=FNLMf/5dW9WvMGj/QQPYDD8kv32KN5l1w2IaTPelp/4=; b=WsvMbm5w7m8e8a4Jsba3cxyGN5F68g6vBe/bhVW1s/iV2XfjoyGigfVXvn85Tc4akXk8Jg PTV05KmwrdD+J3RA6UvJ4sf9CjxH46IIwszLj59xc5QiD3Pje7YFjHqJdnH4cTTrWwvNbk oESwhavM+27lUITYzmTZDroOkI1MNQM= Date: Fri, 25 Apr 2025 13:18:36 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1745612324; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=FNLMf/5dW9WvMGj/QQPYDD8kv32KN5l1w2IaTPelp/4=; b=BIk2XVRNb4D0juBRNjJUrBrAmiC3GfLU66rJWolBEHCXWioRWFqLyuvixVTkjjMXiykt8D nZGs1le6vWy3J+gO2LBm/ZmpoY6yT/enKU6OryPyHe5nL9g7IvtIc7Vq/bbRnl4eHc6YDS u+S7cVpqd9DnGVX2fpLUV6g5u94/34U= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Shakeel Butt To: Andrew Morton Cc: Johannes Weiner , Michal Hocko , Roman Gushchin , Muchun Song , Vlastimil Babka , Jakub Kicinski , Eric Dumazet , Soheil Hassas Yeganeh , linux-mm@kvack.org, cgroups@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Meta kernel team Subject: Re: [PATCH] memcg: multi-memcg percpu charge cache Message-ID: References: <20250416180229.2902751-1-shakeel.butt@linux.dev> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20250416180229.2902751-1-shakeel.butt@linux.dev> X-Migadu-Flow: FLOW_OUT X-Rspamd-Queue-Id: 7451D140003 X-Stat-Signature: w6oryg8wkkdz3ecabubzentp6b5skohm X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1745612326-871186 X-HE-Meta: U2FsdGVkX19BKW5IwBqOW05u/nXdNZhOpUm1WgqPJ+Resn5sSwSMK+NmBDh74UodpLFc9U1J2MdXK23SjCR5Vb8oDa+giqDEn7NYn0eaLYyWSMzeUfnCbZwrOqlYWko3FBAZrv60lMwv56W5XYx64yLG04BmY/Bbaj1TcnXsewGqhl/OioitaKSCjzteQaq31Ynq7BrDszX+Q3RTOiWawyldsjkp/ckMdCRK/qAJ/720ezCwoZepdEbyxDhmmVfb34iKMlJmr+o9UHhjPp0AfWAY1R7aQnqIB6A0/Jvli/RpNGEqL6+Jj5X1I6gQzMn4kskvWhmwRBMksluU+XpjKqe0QH1hGKgUg4o3o8ovWE6jwT3Br9OufMaFyPv015kelyxouaw972e/XfHq4QfwHjnFQHBkPJyTEYHD7HXfJJ01yFDKYT0VAi+hyhI/QN9zlmRCzqklNxGpGJZ9pH9S+SctfzVApvc1lPrECjsgGNmyQtozVwufRcK49O2n7lHqjuRF+Q1m8ofe5aEmieYaPtTOGdTF4Jy9P5EnyrQCaWj4AJ4+Np7ObOtCADyrgKmBwbR1ohZ9lkiN9L1pzU9Ci4vH8mMTeZX1vweZ+++O8XsUD/arBrBWlrG65vjVcGDlh7L908Nn7kAld0SAj2Kan/giVFphbyoxdUTXunP6Z5R6xYymLc41B/vRlH8TuC49XNRfCVwnjWRTsAVUCdnyH/GzfIOLyOIHbIQd0YSxnPFhEWtQo1z7uI5cClsk1BDyY09JSjNI1p3nBLwrUJ24hVWWlX5wAkUWMlYcEsUYMOexRuFCqFj3ed9/sqFHMpjIudnMp8McC/kse71eSlKImEU1tZDIfIXqrcqCbXlV4NxGhjRWIVyNyQsG05HRTIMAnBCTdDONgIUjLCysrOZLcO3Tg3n6pKZpp4Sutkrl26fkWedKgfmWdQ28/AArl4xbdpqImNP82QHXEwVB9P3 Od9tJuQU mf3Y5VQiXLHFShgShFa0fo7YMHD33q4fWbeNL6mJDyMkWfQQHbEsv178tdAbcu2j31O5aGisfqRI2H68g3MNDLQTd68lMInImC+LlJCqxkBtugfOMeMCosKGV2I/tBtZeXlLBwqFYTxcSdY/c3psFT8NMNxfNiNipoRVxauhyUIOyHTDizoPYPG/2AA== 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 Andrew, Another fix for this patch. Basically simplification of refill_stock and avoiding multiple cached entries of a memcg. >From 6f6f7736799ad8ca5fee48eca7b7038f6c9bb5b9 Mon Sep 17 00:00:00 2001 From: Shakeel Butt Date: Fri, 25 Apr 2025 13:10:43 -0700 Subject: [PATCH] memcg: multi-memcg percpu charge cache - fix 2 Simplify refill_stock by avoiding goto and doing the operations inline and make sure the given memcg is not cached multiple times. Signed-off-by: Shakeel Butt --- mm/memcontrol.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 997e2da5d2ca..9dfdbb2fcccc 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -1907,7 +1907,8 @@ static void refill_stock(struct mem_cgroup *memcg, unsigned int nr_pages) struct mem_cgroup *cached; uint8_t stock_pages; unsigned long flags; - bool evict = true; + bool success = false; + int empty_slot = -1; int i; /* @@ -1931,26 +1932,28 @@ static void refill_stock(struct mem_cgroup *memcg, unsigned int nr_pages) stock = this_cpu_ptr(&memcg_stock); for (i = 0; i < NR_MEMCG_STOCK; ++i) { -again: cached = READ_ONCE(stock->cached[i]); - if (!cached) { - css_get(&memcg->css); - WRITE_ONCE(stock->cached[i], memcg); - } - if (!cached || memcg == READ_ONCE(stock->cached[i])) { + if (!cached && empty_slot == -1) + empty_slot = i; + if (memcg == READ_ONCE(stock->cached[i])) { stock_pages = READ_ONCE(stock->nr_pages[i]) + nr_pages; WRITE_ONCE(stock->nr_pages[i], stock_pages); if (stock_pages > MEMCG_CHARGE_BATCH) drain_stock(stock, i); - evict = false; + success = true; break; } } - if (evict) { - i = get_random_u32_below(NR_MEMCG_STOCK); - drain_stock(stock, i); - goto again; + if (!success) { + i = empty_slot; + if (i == -1) { + i = get_random_u32_below(NR_MEMCG_STOCK); + drain_stock(stock, i); + } + css_get(&memcg->css); + WRITE_ONCE(stock->cached[i], memcg); + WRITE_ONCE(stock->nr_pages[i], stock_pages); } local_unlock_irqrestore(&memcg_stock.stock_lock, flags); -- 2.47.1