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 A3CACC3ABA9 for ; Wed, 30 Apr 2025 00:56:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 002DA6B00BA; Tue, 29 Apr 2025 20:56:28 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id ECA426B00D0; Tue, 29 Apr 2025 20:56:27 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D1D346B00D1; Tue, 29 Apr 2025 20:56:27 -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 A96CE6B00BA for ; Tue, 29 Apr 2025 20:56:27 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 68E1256D5F for ; Tue, 29 Apr 2025 23:38:58 +0000 (UTC) X-FDA: 83388699156.15.AB7FAB4 Received: from mail-yw1-f177.google.com (mail-yw1-f177.google.com [209.85.128.177]) by imf27.hostedemail.com (Postfix) with ESMTP id 7396940007 for ; Tue, 29 Apr 2025 23:38:56 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=KTwgQSH7; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf27.hostedemail.com: domain of nphamcs@gmail.com designates 209.85.128.177 as permitted sender) smtp.mailfrom=nphamcs@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1745969936; a=rsa-sha256; cv=none; b=MTi3y4OvEFImHqE4IYnH3+j37orJT42DVWcA+ULXAad4RG2D+XIYREOfjzOMKhxILX4lU1 QW75zMtbB2fXUh9xt/ImHFTh/P5JGRPBT84TtXIL1FF9g2Mm9TPEC8XUjbNu0MoPXBY3pD J+AEFqrYZFs+bACu1A44Y7qvKA5ghTA= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=KTwgQSH7; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf27.hostedemail.com: domain of nphamcs@gmail.com designates 209.85.128.177 as permitted sender) smtp.mailfrom=nphamcs@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1745969936; 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=BlPKsWIQtTq0kXJAAHxIhR2EL0TtNwMyl7VzV0J4eyc=; b=5nAI1cMzM74edQ2xM8zXAV3fsH+M0wks8zTX1ShyM8bqzeAB0JSGlxDspiFW1HwABtDLUO 77ahvTpLq4AqiOnXPx1JlD8Qi99oegjTO98wJG59j2y+TvZx4hmEKgaCQFkIcBFQf+ahbh j7O9fraOHLrGlRK5eb91j3/YSpYHhYk= Received: by mail-yw1-f177.google.com with SMTP id 00721157ae682-70814384238so57315247b3.0 for ; Tue, 29 Apr 2025 16:38:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745969935; x=1746574735; 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=BlPKsWIQtTq0kXJAAHxIhR2EL0TtNwMyl7VzV0J4eyc=; b=KTwgQSH7PyhwVnBVkj3ywrjBAqKEYl/BZk7KhN7xMKA6624SFvwHTtudcoW1+MRsSW Ufl4cpLEYm687Y0oZWKhNcXvUwahe6cgo8YqoMCs3iBHQOFTWKZjJhtCRM/+nyO9qspq edBFr96eIyIb9mlTpyddVtnN89Vol31YkkiQkyB6yYzkkXfihzbyP7EVmM5/lzrsxqf9 dX3muj/GA9gsdXSpDh4yWSTlxmkOZ/4O9Snv0vBQim5IWv6BeV5q5VHPOYOr56kQtdon Fbijp+/EtHgCZSpIM4ZMBld4HYabu3faG4pTZAhuDEpaaak9+/D6ocaE8nfcS3ay2/hv Mcjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745969935; x=1746574735; 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=BlPKsWIQtTq0kXJAAHxIhR2EL0TtNwMyl7VzV0J4eyc=; b=t2TD/hhV8seIrXqSuubqoF/1VaAYSQp2jNNnvNoqBHHIHje5kHnUs11nZVd9imWN1z ISc3aCLAidGfxhqR3Vb4UkcHqDODxbvn67vISus2HPSihP1bH8m0lMAVLt2+wyaTWJ1S /bz7T12eqGqomGYxLl3xLOMKyR3NlSbSVnWIbF1XlOQyrg8+mgaEmcrdm7BfZjcM7C/i ybh2N1aC7N9Dr+8MojC+rrYTOwp3XAhea9PvYKzb0Dx/YlHQJExkb/ltKX6yDZ41m8CA cfIfLDwn+EcfxZuXThZvms5UyBP/KQeJUiNPSh+eGTL51mJEKmg7mqFT17gQ43d4FhnW LYtQ== X-Gm-Message-State: AOJu0Yybz797PBksElvVY/tFwjiQNbAPFlY2FsLFAMMKqPY7Szwyptmq MDFe+5r3CQpVcOIefT1udTY3CrrtzH9zMrGODgzAtaB0i+m83OWkvih1Fg== X-Gm-Gg: ASbGnctC7GvN3rZ3B0E0iKTmfTDxZJSVnDB8t/uXXV3p1R6mT1+EoCEgcwQtFC1kCfC Tm6TCjugW/VppLR1uyQ2L4Kf1ykH6SFE8Y0qyHVNZcldUkZ21KC+h6vwabXvND4VGLWKN3gzCDY MvMosi97B8gEZr4ML4J4W/TPQv9ETAey54ci87WMWJ+4JSPcELeYeE3UV2+/vQoBF5qIRY/w/1c C03zzR5nto53Y7wt7WNymzPc/bcBawy1coMReVp6/FtUPvpEX2jM6CXblEzumLl6ELdaTlgR+as RmAjjpK7jmsxulsvMdBIUs/xW+h5 X-Google-Smtp-Source: AGHT+IGONTd8guxRHJvy647hbI7ZqJLCliUkJVI8P7gVTtEIytul7Gg3vq/OHI3N/2vGVT3C4NylUg== X-Received: by 2002:a05:690c:63c7:b0:702:72e3:1cb6 with SMTP id 00721157ae682-708abe0bab9mr20919227b3.26.1745969935407; Tue, 29 Apr 2025 16:38:55 -0700 (PDT) Received: from localhost ([2a03:2880:25ff::]) by smtp.gmail.com with ESMTPSA id 00721157ae682-708adfc8160sm778457b3.6.2025.04.29.16.38.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Apr 2025 16:38:54 -0700 (PDT) From: Nhat Pham To: linux-mm@kvack.org Cc: akpm@linux-foundation.org, hannes@cmpxchg.org, hughd@google.com, yosry.ahmed@linux.dev, mhocko@kernel.org, roman.gushchin@linux.dev, shakeel.butt@linux.dev, muchun.song@linux.dev, len.brown@intel.com, chengming.zhou@linux.dev, kasong@tencent.com, chrisl@kernel.org, huang.ying.caritas@gmail.com, ryan.roberts@arm.com, viro@zeniv.linux.org.uk, baohua@kernel.org, osalvador@suse.de, lorenzo.stoakes@oracle.com, christophe.leroy@csgroup.eu, pavel@kernel.org, kernel-team@meta.com, linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, linux-pm@vger.kernel.org, peterx@redhat.com Subject: [RFC PATCH v2 06/18] mm: create scaffolds for the new virtual swap implementation Date: Tue, 29 Apr 2025 16:38:34 -0700 Message-ID: <20250429233848.3093350-7-nphamcs@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250429233848.3093350-1-nphamcs@gmail.com> References: <20250429233848.3093350-1-nphamcs@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 7396940007 X-Stat-Signature: 53ieczu4q7nej7k37tohqjaqhd6aww45 X-HE-Tag: 1745969936-711426 X-HE-Meta: U2FsdGVkX1853gYP4heKYja9oqHYbNY0utGkMlsvsXqSGmuN9QBl4TlQVpkdwd3MZtWGxndoK8Q0HS3pmWF29z+YXFRUkM9Jesfzfe7WN5Nah5EaLp2N8OETtN1DOv8Wgqrdhl8fa39S/3M2pcl9LpnvkxogBtnT2vnrejWA0ZBvjY6sHiBwPbttpiZncr2alAyn5fr0FxJlAiB0ejwGevm4zq92RwEb8KKbXqm91qLDmqeR8Sycqmhs/TM9j3lniYRbSS5NmFFhvNFmeZ/229dgiqq4+tVuIdcSAnA6jkebGZCvdGqiko94m43DBSrhijCSr/NMRt4HoDgUlNXOcP+/wCin4i3l6q1tMkN2WlqCbAua3p2LL0PZB6GK0Ym0o8p8ZkkqoFyxsceMwzzKxdy1HXevMtvNIQdkNVxGytjLsNlIhlTaXRnAoyo1TdvY7tkPpQ7ZfT7etCMBiUK0m7SNrVsp5p1CYkYLBtb7nsQhreMzRAvkpm1PBgPrIuoLKh37E3JFdeFp3VF1IRammtKpz79o7SZOr11bSF6S52OpBgNrV4NDkSiAoAVPThdfUdwo3nNnyDZbitGnQn+7xAyXhxf7NZeA7WKevXZa4h93r2lbXnIrmJOB+VliTDfq3lhsHpXHzJEGIulnHzwrcy6QQh9mNjqzlC/oKM/+M5sZa3hGtprOkMgeM1ZTnuSWpzLhqY+9EDf+77cgKijxObH3kqW5jkf9O/uK8yrb8UOwcS+wf6y+QGtT29AqBggAtN/KU8hAB4JygIB5vyQ0J89gK6plYXskWkAiSRboH58kD9wYGXBOlyD+N/HZuCjLAEgI3caRFW0a/MJB3xH6KRGHC1HF9cGXhpHEuFLIgr60EB4hslG5QkjyqNm4cYpsXz7IyY4A2bq6p/TiprhLw+Z/6nTeKWS3EHPJCWxpo519PP8yXHshX3NGyDGn52ikcVRsQGYcjM9I7PnK/ob t8+HsnpA +r55M6h3XvQc/vkKTcR+NqPTkZ7jcOM3Np/2k7eCbDQLM3+wO3NyTR/5M6vUClNVAFo9JPe8cx1GyC6c7ge56T3YD9ffHgrC9hh56kuumRcXe2sluaOrRwc/pIpf95Lj1+AQTu9zckEoaRNGBNxdiy+KIr52UVnfnFPEE3Z64Ye6kwBrvv3RnApPjjKHQQi7mHAO7kIrd89FPVnLfc5Fe0uJfNtVXWfP5HJFRTFHhaDSYuAAzbB3vBRO5YfpgeUtiAe4xeWo+UiWWWaOXe+StUM6WSCLiTliMNRheTG8JUlxbHKvl7BvOndY1S23vvC5m2FBMwmF34K1Z1idbT2J/t/5Kkd9cey1n0RCIFJf4Ccwxi0K5DsGShN19ljmdya3MP+Nsm+NYiu1hGfhC0of1lB5qRpBDNyq/8tlMKRebuXud7flt3Jn6WN37CtAPwltYbuGB6WMLxs3dWQzzNhFeSJdA1DLYfEd6t9Nao8Pc4qNHrZfj05MpDwnHioB23QmE9aRmCVR+YVh8/0pSjvdkHT3cVRBE4phvUnbyDPwpQsVST/9WQy2wXlAmC7hMakxmCHiOxMjt7F20w4Jj4sEupMIKRIzovkJp89CrXgqY0DhfunQrcgYxycWLuQ== 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: In prepration for the implementation of swap virtualization, add new scaffolds for the new code: 1. Add a new mm/vswap.c source file, which currently only holds the logic to set up the (for now, empty) vswap debugfs directory. Hook this up in the swap setup step in mm/swap_state.c. Add a new maintainer entry for the new source file. 2. Add a new config option (CONFIG_VIRTUAL_SWAP). We will only get new behavior when the kernel is built with this config option. The entry for the config option in mm/Kconfig summarizes the pros and cons of the new virtual swap design, which the remainder of the patch series will implement. 3. Set up vswap compilation in the Makefile. Other than the debugfs directory, no behavioral change intended. Signed-off-by: Nhat Pham --- MAINTAINERS | 7 +++++++ include/linux/swap.h | 9 +++++++++ mm/Kconfig | 25 +++++++++++++++++++++++++ mm/Makefile | 1 + mm/swap_state.c | 6 ++++++ mm/vswap.c | 35 +++++++++++++++++++++++++++++++++++ 6 files changed, 83 insertions(+) create mode 100644 mm/vswap.c diff --git a/MAINTAINERS b/MAINTAINERS index 00e94bec401e..65108bf2a5f1 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -25290,6 +25290,13 @@ S: Maintained F: Documentation/devicetree/bindings/iio/light/vishay,veml6030.yaml F: drivers/iio/light/veml6030.c +VIRTUAL SWAP SPACE +M: Nhat Pham +M: Johannes Weiner +L: linux-mm@kvack.org +S: Maintained +F: mm/vswap.c + VISHAY VEML6075 UVA AND UVB LIGHT SENSOR DRIVER M: Javier Carrasco S: Maintained diff --git a/include/linux/swap.h b/include/linux/swap.h index 567fd2ebb0d3..328f6aec9313 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h @@ -726,6 +726,15 @@ static inline bool mem_cgroup_swap_full(struct folio *folio) } #endif +#ifdef CONFIG_VIRTUAL_SWAP +int vswap_init(void); +#else /* CONFIG_VIRTUAL_SWAP */ +static inline int vswap_init(void) +{ + return 0; +} +#endif /* CONFIG_VIRTUAL_SWAP */ + /** * swp_entry_to_swp_slot - look up the physical swap slot corresponding to a * virtual swap slot. diff --git a/mm/Kconfig b/mm/Kconfig index 1b501db06417..2e8eb66c5888 100644 --- a/mm/Kconfig +++ b/mm/Kconfig @@ -22,6 +22,31 @@ menuconfig SWAP used to provide more virtual memory than the actual RAM present in your computer. If unsure say Y. +config VIRTUAL_SWAP + bool "Swap space virtualization" + depends on SWAP + default n + help + When this is selected, the kernel is built with the new swap + design, where each swap entry is associated with a virtual swap + slot that is decoupled from a specific physical backing storage + location. As a result, swap entries that are: + + 1. Zero-filled + + 2. Stored in the zswap pool. + + 3. Rejected by zswap/zram but cannot be written back to a + backing swap device. + + no longer take up any disk storage (i.e they do not occupy any + slot in the backing swap device). + + Swapoff is also more efficient. + + There might be more lock contentions with heavy swap use, since + the swap cache is no longer range partitioned. + config ZSWAP bool "Compressed cache for swap pages" depends on SWAP diff --git a/mm/Makefile b/mm/Makefile index 850386a67b3e..b7216c714fa1 100644 --- a/mm/Makefile +++ b/mm/Makefile @@ -76,6 +76,7 @@ ifdef CONFIG_MMU endif obj-$(CONFIG_SWAP) += page_io.o swap_state.o swapfile.o swap_slots.o +obj-$(CONFIG_VIRTUAL_SWAP) += vswap.o obj-$(CONFIG_ZSWAP) += zswap.o obj-$(CONFIG_HAS_DMA) += dmapool.o obj-$(CONFIG_HUGETLBFS) += hugetlb.o diff --git a/mm/swap_state.c b/mm/swap_state.c index cbd1532b6b24..1607d23a3d7b 100644 --- a/mm/swap_state.c +++ b/mm/swap_state.c @@ -930,6 +930,12 @@ static int __init swap_init_sysfs(void) int err; struct kobject *swap_kobj; + err = vswap_init(); + if (err) { + pr_err("failed to initialize virtual swap space\n"); + return err; + } + swap_kobj = kobject_create_and_add("swap", mm_kobj); if (!swap_kobj) { pr_err("failed to create swap kobject\n"); diff --git a/mm/vswap.c b/mm/vswap.c new file mode 100644 index 000000000000..b9c28e819cca --- /dev/null +++ b/mm/vswap.c @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Virtual swap space + * + * Copyright (C) 2024 Meta Platforms, Inc., Nhat Pham + */ + #include + +#ifdef CONFIG_DEBUG_FS +#include + +static struct dentry *vswap_debugfs_root; + +static int vswap_debug_fs_init(void) +{ + if (!debugfs_initialized()) + return -ENODEV; + + vswap_debugfs_root = debugfs_create_dir("vswap", NULL); + return 0; +} +#else +static int vswap_debug_fs_init(void) +{ + return 0; +} +#endif + +int vswap_init(void) +{ + if (vswap_debug_fs_init()) + pr_warn("Failed to initialize vswap debugfs\n"); + + return 0; +} -- 2.47.1