From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-oi1-f178.google.com (mail-oi1-f178.google.com [209.85.167.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 60FEA39A4A7 for ; Fri, 22 May 2026 22:06:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.178 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779487606; cv=none; b=rwRfVck5OOjzM1Y+cUNzH4G+clG1ATwuAfc/IfOpelb4NRfhDqpuEnfgo/jfT9hasvnYVjahq0XZfjrXJ1I5nM7lDQH84fEN8Srgtn+hPfMXhBV6T1oyuI8kXAavhM6WlKgIL1kSpXy2oKypL5mF6egIFKZwH+NlgtyP/qEzuGg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779487606; c=relaxed/simple; bh=H/XQBqBRChs9osHNUhzeryf/uvzIMoUecr7yd1hITkk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QWapiOU6+vkdALT2i/YQIea+hG/MWgcjjVkfi2lv3TnuTnxjVE0riKcH2lV68eufcgMFLGgfmHFea59GKwCvFvyluQLcVUk4XMYpW4flxhNMzP318dMSXuoz2g4RsUMT6HphjNOeX6Ku2sJLCSkYrnfg1i/sZsqSgGNYHglqeCk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=l2znhhr8; arc=none smtp.client-ip=209.85.167.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="l2znhhr8" Received: by mail-oi1-f178.google.com with SMTP id 5614622812f47-484df1dce93so5033648b6e.2 for ; Fri, 22 May 2026 15:06:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779487604; x=1780092404; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=nur42U2oSMrw1R78cJIX2iGXEeitKT4aAu4TEsPr2eM=; b=l2znhhr825O0VATWasx5uUKyMCtESUVcpZ5bYjG6ZelhNiwwmdgF/UYBEg71MXq8oH +LVz0D1IJcBpNhTANGwywm3zH+T7VIEpYOQ5QHuzVWRhu9G6OYrAXQ1qwAQIAiAjeFbk G3cxeLeZ6kQgOmZnAqXuSk6z/M3sWnyvGGvFFoyLh17UG9YKo/bVcwkrIdmHL1lk+DkQ gsx/ZysoWf5LSNbY5iAkasxAv4zFjxTgQnp6uX9yCjSjMiTZC1tdyyYC5Cr92PwbDTdi K+koGmg694X6QJELHGLYnstdHJfpP9Ub7oSffoHvoodUbXPxLxIBpWnLEyy0FWSmPWsJ Yp1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779487604; x=1780092404; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=nur42U2oSMrw1R78cJIX2iGXEeitKT4aAu4TEsPr2eM=; b=Wlu6MdoVT9So3YKt0JUFHAuiL43xffKnsGiCdwjRnzkpb1NIsZODPsJhvfnALLo/Ia NDAK8PwomGhbTfV5MGORaW/pRil35OLdXBHJKJqJ8Ew+0CuAqDkJvbyE+cc1iht+6SdC xPWX+pwELNx3RI/tZMf9qPUmYa/k5Nzbup2fA0B7i438bsU+k5OhJmwzvI5s3FPhrFs3 JzQBZMyXeGaKDw/v/sbOKOGXupNJzSuBmUeIYgn00qvyNs//55g16U4EU3ljUZwCETQL KSC3V2xUcB40CqlIcSZdbPssWFvmAGeCguBz3F87GJagf/XZ19YV1Ob1cwb1GOcruWyv bKcA== X-Forwarded-Encrypted: i=1; AFNElJ/sVZ7IvrDV9vGXG3PvN1K/BqLrYqSShSOcBnHPJQh8O61yD08SQiuoGgfD6PvP+S4/Vmuri9G+v6bj6vs=@vger.kernel.org X-Gm-Message-State: AOJu0YyNlWh1jpIKwb3HIPWYWXCgy8ir0h65GIJq+vZ9d14OrATZKlNu Eh+k12QYvyV3WFeJb9Mayx0OB5v1glKhraP6By7lpo0ai4tKmqq42to2 X-Gm-Gg: Acq92OEwMdt7KAERFIN4TeALrPhhuGK8i0hRaSHSdtLQOPeiUJss9VnSLMkeHgIByvz u1mmXx+LCZ/HDtwD7vfupm49FNcQcdhn1/Q490hNTU/FhS0oXj/hIrcjCYN7Eiluk/cGpuKDXpP DV2TMExhnATF4Cd6ARI9L8mANsWnGfVqmpzAYDmKONeVFegAUpjnTFXNjB+RrpTV9Lo58eEt3pv HAUFnUCYyekM9MHcNB7nudMZDeYUQ/BR/PsV96U8z7bxVuP/c9Sqw3QjP4KeJVAop3669kFMOdF fVlWlKulK4wzDZK1V7Oe+BX5q0blYfLOUIvUPm73WcVKEjMa43PekkoDjCevN4basXJOXAv/QYk UOk6MUrSBon7H0igDA+q8FoL6yyjXgSKiNVvAyCn77ckXgJ1BElMe3FGN3v8bGCykMOA6jWSUax 0KhUGBD0Sw220mEoXBBijoO757kbBPI/vtDZXu5YL4tcSKqXPGK9FY9w== X-Received: by 2002:a05:6808:e494:b0:485:5f33:91ab with SMTP id 5614622812f47-4855f3393c9mr972537b6e.43.1779487604358; Fri, 22 May 2026 15:06:44 -0700 (PDT) Received: from localhost ([2a03:2880:10ff:5a::]) by smtp.gmail.com with ESMTPSA id 5614622812f47-48554755d06sm1157002b6e.16.2026.05.22.15.06.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 15:06:43 -0700 (PDT) From: Joshua Hahn To: Johannes Weiner , Michal Hocko Cc: Roman Gushchin , Shakeel Butt , Muchun Song , Andrew Morton , cgroups@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH 6/7 v2] mm/memcontrol: optimize stock usage for cgroup v2 Date: Fri, 22 May 2026 15:06:24 -0700 Message-ID: <20260522220627.1150804-7-joshua.hahnjy@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260522220627.1150804-1-joshua.hahnjy@gmail.com> References: <20260522220627.1150804-1-joshua.hahnjy@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit In cgroup v2, it is unlikely for memcg charges to happen directly on non-leaf cgroups. There are a few exceptions, such as processes that have yet to be migrated to children, and tasks that are reparented on memcg destruction, that charge to the parent. Because it is rare for parent cgroups to receive direct charges, stock that remains in them are wasted memory. Drain parent stocks when the first child is created to return those pages for other memcgs to use. This optimization is not for cgroup v1, where tasks can be attached to any cgroup in the hierarchy, meaning stock can be consumed & refilled for non-leaf cgroups as well. Signed-off-by: Joshua Hahn --- mm/memcontrol.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 06ec4d26cb519..fc1e1b10b6ab6 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -3968,6 +3968,21 @@ static int mem_cgroup_css_online(struct cgroup_subsys_state *css) */ xa_store(&mem_cgroup_private_ids, memcg->id.id, memcg, GFP_KERNEL); + /* + * It is unlikely for non-leaf memcgs to get direct charges on v2. + * Drain the parent's stock if we are the first child. + */ + if (cgroup_subsys_on_dfl(memory_cgrp_subsys)) { + struct mem_cgroup *parent = parent_mem_cgroup(memcg); + int cpu; + + if (parent && !mem_cgroup_is_root(parent) && + !css_has_online_children(&parent->css)) { + for_each_online_cpu(cpu) + work_on_cpu(cpu, drain_stock_on_cpu, parent); + } + } + return 0; offline_kmem: memcg_offline_kmem(memcg); -- 2.53.0-Meta