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 EC90DC47DDB for ; Fri, 26 Jan 2024 23:17:26 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5C1096B0083; Fri, 26 Jan 2024 18:17:26 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 5717D6B0087; Fri, 26 Jan 2024 18:17:26 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 439266B0088; Fri, 26 Jan 2024 18:17:26 -0500 (EST) 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 3429F6B0083 for ; Fri, 26 Jan 2024 18:17:26 -0500 (EST) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 00307120513 for ; Fri, 26 Jan 2024 23:17:25 +0000 (UTC) X-FDA: 81723025650.12.C5C20DE Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf06.hostedemail.com (Postfix) with ESMTP id 6EB88180010 for ; Fri, 26 Jan 2024 23:17:23 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b="fSQZbxo/"; spf=pass (imf06.hostedemail.com: domain of chrisl@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=chrisl@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1706311044; 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=bQ3wGk8X+s/LElnp3eDzMQsSSmXUsBKdEW3Hmyju37Q=; b=aPuHqSFTBkNp66lgA0GvSu0PMja4NVw2pyLzI4K4TZ5KDh5LMQSO98j3KwlG9zw8jeNyNo iduCKDWHtithWq6TUBqD2zWpCdz/1oHlZY76wkI0218PAt89wg7psPb1gWsb4thtxC7+Bn egzFdZlvvpr9mJiS/AmbU3WMCSZpBUo= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1706311044; a=rsa-sha256; cv=none; b=iOmNdy39ncxHYe7kmG5GJaeW0NnTLsDlMSO44/QOJxkhoQyIx0c2mF7L5Zt4cNV+wI/Ptz PLsU7js7IMf+4ndSduJ45c6N5NWAaVkINh+HeKzo4IU8vz+EP2fXcod6K5NcgRToJqN7FM MufpPmXGWLpoj3NnR/1SHtyyc8D3TBc= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b="fSQZbxo/"; spf=pass (imf06.hostedemail.com: domain of chrisl@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=chrisl@kernel.org; dmarc=pass (policy=none) header.from=kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id E99B4CE37D5 for ; Fri, 26 Jan 2024 23:17:18 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2F6BDC433A6 for ; Fri, 26 Jan 2024 23:17:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1706311038; bh=B2vG1UI0l03TA0AWgSx2zlP14++axiH1rOWXKCM+7Dk=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=fSQZbxo/d2KbI8bBxuqv2ryLtLeJ8pF1rcvm9E7IjkhQYEm+9aOPHxPWSEMZPF46M 0zyIfs/Qle8c6CP9+B+00MGvhn4q3Ad0Axf2wURkqVHP9I9EnIT/Ne7e95Ogp/VK9A F3Y5rp97EMahvgIruqP+GQR2DD1ZXOuDS0oDFwCRjFVN4uKK1dycNX26w/Xv1DcFWG J54PqvhzgTvtmKhMFBU5ckvlFq2V8/kpSYLcRLbPl1NB4bmlR4w/yNsXbnaT3hkZ8w 9oD3Y4LwfacfWrp2KQMpW0tzGBmL/oDMjTztcMSFSi4Tt8vd0ttifixH8y4emf+owP yi3qnZIGrGBRA== Received: by mail-io1-f47.google.com with SMTP id ca18e2360f4ac-7bf2ab2c4caso28633339f.3 for ; Fri, 26 Jan 2024 15:17:18 -0800 (PST) X-Gm-Message-State: AOJu0YyW9MWdK/ua12nOWypWdLZOnsKCpiD61NQiYtj7Q3RrAxQPYn2p hMcIy4nWIP+68qRDvSz4UpSIoJ2z2+cIvrKVObZIn059hagSyoa6VPOWLLU2Kafqp52c9+lcauv m6JOJ5IlvliXpkOVG0r4vTVJzW8LXPWD6IDqP X-Google-Smtp-Source: AGHT+IG08OQ4U5HYbY79Lo4OxzWbXa/w0tvFzb4wDDflJcOxhg1jpMa6kuct8IdHffcT/tY01ol4CiUEE/Fw8U6EvBs= X-Received: by 2002:a05:6e02:509:b0:35f:e8a1:2b16 with SMTP id d9-20020a056e02050900b0035fe8a12b16mr536371ils.17.1706311037507; Fri, 26 Jan 2024 15:17:17 -0800 (PST) MIME-Version: 1.0 References: <20231025144546.577640-1-ryan.roberts@arm.com> <20240118111036.72641-1-21cnbao@gmail.com> <20240118111036.72641-3-21cnbao@gmail.com> In-Reply-To: <20240118111036.72641-3-21cnbao@gmail.com> From: Chris Li Date: Fri, 26 Jan 2024 15:17:06 -0800 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH RFC 2/6] mm: swap: introduce swap_nr_free() for batched swap_free() To: Barry Song <21cnbao@gmail.com> Cc: ryan.roberts@arm.com, akpm@linux-foundation.org, david@redhat.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, mhocko@suse.com, shy828301@gmail.com, wangkefeng.wang@huawei.com, willy@infradead.org, xiang@kernel.org, ying.huang@intel.com, yuzhao@google.com, surenb@google.com, steven.price@arm.com, Chuanhua Han , Barry Song Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 6EB88180010 X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: nyx6bzibu3i5kiac93cjau76wqdew5a3 X-HE-Tag: 1706311043-885703 X-HE-Meta: U2FsdGVkX1/4Ejf4xge545VcAjG0Ll8MGtWZyFf2EL43Sds2yLwRlxDCb7yJ8ImN86tLT6M5DY41Wz9grmjER85HRmu/noAUmEQVOT7hAYpMHfIicyaNscE43Z8ZNj6shbCx8yxpx9T+1ysbFKvLPSKY7kNSP3S3HxPYn5b8EDWWuT68KBivyCGywRbKfLQs/AAH4nQIEsFHtYga+kQLzrSaWMvbycLGW7R48vN+9fFpeBvbZql5kOwl2au0ChK+W+bgVt1odU101eYKx9oWJyv8l7OwSrRbZVZXr1KwGt/D1WzhJHZqbZx6SHKWzO/q5p+uEhivSNw58Ywyx34M1IkCNIUuxGWtHdpr7kYDN2AsAUT+//yvX8O+ZwwTlHVtIeq2v6FcqGr67qMgB8d8CyDTvYkvwfvTb9bBElJ4NHR6LGNUAJ8LQ5SHWvCaemDbJ+VrY6zq3IvhT+x3GxH4wKAqXwApd3+e+B/1xMdwn9MO4wtZK9WS9OwW4d1mhBEektiQIBFKYZkiMob8b/scFx55XWaFBOQkH1z3UyfJquCj18BL0F+SYqdSTSDWMC6zuO9oY4BgYRFF3SNH6UJpV90sC+XTxb8trTsMbeS0ijrMZSdtzXe3awx09RaF5SU0CFcgx+uRjtgJ9qRyErDrwUst7nkJiQEnKvCEh45KYyvRp0EWN8C03LsOONyMv5kD2i0A+j4oV1DR/qsl5WvurCuBUGjPcKzkaytfZNA+KsOV0L3uV4fx+akAdOAAinCnQ8ulr9YVcw1xD96oQLHGUKMVfs/Vl3LmRiNjO3+V9fJb/PpMRLnMWl95uwxSvXWn4E+IkuRnOHxv523uRib1vo3gXRGUqVkrxESbeDmH7+S9a32M4PFFx39gxsbqHBYOHnHjJ9aKr3sEs5fzLJUy8vNhOL29cRHyD4poRLgJVLf+GaYvYIVjC+ZJWVfLVao4RcaRVhBQ6qGRPuKGDYm enXY0IOt 9tgA2wc+NLEM+2pKcYMvqKz1zot9iyINjv+rMh9XPJ0r7+khcqhYAfyLlr68tM4LxNwMVnY/JVaW5VdP2DfoBF+Z/XdJk80xDOvoVOmmi6HPoHX0994FPcWD9bXuxhIqTVlE5q4wDGlVtleiD27UTWzrLIhHtJEipAxctqP9OxFopdUOqi7N2jjzw5GKt7Q9lW2yjwqZdqhM2pw1JFov9wC3zj0aSWTBcZCVNQGt0XjtVXciLtKJvWAPyKr4HgzwoHu18kRgPkQvkLG7ALzOsf1+PPGIPz0hryayQxmYb6Q6XD5z3tHUQzsSpb/e3Kbe8huoE+41An3sQh2KiKOpAzGEf/A== 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 Thu, Jan 18, 2024 at 3:11=E2=80=AFAM Barry Song <21cnbao@gmail.com> wrot= e: > > From: Chuanhua Han > > While swapping in a large folio, we need to free swaps related to the who= le > folio. To avoid frequently acquiring and releasing swap locks, it is bett= er > to introduce an API for batched free. > > Signed-off-by: Chuanhua Han > Co-developed-by: Barry Song > Signed-off-by: Barry Song > --- > include/linux/swap.h | 6 ++++++ > mm/swapfile.c | 29 +++++++++++++++++++++++++++++ > 2 files changed, 35 insertions(+) > > diff --git a/include/linux/swap.h b/include/linux/swap.h > index 4db00ddad261..31a4ee2dcd1c 100644 > --- a/include/linux/swap.h > +++ b/include/linux/swap.h > @@ -478,6 +478,7 @@ extern void swap_shmem_alloc(swp_entry_t); > extern int swap_duplicate(swp_entry_t); > extern int swapcache_prepare(swp_entry_t); > extern void swap_free(swp_entry_t); > +extern void swap_nr_free(swp_entry_t entry, int nr_pages); > extern void swapcache_free_entries(swp_entry_t *entries, int n); > extern int free_swap_and_cache(swp_entry_t); > int swap_type_of(dev_t device, sector_t offset); > @@ -553,6 +554,11 @@ static inline void swap_free(swp_entry_t swp) > { > } > > +void swap_nr_free(swp_entry_t entry, int nr_pages) > +{ > + > +} > + > static inline void put_swap_folio(struct folio *folio, swp_entry_t swp) > { > } > diff --git a/mm/swapfile.c b/mm/swapfile.c > index 556ff7347d5f..6321bda96b77 100644 > --- a/mm/swapfile.c > +++ b/mm/swapfile.c > @@ -1335,6 +1335,35 @@ void swap_free(swp_entry_t entry) > __swap_entry_free(p, entry); > } > > +void swap_nr_free(swp_entry_t entry, int nr_pages) > +{ > + int i; > + struct swap_cluster_info *ci; > + struct swap_info_struct *p; > + unsigned type =3D swp_type(entry); > + unsigned long offset =3D swp_offset(entry); > + DECLARE_BITMAP(usage, SWAPFILE_CLUSTER) =3D { 0 }; > + > + VM_BUG_ON(offset % SWAPFILE_CLUSTER + nr_pages > SWAPFILE_CLUSTER= ); BUG_ON here seems a bit too developer originated. Maybe warn once and roll back to free one by one? How big is your typical SWAPFILE_CUSTER and nr_pages typically in arm? I ask this question because nr_ppages > 64, that is a totally different game, we can completely bypass the swap cache slots. > + > + if (nr_pages =3D=3D 1) { > + swap_free(entry); > + return; > + } > + > + p =3D _swap_info_get(entry); > + > + ci =3D lock_cluster(p, offset); > + for (i =3D 0; i < nr_pages; i++) { > + if (__swap_entry_free_locked(p, offset + i, 1)) > + __bitmap_set(usage, i, 1); > + } > + unlock_cluster(ci); > + > + for_each_clear_bit(i, usage, nr_pages) > + free_swap_slot(swp_entry(type, offset + i)); Notice that free_swap_slot() internal has per CPU cache batching as well. Every free_swap_slot will get some per_cpu swap slot cache and cache->lock. There is double batching here. If the typical batch size here is bigger than 64 entries, we can go directly to batching swap_entry_free and avoid the free_swap_slot() batching altogether. Unlike free_swap_slot_entries(), here swap slots are all from one swap device, there is no need to sort and group the swap slot by swap devices. Chris Chris > +} > + > /* > * Called after dropping swapcache to decrease refcnt to swap entries. > */ > -- > 2.34.1 > >