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 7F3F2C4345F for ; Fri, 3 May 2024 20:25:42 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id EF8EE6B0099; Fri, 3 May 2024 16:25:41 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id EA8BF6B009A; Fri, 3 May 2024 16:25:41 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D70A46B009B; Fri, 3 May 2024 16:25:41 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id B51696B0099 for ; Fri, 3 May 2024 16:25:41 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 2A686A0DA7 for ; Fri, 3 May 2024 20:25:41 +0000 (UTC) X-FDA: 82078215282.02.401808D Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf02.hostedemail.com (Postfix) with ESMTP id 2913980013 for ; Fri, 3 May 2024 20:25:37 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=QmoYejKD; spf=pass (imf02.hostedemail.com: domain of chrisl@kernel.org designates 139.178.84.217 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=1714767938; 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=RHkLQx36sESkOVKwitVyYC6/6KgcM2t7q6spOOu0Jos=; b=eDdzi5sTGc+OrWK1G7Jnn00AOBq9FhK/X4T37GbWR7lTJNu1luRNqrJjgsLh/YN1zFo3vy 9h2mgRVgbja2ZRjbYpMK4dTHnitFnTcqJbf52gNdC7SGgdBZXlPyvAJ6aUeZ/4Gm74Veiy oWMfAqb5yv19h9DbdffEUOey6kWqhEU= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=QmoYejKD; spf=pass (imf02.hostedemail.com: domain of chrisl@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=chrisl@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1714767938; a=rsa-sha256; cv=none; b=R5wRlxH0GgrlKEkrxxf7Zl8PScBjemMeerYlzocNJsHDBrB0FySuc/aMV03+DG+NNU9+pJ DQsQVmNn5xOaZu4x8AuW68d/VRp1BC4+3IQknHkE6m5YDSAHv+CVmK+CQAmmoE44tnB39k 4lFlIA0XED2jwP09N+M/NbWK378DMxg= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 179FE61E36 for ; Fri, 3 May 2024 20:25:37 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 762D5C4AF52 for ; Fri, 3 May 2024 20:25:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1714767936; bh=ItEGCpuVwR6wfs1rCi1LDD0NyFGrhaydJzh05ZLWjr4=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=QmoYejKDmwFJb1tYMkCgohRki2rpvmSrjFjoCe2qFnEW2z8+Vy8JrmHRK49QEt4A8 5BBHSkr1yv+xQFz9rPiIGbStkrNkzZCc8VzNfpC105L6Zasm4XwOpSZ35QSh87S91G D/RfD3fvQ4hG9HiCBbeL2YPpV264bHfKu1V1dyFSFbe8eYCZ+e4pB5obvyOloVrxLX nINVJk5X5AMi/KDqDAKYzj09fsB4rV9J1bO5bUbpl8wlaiUubEMhPBPGTiCTkF1ijk cHm2RnZlZLxYlsMI271+tLAUO7ie0pEqRtuJmpVzk9E+0wkO6AOClSeXKTnSeBvVj1 ckmlwnX7AVJSQ== Received: by mail-lj1-f178.google.com with SMTP id 38308e7fff4ca-2d8b2389e73so800651fa.3 for ; Fri, 03 May 2024 13:25:36 -0700 (PDT) X-Forwarded-Encrypted: i=1; AJvYcCVZ34nJSsxYBsasK1TnkFwnMU2wrGshZWmN4wAVl2X43mXJu/ge9RbL3gfA9vF2MlCsfZaGF2sj3aMMcUnBhLUhp1w= X-Gm-Message-State: AOJu0YxhUOD8E3cSjg55GqyAEDIfPpQ1fGvP1N+lqMuA5GMQtI/rvKC3 mRQQ46AhzQ7IEJ+pYjSUiFVMsO4IlPJvTE/HwfjSVMCadbEbed0wvjreBnV+a3LybhF24frDjkb MUbzihRpH0twPIyO0T17q40sSzA== X-Google-Smtp-Source: AGHT+IG26udORfjMHQagSGCQro/CQlVpCtUbDwiD+tUU+7hyVtPfFNDPDGalOxjTcQ1r9VQt/Ml3fLFFiQPORKIiICI= X-Received: by 2002:a2e:a0d7:0:b0:2df:c0b8:2dd6 with SMTP id f23-20020a2ea0d7000000b002dfc0b82dd6mr2761062ljm.21.1714767934953; Fri, 03 May 2024 13:25:34 -0700 (PDT) MIME-Version: 1.0 References: <20240503005023.174597-1-21cnbao@gmail.com> <20240503005023.174597-2-21cnbao@gmail.com> In-Reply-To: <20240503005023.174597-2-21cnbao@gmail.com> From: Chris Li Date: Fri, 3 May 2024 13:25:22 -0700 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v3 1/6] mm: swap: introduce swap_free_nr() for batched swap_free() To: Barry Song <21cnbao@gmail.com> Cc: akpm@linux-foundation.org, linux-mm@kvack.org, baolin.wang@linux.alibaba.com, david@redhat.com, hanchuanhua@oppo.com, hannes@cmpxchg.org, hughd@google.com, kasong@tencent.com, linux-kernel@vger.kernel.org, ryan.roberts@arm.com, surenb@google.com, v-songbaohua@oppo.com, willy@infradead.org, xiang@kernel.org, ying.huang@intel.com, yosryahmed@google.com, yuzhao@google.com, ziy@nvidia.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Stat-Signature: m93mf1ogxkwenzeg3zwussy36za4ih8m X-Rspamd-Queue-Id: 2913980013 X-Rspamd-Server: rspam10 X-Rspam-User: X-HE-Tag: 1714767937-222467 X-HE-Meta: U2FsdGVkX19MwOi70BzKll3BI+2mgcGclJxE6+W7y92imWK9O8Zz3m27kXdLY/kG+DkAo/M3EgGzVYpqnAASFgkhlAu9nOSd8Tx768m6jSkwzHIDVb34k0Wj2X3+eERkaM59SGuFuqJga7Cg9sSZnSMgD8kxHYVxJrmEcMuW9qMS1kTGpL5LH6c2y0UL/UOtIspLVnn8lWhcMneI8ItTj2WwduCyYsBlFlPKmIWmcwIvCdiT/1uMjtZZwni0ymT0zmRsPe8ff33AZWwRjooN/zj6P6IZNJbnAMOqYLH9KDHUCNyahSkdNF0mV4zVSQnGJq1Q/R8S+3c5P77BVFNaJidLbN4QILxe+1UbVc/DMxMFYqHsMiTjBS4IAnT0iwDILNn00p0h8UcK9ZazTfhrUfg/PfJSN15V9fM3svYIb753XuIlNUTTnUk/IZhsN1+c1eNPP0Y+sC9r3PyRZg/1A5Q4CQwygfQaN0C0shArRX/FLM+AwTxsjkOLsY81btSHCacw8WvM7q3TMcajr8Z3tLgTnsC2zyVXKeq9ZWnS6ZdxcAteyazXz2PUelrIS/xQ/GWEcMTecAZiJCJIFH/jMpDQtrDYF7pOdfFVoTTbOIFBaeIeLPOak5F8cGtREMcYh9UDo8Hmny4fIKVQewMoZN74qq0bkEHV7DCOkHnN3Fh3SMSk8Nm+9UpD03orj4gCidUBD55TZNgkAPaziypTyPDxO3NhcCWR93WPzU42Vma5vZNpt0ure6QzwMykMCAl9QGlOEpKsI267NBc7rv64PumSogSxcblQ6vYcwLBuVL+BBEsARGyy4NvKUPSQWl+wCto1e+eQPUplGwsebshlcG8KDM8VnWwn7mXP8Cw2kcTzw+fSk+8tb/W8XwulUgtKNzrW9tofjDsUAITdI0zcnS2yZgKjaOdBTCc1cxczv3BH0pe3gS/uZJe/yZa6ZqRvRePzmgN4bBUTdGWeZu fPF8AG4+ sCeCxDRzJKfpNh3igg9ACrDC0kB3RXrIAG2UnoleEWRGZze8OIuKQR/0xi/nKYkonQ3d2B7gprAjBFXIx6LQeSRCauK0CpgnxdSaZbzgoGj+p72af9rn36Hk7bydGLtoa8DEFM5uKkHiulpBpn43X11ns+yEmxJJK1lk2+oB9K5f65A20HFLNdJP3fzFrdwbRW4U/6I7pA+cOiq9iiST+h/K5K9TEdefDXuRW5ONRBo6rzFd+XbOtjZJIRtNfoI/v6PJh8uIxSKL82Pklnht9fFhH2k7425q4Q5BuwcOAuyCgx6zfeoYwFdduLvhWkosTBRLSb4kAqke9HViw4COYyDP2f36F3QauF/F/DX3wQEPOBmclxaOhNnXim0gYyrNrSK2MCIiB3hAYApLNGdleuXjsdg== 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: Hi Barry, Looks good. Looking forward to the change to batch free to skipping the swap slot cache. All the entries are from the same swap device, it does not need the sort function. Currently it goes through a lot of locking and and unlocking inside the loop. Acked-by: Chris Li Chris On Thu, May 2, 2024 at 5:50=E2=80=AFPM Barry Song <21cnbao@gmail.com> wrote= : > > 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. > Furthermore, this new function, swap_free_nr(), is designed to efficientl= y > handle various scenarios for releasing a specified number, nr, of swap > entries. > > Signed-off-by: Chuanhua Han > Co-developed-by: Barry Song > Signed-off-by: Barry Song > --- > include/linux/swap.h | 5 +++++ > mm/swapfile.c | 47 ++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 52 insertions(+) > > diff --git a/include/linux/swap.h b/include/linux/swap.h > index 11c53692f65f..d1d35e92d7e9 100644 > --- a/include/linux/swap.h > +++ b/include/linux/swap.h > @@ -483,6 +483,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_free_nr(swp_entry_t entry, int nr_pages); > extern void swapcache_free_entries(swp_entry_t *entries, int n); > extern void free_swap_and_cache_nr(swp_entry_t entry, int nr); > int swap_type_of(dev_t device, sector_t offset); > @@ -564,6 +565,10 @@ static inline void swap_free(swp_entry_t swp) > { > } > > +static inline void swap_free_nr(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 f6ca215fb92f..ec12f2b9d229 100644 > --- a/mm/swapfile.c > +++ b/mm/swapfile.c > @@ -1356,6 +1356,53 @@ void swap_free(swp_entry_t entry) > __swap_entry_free(p, entry); > } > > +static void cluster_swap_free_nr(struct swap_info_struct *sis, > + unsigned long offset, int nr_pages) > +{ > + struct swap_cluster_info *ci; > + DECLARE_BITMAP(to_free, BITS_PER_LONG) =3D { 0 }; > + int i, nr; > + > + ci =3D lock_cluster_or_swap_info(sis, offset); > + while (nr_pages) { > + nr =3D min(BITS_PER_LONG, nr_pages); > + for (i =3D 0; i < nr; i++) { > + if (!__swap_entry_free_locked(sis, offset + i, 1)= ) > + bitmap_set(to_free, i, 1); > + } > + if (!bitmap_empty(to_free, BITS_PER_LONG)) { > + unlock_cluster_or_swap_info(sis, ci); > + for_each_set_bit(i, to_free, BITS_PER_LONG) > + free_swap_slot(swp_entry(sis->type, offse= t + i)); > + if (nr =3D=3D nr_pages) > + return; > + bitmap_clear(to_free, 0, BITS_PER_LONG); > + ci =3D lock_cluster_or_swap_info(sis, offset); > + } > + offset +=3D nr; > + nr_pages -=3D nr; > + } > + unlock_cluster_or_swap_info(sis, ci); > +} > + > +void swap_free_nr(swp_entry_t entry, int nr_pages) > +{ > + int nr; > + struct swap_info_struct *sis; > + unsigned long offset =3D swp_offset(entry); > + > + sis =3D _swap_info_get(entry); > + if (!sis) > + return; > + > + while (nr_pages) { > + nr =3D min_t(int, nr_pages, SWAPFILE_CLUSTER - offset % S= WAPFILE_CLUSTER); > + cluster_swap_free_nr(sis, offset, nr); > + offset +=3D nr; > + nr_pages -=3D nr; > + } > +} > + > /* > * Called after dropping swapcache to decrease refcnt to swap entries. > */ > -- > 2.34.1 >