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 F0D1BC433EF for ; Sat, 7 May 2022 05:09:19 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4E8116B0071; Sat, 7 May 2022 01:09:19 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 497346B0073; Sat, 7 May 2022 01:09:19 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 35F9E6B0074; Sat, 7 May 2022 01:09:19 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 2655D6B0071 for ; Sat, 7 May 2022 01:09:19 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id E75EB2046F for ; Sat, 7 May 2022 05:09:18 +0000 (UTC) X-FDA: 79437768396.28.64CD2FF Received: from mail-il1-f228.google.com (mail-il1-f228.google.com [209.85.166.228]) by imf12.hostedemail.com (Postfix) with ESMTP id 2A1DD40035 for ; Sat, 7 May 2022 05:09:00 +0000 (UTC) Received: by mail-il1-f228.google.com with SMTP id r17so6027242iln.9 for ; Fri, 06 May 2022 22:09:18 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:dkim-signature:date:from:to:cc:subject :message-id:content-disposition:user-agent; bh=zrzqKK70W/pOx1iBnr89i/xaqiudUyZePB/8DQdsNpA=; b=JWlIdx29IKFnHOjRhqr4nXqBiKKjDg3CggGXhGiwCvHBjI3OiDtQucj7aFM+AdX7XO xKREU9Kfgqqknb1wSAmm55jP8aWh8auzKdv1wsDhEc2GYKC1DZYqWjitNZmE2BElPCSb EetULZPQkQ5NnFTFZVXt8m70y5hxV060u7BJzrQKCz2RZDmQGo5hJql8xI+XKX6cdZiT LAiX2ixVWDAfVkNKHrIA93SRdbvWIgJEynZnDJ5k/ME7MbSod81/3Z4yz33nxPU1GN3u 8A5qtZwXCUNjbrPd+L+2mjUIZltwuL5ZD4+nVXQtxkJ+ldbeIjAwdHasRnIV1iJX7pUU ccbw== X-Gm-Message-State: AOAM532FRcOKZskBaCKnNokhqzRFTILMjp+YixNLSzheLdB9TLzpO/e/ HneHbJHRGZoKp076A2hbrbgczOPgL7wFIc/SV4Yr0PpqcdPa X-Google-Smtp-Source: ABdhPJy6br2UBVMUyCBX4XgG/5VZOi4+GqCYkiS5K1y2Ax03MjjRZc/Fc88E+lTsPV9umemoQtAAGD0rD7EK X-Received: by 2002:a05:6e02:1187:b0:2cd:9df5:bfd2 with SMTP id y7-20020a056e02118700b002cd9df5bfd2mr2853047ili.121.1651900157795; Fri, 06 May 2022 22:09:17 -0700 (PDT) Received: from smtp.aristanetworks.com (mx.aristanetworks.com. [162.210.129.12]) by smtp-relay.gmail.com with ESMTPS id p3-20020a056638190300b0032b4d24246bsm657199jal.0.2022.05.06.22.09.17 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 06 May 2022 22:09:17 -0700 (PDT) X-Relaying-Domain: arista.com Received: from us192.sjc.aristanetworks.com (us192.sjc.aristanetworks.com [10.243.24.7]) by smtp.aristanetworks.com (Postfix) with ESMTP id 4026551D32E; Fri, 6 May 2022 22:09:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arista.com; s=Arista-A; t=1651900157; bh=zrzqKK70W/pOx1iBnr89i/xaqiudUyZePB/8DQdsNpA=; h=Date:From:To:Cc:Subject:From; b=yr0x5+aowZmQmo7lmY/5Wg6PNN8487hbz++VV/j4rk5A6Ko/8U6vVAsn43VRQh0FU knA6/6JPM+Lrb+jK31NXKsREjg1uMcE4wc3s4XHgU7BzJ8udqEWZa/3/eUr352XzaN 24hILD5pM7m0SWvE4pMY5juLZUGzOTt9UWIoBADvbIr/wmeAm38mGFzkm9+PNsc9uj IIIbKDu9HO/avJ7DjP1HLdR5G4tf8F6U5144z4ezwNUzyNuFzOUD5qm9U1u0vxe7cg +v4E3DVGSZ8ZDLDUdvYks4sk1NJyVsFYSqWIj1F7Wp8G+QEhLN9o/Vr/8ppyL+qLmt LDKcg14kNUfIg== Received: by us192.sjc.aristanetworks.com (Postfix, from userid 10278) id 209966A417FD; Fri, 6 May 2022 22:09:17 -0700 (PDT) Date: Fri, 6 May 2022 22:09:16 -0700 From: Ganesan Rajagopal To: hannes@cmpxchg.org, mhocko@kernel.org, roman.gushchin@linux.dev, shakeelb@google.com Cc: cgroups@vger.kernel.org, linux-mm@kvack.org, rganesan@arista.com Subject: [PATCH v2] mm/memcontrol: Export memcg->watermark via sysfs for v2 memcg Message-ID: <20220507050916.GA13577@us192.sjc.aristanetworks.com> Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Stat-Signature: 4rmgoaac5qmm8kdz5g66zp4u4eomqgjf X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 2A1DD40035 X-Rspam-User: Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=arista.com header.s=Arista-A header.b=yr0x5+ao; dmarc=pass (policy=reject) header.from=arista.com; spf=none (imf12.hostedemail.com: domain of rganesan@arista.com has no SPF policy when checking 209.85.166.228) smtp.mailfrom=rganesan@arista.com X-HE-Tag: 1651900140-484488 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: We run a lot of automated tests when building our software and run into OOM scenarios when the tests run unbounded. v1 memcg exports memcg->watermark as "memory.max_usage_in_bytes" in sysfs. We use this metric to heuristically limit the number of tests that can run in parallel based on per test historical data. This metric is currently not exported for v2 memcg and there is no other easy way of getting this information. getrusage() syscall returns "ru_maxrss" which can be used as an approximation but that's the max RSS of a single child process across all children instead of the aggregated max for all child processes. The only work around is to periodically poll "memory.current" but that's not practical for short-lived one-off cgroups. Hence, expose memcg->watermark as "memory.peak" for v2 memcg. Signed-off-by: Ganesan Rajagopal --- Documentation/admin-guide/cgroup-v2.rst | 7 +++++++ mm/memcontrol.c | 13 +++++++++++++ 2 files changed, 20 insertions(+) diff --git a/Documentation/admin-guide/cgroup-v2.rst b/Documentation/admin-guide/cgroup-v2.rst index 69d7a6983f78..828ce037fb2a 100644 --- a/Documentation/admin-guide/cgroup-v2.rst +++ b/Documentation/admin-guide/cgroup-v2.rst @@ -1208,6 +1208,13 @@ PAGE_SIZE multiple when read back. high limit is used and monitored properly, this limit's utility is limited to providing the final safety net. + memory.peak + A read-only single value file which exists on non-root + cgroups. + + The max memory usage recorded for the cgroup and its + descendants since the creation of the cgroup. + memory.oom.group A read-write single value file which exists on non-root cgroups. The default value is "0". diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 725f76723220..88fa70b5d8af 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -6098,6 +6098,14 @@ static u64 memory_current_read(struct cgroup_subsys_state *css, return (u64)page_counter_read(&memcg->memory) * PAGE_SIZE; } +static u64 memory_peak_read(struct cgroup_subsys_state *css, + struct cftype *cft) +{ + struct mem_cgroup *memcg = mem_cgroup_from_css(css); + + return (u64)memcg->memory.watermark * PAGE_SIZE; +} + static int memory_min_show(struct seq_file *m, void *v) { return seq_puts_memcg_tunable(m, @@ -6361,6 +6369,11 @@ static struct cftype memory_files[] = { .flags = CFTYPE_NOT_ON_ROOT, .read_u64 = memory_current_read, }, + { + .name = "peak", + .flags = CFTYPE_NOT_ON_ROOT, + .read_u64 = memory_peak_read, + }, { .name = "min", .flags = CFTYPE_NOT_ON_ROOT, -- 2.28.0