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 8F0F5C07CB1 for ; Mon, 27 Nov 2023 23:46:07 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 933A76B0256; Mon, 27 Nov 2023 18:46:06 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 8E3556B0257; Mon, 27 Nov 2023 18:46:06 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6C08D6B0258; Mon, 27 Nov 2023 18:46:06 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 531146B0256 for ; Mon, 27 Nov 2023 18:46:06 -0500 (EST) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 09CF4C0124 for ; Mon, 27 Nov 2023 23:46:06 +0000 (UTC) X-FDA: 81505369932.20.88B58A6 Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.175]) by imf21.hostedemail.com (Postfix) with ESMTP id ECAC21C0457 for ; Mon, 27 Nov 2023 23:46:03 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=ZK5ah0aa; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf21.hostedemail.com: domain of nphamcs@gmail.com designates 209.85.214.175 as permitted sender) smtp.mailfrom=nphamcs@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1701128764; a=rsa-sha256; cv=none; b=n6622kM2qfUD1GkYMhzjXL8FIXdAfsByCedi4yNhFfFcGUQr5DN2X3xRdLmIO6Px/Vo5hF uT6d92zyqvNf0fksykyasQI/JGSpjxNibfLtD1tc0Sd1Ch0NnS7dZZg51IN8EfsiLssOmo jg/TA3FOL/omehMpojbtlxZy8Pv3kkM= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=ZK5ah0aa; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf21.hostedemail.com: domain of nphamcs@gmail.com designates 209.85.214.175 as permitted sender) smtp.mailfrom=nphamcs@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1701128764; 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=jvxvLBlp9fV8n96zZT2Ez0ns0pnZxld9OCN8MtepcpQ=; b=4jqprPvS7UIJwXbf/e5W+nzpjKbip2+M44kqzvHEJZ5WfL/A5PX6fiaNiAMh0daeJEyFvY uE0hyBArJPk6q3dL2h9b16vo+LLjdg5xznMfBL1QLX7NSA/6vxdT5akS33Zo9Uj0wsTKpE EDJ5Or/yRlUH+zzoqh2X8wIg9RFpLok= Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-1cfae5ca719so23360485ad.0 for ; Mon, 27 Nov 2023 15:46:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701128763; x=1701733563; darn=kvack.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=jvxvLBlp9fV8n96zZT2Ez0ns0pnZxld9OCN8MtepcpQ=; b=ZK5ah0aaoIWtPtcOjA34xcoMTTrQokVvBGUufQPT0ChV0p35YSnj+OeBuNXthy3sMj t/EBnms2eU9G03+eDDA9r8GDbdknWBKu1iOg+SOSG62S6BK32zSLsJeEZS92zraT3MKp daK/eD5IOn/IoI9NR7/rEnfI0QwVWPrTADSJzUphY3+wa76R20N+odSlpAZN63WSZZXR iajrvVIR8y9/7kiuNvmlF90LW/aFmXWDTqJS8Emn/YZ5fsA6ofWaVdkqA3VKAN4L1pWa ZARroYe6rYDk+XGl6sfJzgSRsRlgVTiyGA1rwj1KSkb6zTA4qdAAnPocWrlFWbkeuStx rJXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701128763; x=1701733563; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jvxvLBlp9fV8n96zZT2Ez0ns0pnZxld9OCN8MtepcpQ=; b=s84ofYGTXQk/bmWI89kWy0SsM4iCTTj+08pL6SecSIjUpLGI3bumQ1te5gKEEM75r3 piS552WwOfYW8hGCwI4gQtijQx5LFwzQ+dOgtXbaL2nesQqFUfSfrkb8JdJdDhG3oE0A BcO9DcD5gviKxQuDcR/FfEyMJ4q/WovSwHKY9RreNRB26wKKHwfq/o1rOe5Pvc5vaGIB soDUicRVTuwFHCHAvQdivhJ4j1SSSjBI0tKyQvFjjEiCBxeL6eTixwVAXJMmNj7TaNX3 pWOLs+QuDz4fN/9mUcYrmozfvm+KcYAgqWosi7XiYi0eglU7yNubqQrncDZUC93R/Xau Yq3A== X-Gm-Message-State: AOJu0YwnCzWCnon+wU13EQC2FxMQ6la5mIHWn0PP/3at94gVtj+XCqaS hDWSbhBwBSIQnAvX7xexvik= X-Google-Smtp-Source: AGHT+IFWjPsb6Vx9KPkJs2Zvxm9Rkb4xtPIG7tu2HUUPcSPyQQtnOlcCh2kiefVKGXuca/ewhsPVLw== X-Received: by 2002:a17:902:b28c:b0:1cc:3fc9:1802 with SMTP id u12-20020a170902b28c00b001cc3fc91802mr11577380plr.61.1701128762852; Mon, 27 Nov 2023 15:46:02 -0800 (PST) Received: from localhost (fwdproxy-prn-011.fbsv.net. [2a03:2880:ff:b::face:b00c]) by smtp.gmail.com with ESMTPSA id u13-20020a170902e80d00b001cfb14a09a4sm5507314plg.126.2023.11.27.15.46.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 27 Nov 2023 15:46:02 -0800 (PST) From: Nhat Pham To: akpm@linux-foundation.org Cc: hannes@cmpxchg.org, cerasuolodomenico@gmail.com, yosryahmed@google.com, sjenning@redhat.com, ddstreet@ieee.org, vitaly.wool@konsulko.com, mhocko@kernel.org, roman.gushchin@linux.dev, shakeelb@google.com, muchun.song@linux.dev, chrisl@kernel.org, linux-mm@kvack.org, kernel-team@meta.com, linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, shuah@kernel.org Subject: [PATCH v7 2/6] memcontrol: add a new function to traverse online-only memcg hierarchy Date: Mon, 27 Nov 2023 15:45:56 -0800 Message-Id: <20231127234600.2971029-3-nphamcs@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231127234600.2971029-1-nphamcs@gmail.com> References: <20231127234600.2971029-1-nphamcs@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: ECAC21C0457 X-Stat-Signature: 8qhfdzt7cthn13jzksrajkh8jowqozxo X-HE-Tag: 1701128763-925245 X-HE-Meta: U2FsdGVkX18OuiQhEQnDiV/6FgZnPzcohJr44NhYiEucxTQaalTyWWRNEbVxiXDZ5k2JOQFVuXqhqa3Oepg65OcXipgAIhcxy1zNYu2jRA1xM6iOimzxGK/P6GufPNTpKJDKdJxghJUSpTg1l6PkziquHsiPjCi/CkBVT9PeqA214nKghGHDp+6gSgn7/Ii2N+sLpmcQpWvVpHKIQBCLetTmMy+DuanwJZ8xNpvdHDmCbiK/zh+tgOG/ZQyqS5ty9SorAsrfPi1gHCwbFxNCep/thIHTvlZnQmtWPLo0RCu0h9NDB9L5r2CY6Cy7iQcgEqMbR+tw8fR+heYOjqmkcyk3ZlaMwGvl9l8sV8A5qJu2fgVMdTpfyxma1m9xl80A0c5/zpRa01m35s3nHoGkdrdkao27Qc9e0Y/K4shb/mWZBvC2OsLg0K08rBygOTtPsqLSZQ1mHc9LTfvTXXEAF/iVh3mafPXOdxbTVMRKCuZEsR26MBgnZlHd9ECfRBPtLCLD+9L96pWYmvE0mFNWTso98ELfukgqlD+vR7uMeZMSee7KSXIhN2kIpZaQvo3CTPvSQNzc6JfJeoSSKUAMOj7f2uJiwLycTu+3eTrF1CKR50zCHO3fx8r9VPhza4HzHyq/Y/qR4ADpLJpGiVJVenrliUa/4ZZbOCL45ejy3V9oTq+9CACB7FvSMTJ6od/e7S4DaWBzYCkDJ8Koo7crij0A5pECLo7nn7dBUkbrlrKsuP5LFL8I8Mg7lDWk4uzky043tlRRbys9tPE84bJ5M1/gHYqDUHqGnfxCBIuORE9S1c6TY3hCy3AqH4EuzbaFcHKzu5EFUoHWV2RN+8OX8765yidsxXsI/KzOEhsCOKyHbNfXOQKAXwKLUsKnqWN8SIHSx+NmoSVqXuiFumM704qK1mPzjsG9YLc9IzmCATtkE5IHVBLjIZdxMENzLYX34ALL95Ymnj18cXlnYy6 nb8LMxtg XGzuTzALVmhyDLMn4A4sWE3q8dED1OZnM35fXxtpfgrY8mlR7VovCBe/h01A/s0lyHEIz/uzXEa84oMmH4QUApA/NInkUW7IgJK5m7Ctqhq2lKMXvu9Wt3Z+A5zqmNM2vZHJU0Vq2N4a1ggnMYYHfS2YsEeDR/FQe3T/zmjibJ0NUe4UVNGZSOVRiItGEn3CKG6vTjgagUmiLhHQ2X9+pVbXShEE+fCoKIXe2VhMj7jDsTdiC0zWr5M8Dt7tWBMyQkVHwMG+3G3OSa8YBt3mjGqr3sg4InwUKjttHltXde0RBblLolGOMai9IBNZHGbWPPwZ0jfyfXh48ZI4KeP/m08827oWmffqOr0L1Yngsz97f2zeNsg2vCrBB8zt8ZepgwP7+Tu6IyNn9q/yRtBjd9ELLZ2AJtFVpNSuyFqpuiK+f8fvL/KxwsXuSs8UwIjB17MHqGkiSod4jtDtRDYaoRObzxCSqvVLjItLMBozqzChUO7c= 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: The new zswap writeback scheme requires an online-only memcg hierarchy traversal. Add this functionality via the new mem_cgroup_iter_online() function - the old mem_cgroup_iter() is a special case of this new function. Suggested-by: Andrew Morton Signed-off-by: Nhat Pham --- include/linux/memcontrol.h | 13 +++++++++++++ mm/memcontrol.c | 29 +++++++++++++++++++++++++---- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 7bdcf3020d7a..5bfe41840e80 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -833,6 +833,10 @@ static inline void mem_cgroup_put(struct mem_cgroup *memcg) struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *, struct mem_cgroup *, struct mem_cgroup_reclaim_cookie *); +struct mem_cgroup *mem_cgroup_iter_online(struct mem_cgroup *root, + struct mem_cgroup *prev, + struct mem_cgroup_reclaim_cookie *reclaim, + bool online); void mem_cgroup_iter_break(struct mem_cgroup *, struct mem_cgroup *); void mem_cgroup_scan_tasks(struct mem_cgroup *memcg, int (*)(struct task_struct *, void *), void *arg); @@ -1386,6 +1390,15 @@ mem_cgroup_iter(struct mem_cgroup *root, return NULL; } +static inline struct mem_cgroup * +mem_cgroup_iter_online(struct mem_cgroup *root, + struct mem_cgroup *prev, + struct mem_cgroup_reclaim_cookie *reclaim, + bool online) +{ + return NULL; +} + static inline void mem_cgroup_iter_break(struct mem_cgroup *root, struct mem_cgroup *prev) { diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 470821d1ba1a..b1fb96233fa1 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -1111,10 +1111,11 @@ struct mem_cgroup *get_mem_cgroup_from_current(void) } /** - * mem_cgroup_iter - iterate over memory cgroup hierarchy + * mem_cgroup_iter_online - iterate over memory cgroup hierarchy * @root: hierarchy root * @prev: previously returned memcg, NULL on first invocation * @reclaim: cookie for shared reclaim walks, NULL for full walks + * @online: whether to skip offline memcgs * * Returns references to children of the hierarchy below @root, or * @root itself, or %NULL after a full round-trip. @@ -1123,13 +1124,16 @@ struct mem_cgroup *get_mem_cgroup_from_current(void) * invocations for reference counting, or use mem_cgroup_iter_break() * to cancel a hierarchy walk before the round-trip is complete. * + * Caller can skip offline memcgs by passing true for @online. + * * Reclaimers can specify a node in @reclaim to divide up the memcgs * in the hierarchy among all concurrent reclaimers operating on the * same node. */ -struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *root, +struct mem_cgroup *mem_cgroup_iter_online(struct mem_cgroup *root, struct mem_cgroup *prev, - struct mem_cgroup_reclaim_cookie *reclaim) + struct mem_cgroup_reclaim_cookie *reclaim, + bool online) { struct mem_cgroup_reclaim_iter *iter; struct cgroup_subsys_state *css = NULL; @@ -1199,7 +1203,8 @@ struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *root, * is provided by the caller, so we know it's alive * and kicking, and don't take an extra reference. */ - if (css == &root->css || css_tryget(css)) { + if (css == &root->css || (!online && css_tryget(css)) || + css_tryget_online(css)) { memcg = mem_cgroup_from_css(css); break; } @@ -1228,6 +1233,22 @@ struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *root, return memcg; } +/** + * mem_cgroup_iter - iterate over memory cgroup hierarchy + * @root: hierarchy root + * @prev: previously returned memcg, NULL on first invocation + * @reclaim: cookie for shared reclaim walks, NULL for full walks + * + * Perform an iteration on the memory cgroup hierarchy without skipping + * offline memcgs. + */ +struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *root, + struct mem_cgroup *prev, + struct mem_cgroup_reclaim_cookie *reclaim) +{ + return mem_cgroup_iter_online(root, prev, reclaim, false); +} + /** * mem_cgroup_iter_break - abort a hierarchy walk prematurely * @root: hierarchy root -- 2.34.1