From patchwork Sat Mar 29 11:02:30 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nhat Pham X-Patchwork-Id: 14032646 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 5342CC36011 for ; Sat, 29 Mar 2025 11:02:37 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CCE9228017E; Sat, 29 Mar 2025 07:02:34 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C793728017B; Sat, 29 Mar 2025 07:02:34 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id AF6D128017D; Sat, 29 Mar 2025 07:02:34 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 89A1C28017B for ; Sat, 29 Mar 2025 07:02:34 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 959B11A132A for ; Sat, 29 Mar 2025 11:02:35 +0000 (UTC) X-FDA: 83274300270.08.6A3046B Received: from mail-yb1-f169.google.com (mail-yb1-f169.google.com [209.85.219.169]) by imf06.hostedemail.com (Postfix) with ESMTP id BCFDB180012 for ; Sat, 29 Mar 2025 11:02:33 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=kwgOn7bA; spf=pass (imf06.hostedemail.com: domain of nphamcs@gmail.com designates 209.85.219.169 as permitted sender) smtp.mailfrom=nphamcs@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1743246153; 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=Jsq1kdQlFLn6WmPKzWPYjHoxE5hbtalWfUYgVjm4hmU=; b=UWHjKO83xGnyfC89ImYuZGrazb//uHFTRwqYtzsxxDZlamXJND2G4VhMlKYQoMUBAjF9Hx JNhrAKoP1yVpPSOu0yWzjc4XqQ2cJXoFJgws6eAe1KkX/2AhyRHE9pNFWNWToIMxtC1luV iNKLq6UfeGJRuXKMErRypcIfyGRe0iM= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1743246153; a=rsa-sha256; cv=none; b=hjejAHQPohFtxpy/HSo9hzwt0JRi9dZXkEYkx8jBrDBCSqrs/FjiRi/Uph542F5LZiOQDe hF83IpkigXicVy4ZtJG57LfKpVRfRHvztPJHFkLt/Z8tbuapRj4MMduUZjh5x1M21wIjrQ XV7hDQoLeUiFpp0Ov54yMITpd9lKwgk= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=kwgOn7bA; spf=pass (imf06.hostedemail.com: domain of nphamcs@gmail.com designates 209.85.219.169 as permitted sender) smtp.mailfrom=nphamcs@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-yb1-f169.google.com with SMTP id 3f1490d57ef6-e643f0933afso3294295276.1 for ; Sat, 29 Mar 2025 04:02:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1743246153; x=1743850953; 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=Jsq1kdQlFLn6WmPKzWPYjHoxE5hbtalWfUYgVjm4hmU=; b=kwgOn7bApYDpf5FfaLkpa7n3LJahLMZTHGS5M/tOQwR0qgvlZNfT7AB1uQsImOtymO Us09o5uJJxiJdo/5TLavWw2vD40J5unEpb+UUZyiexQc+fkmYDYPLn/4GIzakRlyIUX1 QKqJyqC6pW59jMpBmTZENb42WV+Pji29a5xVKH9vWL/Ui012c+R1A+pQgxjITeRZ/XHP E4TtSpHp2yUXzReXmhk3ulKo3xTNvbCbJmXU9EMmExUBPT5wJYMwlBOKXpvdH8nLxHky rYUOqfM06LXQdDEtRnjCRyBVMsv3s0Efrv69ejhglWEkky5jU0hxsXH7UMNC/VH0f7fs 7D/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743246153; x=1743850953; 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=Jsq1kdQlFLn6WmPKzWPYjHoxE5hbtalWfUYgVjm4hmU=; b=LmjzYp9B2gJsStOowM6DYxpgfJ3Gt6PAizn+vI4ArVM+NkjPwagdSSohan4Bw7YO7E Dv4OKb1Fhyif5HQVKL1GwFeHaord0tnd+Op7tHTt8xj4IUB3iAAIKpI1eYu5CHqy/xEp qTtYCOvjoxe+Cy2ePHvLEyASlxIK/Kf9FL6KNezyeNLlsgfIco/DLSivhcOxRDZ2zmCW Re9tFBG4fOklrPvwvqDFcPOTFpf/sBmSVanPmRGuOa9LnrM9Om8i5M2fiegkD9sdfHmj I3ZTmSChmJFkqOTFXSgM7bdlmz+0H/WeWFjOXo25hXL+RRycBQYHcW6wYIqEcgsRCfMM jL5g== X-Gm-Message-State: AOJu0Yyhm9ryiPAx9bUOk4JdE80zT4oU9OqHdWcZ3i53U8BxPzzM8dGX p1neCXlo1k/iNLs5yWYwem21UVQqiw16cyZQeRUwbhy75GjAaDz64jBh99Qa X-Gm-Gg: ASbGncvYz4n3ztSvICEw/kQrhgarwz6/c/nNpStPH0bav6QQzYMf6nBHFiv1UKWy398 NK07pWE0Pf6HOJGe5lFnfbnbxFWDAfV5UhgAq+oWxxldxbpPgjKPogYzixMY5iIHo99p19/WAF/ 1z4wqr7Bm+zxbDlM2z2D0fpKLajtI5iqCU7QHUkaILaeWYW4U7sukSAADzI09MhmTPUwmKmsdRs noijbcHI1PRFif5B2SHUUcRC6Y9Bigk1r856WtFXmMSpBvkcVBKcXqauukX082nVd81KcwV2Sx6 rHkw9eEuvB9RtfUKk7eU+3v2HtiwMk/eySY= X-Google-Smtp-Source: AGHT+IH2l8g9eICi5VxjR50z5D2Rf7QYBYscXVtxEG4K+/DFEXhUzLsi2QX42gax29HRevowTi1+Bg== X-Received: by 2002:a05:6902:1581:b0:e6b:7e33:b637 with SMTP id 3f1490d57ef6-e6b82e2e712mr3210420276.14.1743246152740; Sat, 29 Mar 2025 04:02:32 -0700 (PDT) Received: from localhost ([2a03:2880:25ff:2::]) by smtp.gmail.com with ESMTPSA id 3f1490d57ef6-e6b8473463fsm324084276.23.2025.03.29.04.02.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 29 Mar 2025 04:02:32 -0700 (PDT) From: Nhat Pham To: linux-mm@kvack.org Cc: akpm@linux-foundation.org, hannes@cmpxchg.org, yosry.ahmed@linux.dev, chengming.zhou@linux.dev, sj@kernel.org, kernel-team@meta.com, linux-kernel@vger.kernel.org, gourry@gourry.net, willy@infradead.org, ying.huang@linux.alibaba.com, jonathan.cameron@huawei.com, dan.j.williams@intel.com, linux-cxl@vger.kernel.org, minchan@kernel.org, senozhatsky@chromium.org Subject: [RFC PATCH 2/2] zswap: add sysfs knob for same node mode Date: Sat, 29 Mar 2025 04:02:30 -0700 Message-ID: <20250329110230.2459730-3-nphamcs@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250329110230.2459730-1-nphamcs@gmail.com> References: <20250329110230.2459730-1-nphamcs@gmail.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: BCFDB180012 X-Stat-Signature: 974fhc6zirzquadwdno9u4nts4jpcoe8 X-HE-Tag: 1743246153-900515 X-HE-Meta: U2FsdGVkX1+DfV/47cAGXdv6tENrmW70aCe9ZtPCrQLWjfKDpJxSlolZMLTDJ+kmz7H0wnOptV2MPwxnY5KzkWILfmG1/h8D6BQXfJTL0VUL6rd1162i08bg5wyBajoZJqlyGpP4KowSbirtO6zzllHi37NOVsm04KPXlwmhWins9Gf3Phiu6STY1vCtg4EZHG1+3FwfWU/09tLuGnGs2RFgBsEbnxM3V92+KESGGDMkGhSGIDpz0x6rfVldUTkCRuRI2Q8NoWOUNvv22yo3qZPt/VcHOFDmfvE3uucjQWyGh3aAd8o1DIqa6YxeGgDk7cSmJ//aOPnWdVgYdGO9/wbJbBRKIY2NiX3aIRCIp1LDCI/x+dXKa0Bow7DUrUWfrxnrr0FvLUnkLbVJqc6Fb9HytUjue749M10eqMMNbDX6ffPoi76Vgv+eyHI4y47LT0sB+nh4MA8PZQ9Tt+aV6wZb59+xSylzMmsnd1bH8LQN7WRVoQEAWI7sXzxEaqzwXwpzz0HYaioYsArzzsXCWFBplcqvia5sEUNmCFfoxYfjvnvXN5wO6l8jjDJGUU/pvT7WruFKatWseNODrqSJfOP9NpKPLlKDLoxE4xRjZka+1RFjIjNa3VyIV+BiwiFEdtTu05wPvXVTyRUQznXLADw39DxF9sLD/Grvr3n/zp4usaobQerMlVzs1aL+MwdT/3m66ZrWL8mnzKwKjdn5K2t4aGpyS6kBA2Ngk1xqTeKAn14i+VqdUigFvj1MYYxLOExE5ZfEL8KxYehlJSNlfTjT/hgYJGBoFyMoUzFLfPXoXhIkpA5EOvgVdvhJnPT4ivqwdiLiyO6NK4Mqt7B4NCRW1Nos/Kv4ZhFcrOek1m6Atqi0RucN/jhPVL00Zd+lyfPrHjAHRZSc1DRz7pRD2LoiMmInhSG5AoEh220k388XYM1/azGK9c0Ge6/PnZtF6kHpySBZdJtslqV6O87 4/Bf8riK 2jqDytM7oiCBpPhRwiWyfq2k/4uPb/36nIYUFG/EfK2pq0Brf1yGToyTUUUkkyp66vXHHIOAzlVn9GW2hVwcSzA3jC3U0OSu9suaa9D2YtLDFUKby0s3Rna9y2JsqvMEdKIbFoFjRvTtSrL2U8PTgH3K6MJ212RdrGZdzjVzWMzk9Mz9y3+TYWR7ThwowdUg17H4uemMBNJMjHB+CW97R1TrPhM2gcPnx7YPHyil3iZ2uIyAtVGx9cOuRuUg2kx1H3n2UOJdMyuRvkwF9K2DEM1dTHKhxZB0uOxxOU9HRnT2gYGS7naN5kZzBKdCK7cec9tvtS4Mo9VmdKskILxL+C5j8t0HlDdXdh5jlWSBnlKw8+aOlx1AAAwRyr20w3NS2rTAZO6dMRZdmvzv7zcW0OMK335YesEKNl7MQaYw6tZsDuMm8xlo1gNnxPl5IKSvCF6fMvSV7YSKZ/BghqU4glzam4cnCxGmCxfQk8gXQ+oFGPoI= 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: Taking advantage of the new node-selection capability of zsmalloc, allow zswap to keep the compressed copy in the same node as the original page. The main use case is for CXL systems, where pages in CXL tier should stay in CXL when they are zswapped so as not to create memory pressure in higher tier. This new behavior is opted-in only, and can be enabled as follows: echo Y > /sys/module/zswap/parameters/same_node_mode Suggested-by: Gregory Price Signed-off-by: Nhat Pham --- Documentation/admin-guide/mm/zswap.rst | 9 +++++++++ mm/zswap.c | 10 ++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Documentation/admin-guide/mm/zswap.rst b/Documentation/admin-guide/mm/zswap.rst index fd3370aa43fe..be8953acc15e 100644 --- a/Documentation/admin-guide/mm/zswap.rst +++ b/Documentation/admin-guide/mm/zswap.rst @@ -142,6 +142,15 @@ User can enable it as follows:: This can be enabled at the boot time if ``CONFIG_ZSWAP_SHRINKER_DEFAULT_ON`` is selected. +In a NUMA system, sometimes we want the compressed copy to reside in the same +node as the original page. For instance, if we use the NUMA nodes to represent +a CXL-based memory tiering system, we do not want the pages demoted to the +lower tier to accidentally return to the higher tier via zswap, creating +memory pressure in the higher tier. The same-node behavior can be enabled +as follows:: + + echo Y > /sys/module/zswap/parameters/same_node_mode + A debugfs interface is provided for various statistic about pool size, number of pages stored, same-value filled pages and various counters for the reasons pages are rejected. diff --git a/mm/zswap.c b/mm/zswap.c index 89b6d4ade4cd..2eee57648750 100644 --- a/mm/zswap.c +++ b/mm/zswap.c @@ -129,6 +129,9 @@ static bool zswap_shrinker_enabled = IS_ENABLED( CONFIG_ZSWAP_SHRINKER_DEFAULT_ON); module_param_named(shrinker_enabled, zswap_shrinker_enabled, bool, 0644); +static bool zswap_same_node_mode; +module_param_named(same_node_mode, zswap_same_node_mode, bool, 0644); + bool zswap_is_enabled(void) { return zswap_enabled; @@ -942,7 +945,7 @@ static bool zswap_compress(struct page *page, struct zswap_entry *entry, { struct crypto_acomp_ctx *acomp_ctx; struct scatterlist input, output; - int comp_ret = 0, alloc_ret = 0; + int comp_ret = 0, alloc_ret = 0, nid = page_to_nid(page); unsigned int dlen = PAGE_SIZE; unsigned long handle; struct zpool *zpool; @@ -981,7 +984,10 @@ static bool zswap_compress(struct page *page, struct zswap_entry *entry, zpool = pool->zpool; gfp = GFP_NOWAIT | __GFP_NORETRY | __GFP_HIGHMEM | __GFP_MOVABLE; - alloc_ret = zpool_malloc(zpool, dlen, gfp, &handle, NULL); + if (zswap_same_node_mode) + alloc_ret = zpool_malloc(zpool, dlen, gfp, &handle, &nid); + else + alloc_ret = zpool_malloc(zpool, dlen, gfp, &handle, NULL); if (alloc_ret) goto unlock;