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 4C15EC4332F for ; Mon, 11 Dec 2023 19:42:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 91C706B01F8; Mon, 11 Dec 2023 14:42:07 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 8CCB96B01F9; Mon, 11 Dec 2023 14:42:07 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7951F6B01FA; Mon, 11 Dec 2023 14:42:07 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 6B9646B01F8 for ; Mon, 11 Dec 2023 14:42:07 -0500 (EST) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 44814A1C03 for ; Mon, 11 Dec 2023 19:42:07 +0000 (UTC) X-FDA: 81555558294.25.B829725 Received: from mail-ed1-f51.google.com (mail-ed1-f51.google.com [209.85.208.51]) by imf16.hostedemail.com (Postfix) with ESMTP id 59E5B180011 for ; Mon, 11 Dec 2023 19:42:05 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=Baq1rSya; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf16.hostedemail.com: domain of yosryahmed@google.com designates 209.85.208.51 as permitted sender) smtp.mailfrom=yosryahmed@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1702323725; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=A1xlkoknCKe+rRAZq4chj+QZuYrtbZ8hKNLIJXx7jh4=; b=Cl0MDiiSuYX63eicHnX/Xhuj/5Cx0Bg5U2bVxvCsooitdo/imycH4RFWXwOOvl4SkxxYsH 2msVoIOIHytKP+1esaOq6zvmwNITvPr0NZd7XeLcNx5gtnmK+GiWe0C2EjYAXvdAA0RKmt POFcNHnYC7b1Jz1Pxtd9jNhML/hv3Rs= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=Baq1rSya; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf16.hostedemail.com: domain of yosryahmed@google.com designates 209.85.208.51 as permitted sender) smtp.mailfrom=yosryahmed@google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1702323725; a=rsa-sha256; cv=none; b=D/oR4nobhlJhq4EDhEuldI+Gke/AlbxFkIeXzd2jjmOhaM9pl27Fpt90V5YEEHO8mb4YI+ w47Pe+0Q4mpREoWZHLzf3p0bjWkAsGmypkUxBxOmA3ExMseLlvTFQGF7E7Of8I0vFlIzKE gYAZLir4dVtp6WnoL1W5b135nDwMWhM= Received: by mail-ed1-f51.google.com with SMTP id 4fb4d7f45d1cf-54cb4fa667bso7020784a12.3 for ; Mon, 11 Dec 2023 11:42:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1702323723; x=1702928523; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=A1xlkoknCKe+rRAZq4chj+QZuYrtbZ8hKNLIJXx7jh4=; b=Baq1rSyadSHq0PR4YTfspAErvPCDiJLVbkDy/XPc6dmBG3JrurFuquFWGYjh/SbSOt bdT3KDrv+WJWZRCS7PH6wHNcFWsePiwOzA1bTLFsvzzBvbV7D2FRgNUS4lxDsH6LlWuK kyEP9IpIFXNtt0ITtQ6uDWVTx6ijWqZ/kvIzeO8Dvn3N/2TkJO0oiS3vo1w5JMLGBnGO OHlwpWdGeQO2QchHc/8+KgEbk1ysp17H8zEBHMcP/K2+rvcQLbGYmrupBRcg12eH8Fsp FhWiD7XDTv34TusHJuAzYBctLuUaVvM09of7eoDtMV0o4j1NDAxGX/rQ748IBg2+UHEV 741w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702323723; x=1702928523; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=A1xlkoknCKe+rRAZq4chj+QZuYrtbZ8hKNLIJXx7jh4=; b=NBoWj7J4eHt4+VaTJBKSCSnG+DWdBrK2t+xtX8afBIQ6RncXcCSDleUgS7zFXS3UsJ G8eR6E0M6mMPVR6Wf8QagS332NkKlAXbKQ7kCQmDm5Wju2aa8ckWRVU7O0fZTFP7ULBS 5xen4G9jY/RtgBYUQAechJn/QvOS1/3DqqOupCvwdS7G060t5BetCEQ5eF6fw3cYT501 uf9iMuJFHHk03bTafVu4Xf2Qec+L0WodwgcY5AIb0J5M11hoOoiavIx8RL0XZr6yF1R4 Vickb73R/BGYFRkUxZBywQR9GuP2b8t5zxgqbFoMAxWPwkf0ThhHIwwEfwpeH1jaFkr4 e9uA== X-Gm-Message-State: AOJu0YxXSPvuGALwmBbgTTUoXH4rocATL5PwSTmsSQxT39YX4WXHweTK exm1y60e1qSOeGj5sU/l3E49EQAOs+zU3BLDBcCvLg== X-Google-Smtp-Source: AGHT+IEXX5Y883yAOe8bRnhdlt7eyI7DRp7CVLcBnW/9gGFaOpCCnndrsELXsX2XqXcpOP8ADBf92budkZMDnYJtEUo= X-Received: by 2002:a17:906:33cc:b0:a19:a19b:78ae with SMTP id w12-20020a17090633cc00b00a19a19b78aemr2279264eja.113.1702323723348; Mon, 11 Dec 2023 11:42:03 -0800 (PST) MIME-Version: 1.0 References: <20231211140419.1298178-1-schatzberg.dan@gmail.com> <20231211140419.1298178-2-schatzberg.dan@gmail.com> In-Reply-To: <20231211140419.1298178-2-schatzberg.dan@gmail.com> From: Yosry Ahmed Date: Mon, 11 Dec 2023 11:41:24 -0800 Message-ID: Subject: Re: [PATCH V3 1/1] mm: add swapiness= arg to memory.reclaim To: Dan Schatzberg Cc: Johannes Weiner , Roman Gushchin , Huan Yang , linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, linux-mm@kvack.org, Tejun Heo , Zefan Li , Jonathan Corbet , Michal Hocko , Shakeel Butt , Muchun Song , Andrew Morton , David Hildenbrand , Matthew Wilcox , Chris Li , Kefeng Wang , "Vishal Moola (Oracle)" , Yue Zhao , Hugh Dickins Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 59E5B180011 X-Stat-Signature: ssyz4oysib364xmzwrqgcznfa3c7rau6 X-HE-Tag: 1702323725-679790 X-HE-Meta: U2FsdGVkX18ej/8FWbgC27cGWqwQ+C4tfSfBE0PMKIOYtYzgJRpCK/IjEVcMLcPK2l9IhPDYD4SmWVNhiIQObAYokpEulV2kRQJo67p4Z/InlKiqFmxxxf6kXKeSQiG80DnW2wAyqztOnkDfT4LnFpSonanOqc+pb1gYGB/J1/jDLWlQXFnOt1CkZusOEZ8FmikEB3zLoSjiROFsklmcghEzQ5c9QsKvWKrftD6bKGu6CfYV9oNCu+fkKOY4VbxehxThr8vcrZb8zp7ZrqPsJgT0bGW7rmUS88xWntehKcTiv0rIcyomBaw4Lkfq+o/WMyHH3VjbW1rfh6+be4JPtRUACome/qy645RX8HIDq35FZpEkOSfjF+yEKMwE4wMIOTjsX56qtIi+nEbKJznAxqTQpADWLaPf0Qtqb55Ps49uI1Pp7Y1UFTckf+Xqm1K35NaS+eiNqJvN0EqAvcgqTpxR9J/cWslUeRkMlP3Qcg9zEbXfVG/98z3Tv0WsCq2r73pp8PmbfXEyMakr/lwvf4gE7I7tDPdgNAerrRGx7iG4k0SeLaL+4psVRuWi7xwPAduUrw+tYjouQp4cxDAbRo8THo5ZOABdgM8w4GZ1sRS4ZKu2ibt0Ellt7HZNeLC1BX3Cc6/VpRxGwXa9BmHWp1EM22eWal9EHwEDHkfgVFbGzEzoNW8s3BBuOYsNgFaqBGIN3oT4Q5RbQh3jjo9/XgnP18LoN4bHrFEkyY6wLi7YJqZjLlvzf7hx163m1+Mhwjs0xG9THSp3zSkQ+3Aw1W1pEq+7d8OuSf5FamPg5a9TbClfoCI6m3WBbqP65cjrgDvjEEH8phKnj42Qo+aL6gwxbgpWHSNUB7Bp6yY3C7qOh3AUvLHEbsX/M/RLRPdpw0eP4x+BY0kKFbSBJ1ZktXCanZg5pkRbJRFxDeLfdD/P+QGJJQNRY3/19pt+kgTxrLArT109pLUwEcTZfY+ zlUysSZl 73TaRo+cy8G4Hxl5lmsqp5HZ1rdS5brpnwsMt5nZk+ymC8UFBFHsvhQsvp9pLTGeDKuyJI+EkHxSfobtjuobTPiYaAMNFus37Bic+tNxmRCvjRnmZdCxrnmSTCvYwmhQ9zGu6HW1h0AfUK0GF2cNQJWiXm6A4m+eIlVSOJptJLzimZUpbsa+NH00Exs6OOI21/z2Q/dRXTOWhr/g3rQFwVhCVGZq84ZaThIBFgAFZboaC6AI6v+5MHYJ9gh9ia7Kl3TNCW72V/iY8wujH/bJWhHczipqjkNk+uDG+ebggs5XGiB2W8j8QNW0kOm/JdHMEroca 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: On Mon, Dec 11, 2023 at 6:04=E2=80=AFAM Dan Schatzberg wrote: > > Allow proactive reclaimers to submit an additional swappiness=3D > argument to memory.reclaim. This overrides the global or per-memcg > swappiness setting for that reclaim attempt. > > For example: > > echo "2M swappiness=3D0" > /sys/fs/cgroup/memory.reclaim > > will perform reclaim on the rootcg with a swappiness setting of 0 (no > swap) regardless of the vm.swappiness sysctl setting. > > Signed-off-by: Dan Schatzberg > --- > Documentation/admin-guide/cgroup-v2.rst | 15 ++++++- > include/linux/swap.h | 3 +- > mm/memcontrol.c | 55 ++++++++++++++++++++----- > mm/vmscan.c | 13 +++++- > 4 files changed, 70 insertions(+), 16 deletions(-) > > diff --git a/Documentation/admin-guide/cgroup-v2.rst b/Documentation/admi= n-guide/cgroup-v2.rst > index 3f85254f3cef..fc2b379dbd0f 100644 > --- a/Documentation/admin-guide/cgroup-v2.rst > +++ b/Documentation/admin-guide/cgroup-v2.rst > @@ -1282,8 +1282,8 @@ PAGE_SIZE multiple when read back. > This is a simple interface to trigger memory reclaim in the > target cgroup. > > - This file accepts a single key, the number of bytes to reclaim. > - No nested keys are currently supported. > + This file accepts a string which containers thhe number of bytes contains* the* I think this statement was only important because no keys were supported, so I think we can remove it completely and rely on documenting the supported keys below like other interfaces, see my next comment. > + to reclaim. > > Example:: > > @@ -1304,6 +1304,17 @@ PAGE_SIZE multiple when read back. > This means that the networking layer will not adapt based on > reclaim induced by memory.reclaim. > > + This file also allows the user to specify the swappiness value > + to be used for the reclaim. For example: > + > + echo "1G swappiness=3D60" > memory.reclaim > + > + The above instructs the kernel to perform the reclaim with > + a swappiness value of 60. Note that this has the same semantics > + as the vm.swappiness sysctl - it sets the relative IO cost of > + reclaiming anon vs file memory but does not allow for reclaiming > + specific amounts of anon or file memory. > + Can we instead follow the same format used by other nested-keyed files (e.g. io.max)? This usually involves a table of supported keys and such. > memory.peak > A read-only single value file which exists on non-root > cgroups. [..] > @@ -6902,12 +6913,33 @@ static ssize_t memory_reclaim(struct kernfs_open_= file *of, char *buf, > unsigned int nr_retries =3D MAX_RECLAIM_RETRIES; > unsigned long nr_to_reclaim, nr_reclaimed =3D 0; > unsigned int reclaim_options; > - int err; > + char *old_buf, *start; > + substring_t args[MAX_OPT_ARGS]; > + int swappiness =3D -1; > > buf =3D strstrip(buf); > - err =3D page_counter_memparse(buf, "", &nr_to_reclaim); > - if (err) > - return err; > + > + old_buf =3D buf; > + nr_to_reclaim =3D memparse(buf, &buf) / PAGE_SIZE; > + if (buf =3D=3D old_buf) > + return -EINVAL; > + > + buf =3D strstrip(buf); > + > + while ((start =3D strsep(&buf, " ")) !=3D NULL) { > + if (!strlen(start)) > + continue; > + switch (match_token(start, if_tokens, args)) { > + case MEMORY_RECLAIM_SWAPPINESS: > + if (match_int(&args[0], &swappiness)) > + return -EINVAL; > + if (swappiness < 0 || swappiness > 200) I am not a fan of extending the hardcoded 0 and 200 values, and now the new -1 value. Maybe it's time to create constants for the min and max swappiness values instead of hardcoding them everywhere? This can be a separate preparatory patch. Then, -1 (or any invalid value) can also be added as a constant with a useful name, instead of passing -1 to all other callers. This should make the code a little bit more readable and easier to extend.