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 5767FC3ABB6 for ; Wed, 7 May 2025 07:11:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9B07E6B000A; Wed, 7 May 2025 03:11:40 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 960966B0083; Wed, 7 May 2025 03:11:40 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8271B6B0085; Wed, 7 May 2025 03:11:40 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 659F46B000A for ; Wed, 7 May 2025 03:11:40 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id B5F72160D7A for ; Wed, 7 May 2025 07:11:41 +0000 (UTC) X-FDA: 83415241602.09.DD6B10E Received: from mail-pf1-f176.google.com (mail-pf1-f176.google.com [209.85.210.176]) by imf18.hostedemail.com (Postfix) with ESMTP id 156B91C000C for ; Wed, 7 May 2025 07:11:38 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=JcpSc4LL; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf18.hostedemail.com: domain of hezhongkun.hzk@bytedance.com designates 209.85.210.176 as permitted sender) smtp.mailfrom=hezhongkun.hzk@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1746601900; a=rsa-sha256; cv=none; b=CiQtdaC9o4sk34y0BR07xMeayP51Tn4hM9qxAqDAYfdfEGG0sTCLCV2LBouRMixZvtEB+t 9C9pC0x2MlFzFssNY6otp1HjZTtd2+c/CWDRZQTqT7xezZxbBY2DMrYAsT6kU9ctxiOQPe knQ7rltzXrBBwkZG91zJQAeaxrF2gkg= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=JcpSc4LL; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf18.hostedemail.com: domain of hezhongkun.hzk@bytedance.com designates 209.85.210.176 as permitted sender) smtp.mailfrom=hezhongkun.hzk@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1746601900; 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=W2sXebmCObPffjp+8cHq+ZdvnbCodI4A+STbiNXb5Tw=; b=AcjkYAVEMyjybPxkOMbDgTdnvzyc0+A6o0SHFluG6r9HUWWert0Qw1nMiojZiz7E2UQnPU Ddp07td2YwECqhvZqk3OsYnHdNgYD31lv2GjuQoKMVnqmPsYJzGA68/baAK9og5+weYGDm AoSMFM8A9jRCstiMfCfykE6QZvX3hlg= Received: by mail-pf1-f176.google.com with SMTP id d2e1a72fcca58-736c062b1f5so6782399b3a.0 for ; Wed, 07 May 2025 00:11:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1746601898; x=1747206698; 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=W2sXebmCObPffjp+8cHq+ZdvnbCodI4A+STbiNXb5Tw=; b=JcpSc4LLo9KQBAllngPJxo+QlcsNP0YKgM/TnZENM1m9NhDYDo6wluzhoJuaZKicEE tF+belm+02TQNdmM1TCPoFMhpgojbKZPFnIq6EXyeDjZXSV1LxKc58QTtcBJNtKvQYlT IWIuTX8ulsJ9sFr25vAg7Kqh7xOq8VohTImuJ0be0zYB/D1HnEWNeCjW9wBvm7zBe4rJ WCC5mFS1WP7I4EaKh5lLkxxMUajjoycQvtge7ncMH4wRSB5OYJADlTzBi+LhQUsPVvgc An8P3b2hUAh6SoxCA7IIBe6jn9XGYdZyIOR+qBTONN7aYmJjlvRsDXJlhKXEjU9VrFdT d/uw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746601898; x=1747206698; 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=W2sXebmCObPffjp+8cHq+ZdvnbCodI4A+STbiNXb5Tw=; b=gKG1VrJRH2vDBaBTU4yMkaatfhq8WhhkkoD7vHmnrtTnj/VzOlsB1KtDq15LKDL1n/ sNZIgcfk6+v28LoI0UDMbexAkV01QAQDw0wP3kE9r8E0q6kOvjX6hvAmuLcS/v3L3xs2 PuyMRyloAvx+S1K0cchHY2ZxUqyUYOR9IMmTiD8U9dk1rJxhhrTHFe2/CkT1F4ZhKcLf NRHKYPqqnYWooC+9MndA2RRKBqO2HnqXdebnfHq9CuOXF0WAOs0khn+z4wrsajKeUPHb rxhb0xe+KoDkPpK0RIOEt0SGXwVGPj+7RW1As/gi/t/mQ3mUh6on/CSLfrAXYC8HZGYF HD9w== X-Forwarded-Encrypted: i=1; AJvYcCWKIredRhYbg/2DY/GlHpt6+NninYNttDwerr622G4lp24H5xD7EGl/EixBfQ20KVEl6UGnYRSvdQ==@kvack.org X-Gm-Message-State: AOJu0Ywg4E+OqHhB/LV6+0spSgFYUQgkstNeUr0GLrYAP3G1MrQsRfhV MBcpfuUHPWSBOEM0oZmHxOK7MgnV6K+AK4kmQNa/FDnLXpZ9gVVJnj+G/dN1BV4= X-Gm-Gg: ASbGncu6Rdq38DcifcqcI134AqwF9mqjofO8Etx8ii7UK8N5VBsnUuz/Pmhnc74MCNg G1ti3JXBtI1iLGyTvMJN7yiPAKH0i8WLwtzMyIxKIqHfTi/4B3mEIYOE1Fj/v/rIRWmDDWyPQRr 6ktfg/ePJUIEcGG8D+A+KqSdsenH6176JkLzCJlbvzGfVQ2t+f300QRFQzvZY2k0zXGc1OtpCrI dmm/4gmaa6j8UeTECyKRsUVw+k9ZFMKYrtLYYeFWABO4IkKwQwbHqYbOd6hiMF9Zd92FSJRRyZ1 88GvbJHB9S8NIxh+8Eabvf2MTVrQeqDK8arrMcZiKXFumhb35phhVRi6uc572Qv5tg== X-Google-Smtp-Source: AGHT+IExFLJCG57fqwaPZBut003qAu68CPdGTZxKMH6TqQwBSJbCBf5bcIGoqQcNRoXcFwoPKkAKYg== X-Received: by 2002:a05:6a00:21c5:b0:740:a023:5d60 with SMTP id d2e1a72fcca58-740a0235d74mr1451883b3a.19.1746601897755; Wed, 07 May 2025 00:11:37 -0700 (PDT) Received: from n37-069-081.byted.org ([115.190.40.12]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7405906372fsm10741274b3a.148.2025.05.07.00.11.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 00:11:37 -0700 (PDT) From: Zhongkun He To: akpm@linux-foundation.org Cc: hannes@cmpxchg.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, mhocko@suse.com, muchun.song@linux.dev, yosry.ahmed@linux.dev, yuzhao@google.com, dan.carpenter@linaro.org, Zhongkun He Subject: [PATCH update] mm: add max swappiness arg to lru_gen for anonymous memory only Date: Wed, 7 May 2025 15:10:57 +0800 Message-Id: <20250507071057.3184240-1-hezhongkun.hzk@bytedance.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <65181f7745d657d664d833c26d8a94cae40538b9.1745225696.git.hezhongkun.hzk@bytedance.com> References: <65181f7745d657d664d833c26d8a94cae40538b9.1745225696.git.hezhongkun.hzk@bytedance.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Queue-Id: 156B91C000C X-Rspamd-Server: rspam04 X-Stat-Signature: os7gnf84z9k9wruux5py4sahjwxi8hab X-HE-Tag: 1746601898-114791 X-HE-Meta: U2FsdGVkX1+zr8jWbWlqw5q1UzKcs85LaHYvpxs7ebgWMij2nBD5o+jyDun5HMZ/2Yr6Fp1Jp/89IwYGYV9T/vFO3y3M5T9Ha9Ex+1vUfDpEZGLrpxN0dkR/xG3KGcHkaOtfjacS2kMsC+LKI2hI5eQJuk4kk9a9f2Eej2uZ2iFs0CdOtuP5QczQoSll/kzcCp+H0ENZqSKyl5mqCgPvAXz10VZ+OuwMLJMczkPtAF1Bz1mD6H45+Vs722fySTHhmllFEqRFErZFU7my4eQpBbeuty3BD9S1AAFCcmbYH4fZ37tUBC8zCQ3OhBsPbjVsBTuGTzShxdTnrZ0IaZACsNo7swtGtU2HHU8AUWbWuRzoNYZv/wVjx3AAo65YjOL6RETF8SOgfEo5zgHi5NGSeOnsv3yLasvnwceuhArDYogBgTgsq9M/JjVd5auVoVNvD/XS6KN9m2y97K4Rxoat5KB1C9ctaGh7o8mTkz9OZ2+B69mRKeqKaLWd9oUm1XRF3ji3S8SMPAezmXz17fDf3dGz/nnG+jqoZQG7U3Y/RFTLEKicEIB/6NsttGsTq1LAJmehtR7Y57Qba4o2JuBPf+pBXsfNexi5N5R1YVpbsYcJKY80r3b1j2o+SfNL7b3xW6MuEMgpof8+jeHBdMM0bBPJ+FG/jNkF7x9NYrqNJbZHWbQk/k9YjzluQ04AC5G5KtqdpZ4ohL8xzzswXxNOK3b7iUHkVMJ8+XyOVy6bQ22r/ESrYgCmCmPxNxUgUfsDPa5ixJ5vIrAbySVahgNWenseWiHQgfIWuVCQymn6IWOTjYdAJlEXuNW6AS8wGBkbU5cZCfIzAhftAl4qlCjPJbWsh9jfy4gwiyeM79ezGRFO64lKl2Z1lpt4uqdZ2b+Px97FHosmnwuc16aRWT/K91t/WTWACbJeMwQ9rRNF8/NNrsNPIjy3rRsOvB+eMpYHe4pNDTUn9RlEFvsMCc0 P8FgokJq /v1GFSQZDXsRj22BCRcYLQBkxjlFuiHSN8bTYk6OzrguLUvKsMHOq/bepF+eTuePMwjfqE8qoQ155w7dLldmuqhDMM0kA3VkQ2fHY50ubey2htB+Ec3Nqcd73WPeAJ9gVUPE5M/GdHOpEEwYC/pFE0TjM9Z12tdDtfU+mCNC6JNafBVHTmyOQEWTKWXKOSE1+XceqOm9uUnOp1xToBeeNNGRzAeG6pKGslugRVfHiN21hdlzJgdVBoNNKc0smVgFwJssPlwaPP3Dvz8ECnRAQAxoYe2qeXoMRd3NdRLXu+lE7IfOyjtbT8SGPtmFVUFTpJ2OGdtksfMZoOE5Vxwruf77mFPwU50LqwI6VgmV3XyRzcpIPE0sdcmfGRaIeO0km7L+9 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 MGLRU already supports reclaiming only from anonymous memory via the /sys/kernel/debug/lru_gen interface. Now, memory.reclaim also supports the swappiness=max parameter to enable reclaiming solely from anonymous memory. To unify the semantics of proactive reclaiming from anonymous folios, the max parameter is introduced. Signed-off-by: Zhongkun He --- update: 1) use strcmp instead of strncmp from Dan Carpenter https://lore.kernel.org/all/aBHYT27M1tRxNLRj@stanley.mountain/ 2) If swappiness is not set, use the default value. Documentation/admin-guide/mm/multigen_lru.rst | 5 +++-- mm/vmscan.c | 19 +++++++++++++++---- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/Documentation/admin-guide/mm/multigen_lru.rst b/Documentation/admin-guide/mm/multigen_lru.rst index 33e068830497..9cb54b4ff5d9 100644 --- a/Documentation/admin-guide/mm/multigen_lru.rst +++ b/Documentation/admin-guide/mm/multigen_lru.rst @@ -151,8 +151,9 @@ generations less than or equal to ``min_gen_nr``. ``min_gen_nr`` should be less than ``max_gen_nr-1``, since ``max_gen_nr`` and ``max_gen_nr-1`` are not fully aged (equivalent to the active list) and therefore cannot be evicted. ``swappiness`` -overrides the default value in ``/proc/sys/vm/swappiness``. -``nr_to_reclaim`` limits the number of pages to evict. +overrides the default value in ``/proc/sys/vm/swappiness`` and the valid +range is [0-200, max], with max being exclusively used for the reclamation +of anonymous memory. ``nr_to_reclaim`` limits the number of pages to evict. A typical use case is that a job scheduler runs this command before it tries to land a new job on a server. If it fails to materialize enough diff --git a/mm/vmscan.c b/mm/vmscan.c index 49eb2a4e490d..31142acdcedc 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -5581,24 +5581,35 @@ static ssize_t lru_gen_seq_write(struct file *file, const char __user *src, while ((cur = strsep(&next, ",;\n"))) { int n; int end; - char cmd; + char cmd, swap_string[5]; unsigned int memcg_id; unsigned int nid; unsigned long seq; - unsigned int swappiness = -1; + unsigned int swappiness; unsigned long opt = -1; cur = skip_spaces(cur); if (!*cur) continue; - n = sscanf(cur, "%c %u %u %lu %n %u %n %lu %n", &cmd, &memcg_id, &nid, - &seq, &end, &swappiness, &end, &opt, &end); + n = sscanf(cur, "%c %u %u %lu %n %4s %n %lu %n", &cmd, &memcg_id, &nid, + &seq, &end, swap_string, &end, &opt, &end); if (n < 4 || cur[end]) { err = -EINVAL; break; } + if (n == 4) + swappiness = -1; + else if (!strcmp("max", swap_string)) { + /* set by userspace for anonymous memory only */ + swappiness = SWAPPINESS_ANON_ONLY; + } else { + err = kstrtouint(swap_string, 0, &swappiness); + if (err) + break; + } + err = run_cmd(cmd, memcg_id, nid, seq, &sc, swappiness, opt); if (err) break; -- 2.39.5