From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-oa1-f42.google.com (mail-oa1-f42.google.com [209.85.160.42]) (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 BCE1E38D001 for ; Mon, 25 May 2026 19:05:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.42 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779735912; cv=none; b=NwIfOlfmKNrSrVKFMxnRJFCL8Mt3G+cyq2BlSnNug1uVbP3G+iuxDQdJFEIBBelN3E2iAnevSPYK/1pNcnJaYqm8H9YI+35uAbNMJczHCnBKjpSfWJFlXtrfjzb2lNCgQNDCRe7ei7zAlIm/KW4l9N4S0zrMjG+G1+RHL3L3Ihk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779735912; c=relaxed/simple; bh=zi3Ude+mgYpIWVX0/fNZoP84JwZ0OmrzuaVBZnHQ+MM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=II9G1OnvboWNQ7YWlAkyL11O5WKgr6SlLCuE8M3m0GJ/rxTs9BH+gdFHY4xajgmej4hAEutAc8/qg16QFa8EtuLxSpkJ/Q5k2GPkJytcl31X/oQmgPg9YilWG+RUMLpSWw44Cb05JdmgTBEhQ4h+cPyYcORlpQ14Wd1mFEJ9dH0= 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=iqH8Yg5F; arc=none smtp.client-ip=209.85.160.42 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="iqH8Yg5F" Received: by mail-oa1-f42.google.com with SMTP id 586e51a60fabf-43bf95c3f6fso263782fac.0 for ; Mon, 25 May 2026 12:05:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779735910; x=1780340710; 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=DQ36US7aEGO2e9MShcKJGWBIzONamDGB3D8ceYmvI+8=; b=iqH8Yg5F4gCLFUnOmnesvxqsvmmzTOGfKJxYrUvTbxQU6dIUMjYtkNGfyTZaVqxsjp tdBu4f5JkpcPRenPUG/FsGyTZRtv+ntzB23vrdyLPwOfM9Wp+f5I5OqZmcjoA3iWPoU3 hdwW/M+w8ih78RvAZto032ymThYOWAC0L63ngShpvI1dfN+QKEv1yrJsl0bI+DfMgrVa IunOZPpfX32ELBJ7CwTK1Vo+8Uoe+HWDA4s3xbG3dcDqROkLHBvoo5oAlpVhjQG5jG2L RBNv54LBPO7getggsVJw6mbVnCMc1WiIp9cot4LI+ty6ml1nlyVImQTwLSZUl55NYts7 3/tg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779735910; x=1780340710; 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=DQ36US7aEGO2e9MShcKJGWBIzONamDGB3D8ceYmvI+8=; b=rYtplgPk3rPKgmsN0CYbXkSVj8C8mvWtzhe+4YMLpGC+4C2m7Psxvz8saxsrvgiLZS /5tIJTrpVQ6m4+PqfV+uHU+WyI0oYUU7O329Ytks6DxXFj9UMM+J69+Jtvd4yKY93ejN KkFrfUmvyZCkoKMJggzg4oMt/AyJbWsqNz2rJ8x0N56HuojhxmtJWsdKRfiMRdJmIpY/ /t37MUe+pJzyz3ghV5RcT2wA/xWE1wO5ydoROkgxgUZnjTpn8T2G+NvJtW4qIYtQZsu2 SBqHkPyd0O8vHDJtvMY5CUrVWnlHCnplQmZzgNLMl6Xtp6PoZVN3U1/bT8pw3nqMJDQA 3X8A== X-Forwarded-Encrypted: i=1; AFNElJ/vXYEqyxkaI2q8yN+OhkkBoG/y/TsfqFd/ktxEp/pyAORK8keJh4gF3jJ95oByvlNavbpsgwvIzwsT4mI=@vger.kernel.org X-Gm-Message-State: AOJu0YxX9nmkwNELYHLBBJdNmYlh1F2CvI59PiAfZQO9ZCofA7IL3V1s f8sgFSez9b0wyrX93srNJvcAa66z1HlARVvMywnnjR9vBt3IWHtdmU+s X-Gm-Gg: Acq92OGkvSjN05aq3Ck4aH6bqgawTdN4sF6oujTuNYzm7aLjm4Cq/4a5iaadJKlVgHt 52iJhBs2e3JVTPhAKt6qcduJ1lmZ+hf4NbKPW6QYo/2PBaR2RL3uz+YohbSA3uk91RpOrbxnyQS oChWRGD+bwObGa4CBxI5rhBdHS/cdQPxRUTHzK1P92BbFumYrRAzldbVsB8mi2HnuUe/6XEm2i1 6x8fuJzaO+z0AlIjXgNyMpYR5UCX8Yp+SamDkDzdts86iZwPJHjMToNqeDoZi9DZ344ekGMUutx NAjX3G5pQl4QH3p8/PoqNHwfWe0HU1qFRXNv58z4JdntgCB31o+Eb2tZR4ztceMbntzPUsuyvay UJp3OGBLhxfPZvIMj6pXNFht6GqSFjyKb18Caq35bc1b0VCEymrbYA6U9iefdRy8arUqmnFU2y4 lp9/MQYZF8BEQPS61kQA71PS6qrTY8BJmyiCa3lXOFms2ImIdB1GUG0A== X-Received: by 2002:a05:6871:3291:b0:43a:60e5:21c6 with SMTP id 586e51a60fabf-43b2fcaa33bmr9336295fac.24.1779735909636; Mon, 25 May 2026 12:05:09 -0700 (PDT) Received: from localhost ([2a03:2880:10ff:4c::]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43b635d26b5sm10931436fac.6.2026.05.25.12.05.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 May 2026 12:05:09 -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 v3] mm/memcontrol: optimize stock usage for cgroup v2 Date: Mon, 25 May 2026 12:04:53 -0700 Message-ID: <20260525190455.2843786-7-joshua.hahnjy@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260525190455.2843786-1-joshua.hahnjy@gmail.com> References: <20260525190455.2843786-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 f20c9b829224a..64b82f1782720 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -4280,6 +4280,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; free_objcg: for_each_node(nid) { -- 2.53.0-Meta