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 93F6CC369D3 for ; Mon, 21 Apr 2025 09:14:17 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 19AA56B0011; Mon, 21 Apr 2025 05:14:16 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 14B8E6B0012; Mon, 21 Apr 2025 05:14:16 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 011D66B0022; Mon, 21 Apr 2025 05:14:15 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id D4F7A6B0011 for ; Mon, 21 Apr 2025 05:14:15 -0400 (EDT) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 9D225C1C03 for ; Mon, 21 Apr 2025 09:14:16 +0000 (UTC) X-FDA: 83357489712.20.82698FF Received: from mail-pf1-f175.google.com (mail-pf1-f175.google.com [209.85.210.175]) by imf30.hostedemail.com (Postfix) with ESMTP id BF1CC8000B for ; Mon, 21 Apr 2025 09:14:14 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=it6Zv62b; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf30.hostedemail.com: domain of hezhongkun.hzk@bytedance.com designates 209.85.210.175 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=1745226854; 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=ygV5UbjOFbVAxBSeUQbkYKQf+DuR38CRxo53sfgG9F0=; b=nG8nySVaiTra+mkKSxqH3rm+IC7y0kAj9JtiNvPxTk6SLoY42bGID0eBuCU2kqQ2SFNSf8 fb7YaphrtftRvg8jMNcilP1CJZ9vhM/AGhL/8KMOcMutqbN0MAVd7Qx46AZG5dnoibv1wY /teDAVfwZRoEZiMdiq1YdzPFF7f7U/s= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1745226854; a=rsa-sha256; cv=none; b=6MY3C0pd8YwhVIMi647BC9znut4vVJVypwfniacqz58eeS8X9xADYZVJPadWbmUuW0PruT o8JDdiQQ+FKJG6lQAWH3K/B+z/HqDLcKMPIG8My/pvFTTbMmNYrwEhMtcH+3OMjDDDQYq+ ty0cJJ7c3agRMb0sbjY1b1s637Rc7k4= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=it6Zv62b; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf30.hostedemail.com: domain of hezhongkun.hzk@bytedance.com designates 209.85.210.175 as permitted sender) smtp.mailfrom=hezhongkun.hzk@bytedance.com Received: by mail-pf1-f175.google.com with SMTP id d2e1a72fcca58-73bf1cef6ceso3169880b3a.0 for ; Mon, 21 Apr 2025 02:14:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1745226854; x=1745831654; 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=ygV5UbjOFbVAxBSeUQbkYKQf+DuR38CRxo53sfgG9F0=; b=it6Zv62bclz0ZZqYnyQBGhDs6+msZ6l+GmfwsvhZE05/IzwvkgZauKWJ/dHoosbqwN AvNjeK7/t+K576zwJfTr1dUIRLiep28tRPtlwprInc9saE39b7AdcOs47p++1VXzB950 TiypRJCZqxQegvXyr/AeFWKUK5wgJfQfKSeW9dwqpoc/yY6Z4o7oBMFbjkdFHHWa45/D plQvVqcUoNe/xYAX8emB90Mk2Qh9POtKvZv942HZC0AL1HEeEsXJi+VvMmwjUBVIhBkk 2rrSO1notrDMDfsQzghxSThTke5F9jdbQ+NnHUZYp7uJv45/e0asB+08+0Va0Ys0JIUp WMpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745226854; x=1745831654; 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=ygV5UbjOFbVAxBSeUQbkYKQf+DuR38CRxo53sfgG9F0=; b=fQQVBXEOpzg2dkNLfBtX91ueBdh+DQCI/R/czNqvOmcRvg7+K+2UodQm20HWUjmpKV dl66g3yOioKUVcFZ890UNMCnE294IkhrC6Q7pSrWIN1p25/osaww4Vft+rOS0EwyCK2B J1gU0kJzO7HIwZussg3WCGxNj4vf7AKIOgtHIMmr/eUfFEOiqeoLXaZF6oAp+RqapX4M b1MNjKZ5Y0yOtS5ZKgOEO8GyaFR0+ozFNkl//SSFz8FpTIdjyB9zInw8u1XnVmeoLjX8 WlT59Y/1RT15OHDq2a1WyN05ko2PpOgELKrYBzMooQpsa6TyWogxP5uaOYaEqfwIA4Am zGPg== X-Forwarded-Encrypted: i=1; AJvYcCXApm0H0tD6j/kChcvDyQMT/eLXaMRxRfRUSgM4T+GN/MT/YDztLWa+/gSVJsZ8II9M+Ki5/gah2w==@kvack.org X-Gm-Message-State: AOJu0YxjPiAfDVUYVQCDfTf7gofjpSfGz0veTCfE14Vz9W7o4ki27M9Z R5/A8YYj5UiK0kacq0UmGgC5YEWZhDv1RETcKjUqh6ICTmHlYBEDUwLGDBmXYPQ= X-Gm-Gg: ASbGncudSetkeCU9p5PQkuY2LLP0CX8VfRTvGnlNnf/T3U5Fuv0JismSukeLEZZZqB7 eSKAt4wUpG1lUDb+/YEEB4ASrJ5yGs+ge0EoX0q5VnkMb/4V0RdxzfJMxR/HwLIjAqV0RVra9Om +wj4fXDi+Am/PY5wA8SjaXLMSm+jXpVc/u4dzNOQd99VKKDruddQEqTKMJer6AiBjpKzoqvtuuk jBzdz/2PIcBEUHtWVyCzL/DCzPijzmAZgBP3/klpkilsVcSMm/Zxw1FaFUASPx/f3tV+4pCPqI9 CZ7CahEsAsiBQBnIt/xxcUOoHaAr7pAb7Ap4VHfjGUmDFOsFHoeqgJqGwEdIoVm2pQ== X-Google-Smtp-Source: AGHT+IEll/jifAikPxZ2dySlj6rMg3Q4GiFLUm5e3aty/LuvjRx4u1+vE+jTGDM8X0cXAuamrHwh3g== X-Received: by 2002:a05:6a21:9202:b0:1f5:55b7:1bb2 with SMTP id adf61e73a8af0-203cbc22e32mr14573489637.6.1745226853712; Mon, 21 Apr 2025 02:14:13 -0700 (PDT) Received: from n37-069-081.byted.org ([115.190.40.15]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b0db157be12sm5246285a12.64.2025.04.21.02.14.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Apr 2025 02:14:13 -0700 (PDT) From: Zhongkun He To: akpm@linux-foundation.org Cc: hannes@cmpxchg.org, mhocko@suse.com, yosry.ahmed@linux.dev, muchun.song@linux.dev, yuzhao@google.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Zhongkun He Subject: [PATCH V4 3/4] mm: add max swappiness arg to lru_gen for anonymous memory only Date: Mon, 21 Apr 2025 17:13:30 +0800 Message-Id: <65181f7745d657d664d833c26d8a94cae40538b9.1745225696.git.hezhongkun.hzk@bytedance.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: BF1CC8000B X-Rspam-User: X-Stat-Signature: 7rhpxwxezcu84pqo948iub61dpjxryio X-HE-Tag: 1745226854-733700 X-HE-Meta: U2FsdGVkX18c0qlPSuDE7QPq5He1L3xqf1dBfNCpdHvhxqfdHYBzwVkyZYZwMCs2B5SriCTkFcQxs+IXyOn9WOtYvOvRnNMq1Xe2HHR5MxYAv/OnDZU7VvbWuSTY1S5ggEOpPc7uOS4OFee8uKiZfvGvhk+BPBFi/WCwFaiednLoWv6aRXmmQrVzGZQf06Yik19i23HVftU/8bCv4g9Q5NqvbUjFEQ5hUnH13Dv/IASqlqEqY+FQ7u2R8Nj/C1J4kPl43+2XV8hHpGBqVKPyxYTfQE2SYaUBBFMhGY5JcKVHLqSJZufSultNNeodaEXZY8qfLvxp80zq15VNiX3kvUuiP8xpZ1tK5u8LBeBUGogLs2a/Hrug0IkT61UEijuyPBkmM94ac5kz+t5E0G/jSNgEAZhR7LhoXxRd25KF9yUnzMe+Zjg33zN6VVakchyQBCY1JsHWmvy/l1CviY3FNLI8fjdvARaciKJnHPQnl/0qmQZXMKBlxlZQ+Z+lbArL1oKkAMp+TgntzzXehDqQfpp65Bvjhfm2xxZYLfCOiL4ICZTm5XgIgIkcv7LT19vT0ftpxUjR9zeKD6XcPAKCBW/KhwI71mQGfh0bqDzVuWWEr9kFrFJK6MM/tSiPUSoCU51UpX7NTfZAh3yYXEe1qnmwtiJYE1J0Xy5PkLQ+pxZgep+o3es2OixMTYiUw7yUTVuAgK2pAEQSj8GWS7ZBo92WV46Ilo2rwnD4e0VBFdutTLGKIy6lOqVZY+zzDH1Onz/sl1PwPO4sLm75UeZ3TjdLt5avrjZ8TJbgnYl/Co1tXVOIauvhEIEdFAurQ3oEpgtD7ajyju1UcZ0DkFmGu9E/DEQyAZQlow0rVhICBdFwg1seHtN8H5K591pKnFVEY07hAH4h250hdD3DaZMzKz40eTszRjPIb8AVIcnoeFHhVoXazwAoEy+fcpFNRSh5T0aBYzf0EptoQ1Ru+T+ 40S/N21u mXn051xzbUDQBVy25YV6LZCwUC8DVV+psa83rsf1DCi3I8UdvVfFWuUzuMtgTiedLyYNF+YX730ydsEaGiWO5DA5hnbt/dd3egamDK3X0PV3m9/HKTWcIR4KmlcHke5qfBEkW0V8NXN3XHv0Z7TkHQW067TPapfv/AgVJwooaJWR4OgCPFFCsjEMXOjItybYqqZG1bevaCpn8ypg8qyy8QeBOjbokcRKDl/+5sQuouSm+KGp3bdw8Qf67WgOcEnC/jiHiFqYNwPuyiD+gXEw3IpK9f/rQTpXBOhJW0wsz9wgyaKaAhx+yLRhjhj40Zk/zvxYVISDihtIWRTQFSjdnWdmPRnIhK2plDKUCPZx957KyhNw= 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 --- Documentation/admin-guide/mm/multigen_lru.rst | 5 +++-- mm/vmscan.c | 15 ++++++++++++--- 2 files changed, 15 insertions(+), 5 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..b442c20d1168 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -5581,7 +5581,7 @@ 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; @@ -5592,13 +5592,22 @@ static ssize_t lru_gen_seq_write(struct file *file, const char __user *src, 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; } + /* set by userspace for anonymous memory only */ + if (!strncmp("max", swap_string, sizeof("max"))) { + 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