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 C0D58D1A427 for ; Sat, 12 Oct 2024 03:05:07 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 528886B009B; Fri, 11 Oct 2024 23:05:07 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4B11F6B009E; Fri, 11 Oct 2024 23:05:07 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 32AAE6B009F; Fri, 11 Oct 2024 23:05:07 -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 0B80C6B009B for ; Fri, 11 Oct 2024 23:05:07 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id B94D01A0802 for ; Sat, 12 Oct 2024 03:04:57 +0000 (UTC) X-FDA: 82663458528.27.C7B4365 Received: from mail-lj1-f174.google.com (mail-lj1-f174.google.com [209.85.208.174]) by imf11.hostedemail.com (Postfix) with ESMTP id 92F4740011 for ; Sat, 12 Oct 2024 03:05:01 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=C9J5TJEa; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf11.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.208.174 as permitted sender) smtp.mailfrom=ryncsn@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1728702202; a=rsa-sha256; cv=none; b=Nhvwg3E4eZktndZSVFfoTMDG0WIsXakVxMHpbu/A1HaIPygDKTlSoB3F6XEblEm9BkGrkT z8BzpPIcNsQQBz1RrhbvVSl2qS8C3nQ2qrKi/uYVs5LYPbvZjEXJArrN25AT4jAL8ZzVyr cKTSCCBNGT+NIv+wiaHizWST6eNE80A= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=C9J5TJEa; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf11.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.208.174 as permitted sender) smtp.mailfrom=ryncsn@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1728702202; 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=Fk7niJErJKzbUcQtEhxz674/baKisg6yPUx9MwQhy4k=; b=fnHwJkQ8JRxyAAvpszqdio99ZKn0tbIHKDNG44uTZgNHwxq6wEnE4ql4xgF7Ib6QV0i3AD aSv02K5bGCgKRaLlFCMe+QcFC8NrrqxYKD1KRN7ST3XhPu70KzE97Hfffv7GF3mEUamA92 XMI9Ie17Gr4Dtd/P5IfE8MJiBI3ZxMw= Received: by mail-lj1-f174.google.com with SMTP id 38308e7fff4ca-2fb2f4b282cso16888201fa.2 for ; Fri, 11 Oct 2024 20:05:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1728702303; x=1729307103; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=Fk7niJErJKzbUcQtEhxz674/baKisg6yPUx9MwQhy4k=; b=C9J5TJEaTJGx1ercASxLWwNmn/b8rCd7BuK28ZA4hUP4XIMtmDYvxklX67+u7h2Pv4 Pksja5+NOb+mPqdugXq2/aZstepWnpAcdgIWDXw4mlA6ptPtwShgNJHLzXMDEWF1ENSi qJqucBlacc77bXsXLkBuJwvvIWYfPr4soKlLJk7PWEHr/oe5izlrRJrukItHqAGaQlre r8NSOC414kqnoTxPhcMODKveONcBHqq2MY6hKcoOotRdvNzqzKC89xyvFXf1GUDRe1gH 6Pni2cY5XXTTG2REpD8QnE8CE1MOa9GzuwqY4pIFI8RivFNcIfc2bkH3u2XQ7J9BSJHv 5FZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728702303; x=1729307103; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Fk7niJErJKzbUcQtEhxz674/baKisg6yPUx9MwQhy4k=; b=D0QX2pOcQFJr+OlAxKHcmuOaUuOl+uFBkrEMIf8bfhoi1wQDbYX5BzwyYzn0Z+LhT1 r1lN8VUVS70b14piFSnQwVE0uQH/xrgJ9LoZWpi3WHGdWvGujODSDn72yWXDV8s9cvFo n2T9PXd5I/LMsHOt95tXhRbxrm0s8ywZ6XjATjWL9kAOVFdzlg3L0YjoR1nM6cJTDuCv MyD5uR+c2zJQiBvUwcRbzVni3vQ5OmMKMVIOvpNvX8YH/UNTrz5KNPYolTKsTH/Sz1Mp YBOTUFMqLlQRGKzPkQPvr0kfySqB2vwlwZihC7mcPrzqXh0sA9kQmhNlg3/dfUeoNUdu 9zBA== X-Forwarded-Encrypted: i=1; AJvYcCXb8gL8lEzlFfZXsh7fKKqF8qsftKSWwTxUA6ROFVjIJ7axeqv8XRciSndgWgu2s332SEyzrIeDhg==@kvack.org X-Gm-Message-State: AOJu0YydNF6qRH6NApwHmqdP54TBuRUoOUxefHlyvF/9iR2fxMz4dar5 gYyK3tFRHhHr530p606JD2vnLIgZ2eFsFpQx8ANZ8bqFnUzVyXizRwsNqHA94JEInyluKAO2WiJ YAb81ka9h89Gj4oVTIsYGpesh2cY= X-Google-Smtp-Source: AGHT+IHb0uIxYZqPjnQEOFBOTrG3RPCAYkG2AeD3P42Mvi2wjTkPnF4IIU5TqywmJWU5rTF+qi7jHDqYe+R+8SnD2EI= X-Received: by 2002:a2e:be2c:0:b0:2fa:cc50:41b with SMTP id 38308e7fff4ca-2fb32704c72mr28492021fa.5.1728702302533; Fri, 11 Oct 2024 20:05:02 -0700 (PDT) MIME-Version: 1.0 References: <20241011171950.62684-1-ryncsn@gmail.com> <20241011182831.GC351101@cmpxchg.org> In-Reply-To: <20241011182831.GC351101@cmpxchg.org> From: Kairui Song Date: Sat, 12 Oct 2024 11:04:45 +0800 Message-ID: Subject: Re: [PATCH] mm/zswap: avoid touching XArray for unnecessary invalidation To: Johannes Weiner Cc: Yosry Ahmed , linux-mm@kvack.org, Andrew Morton , Nhat Pham , Chengming Zhou , Chris Li , Barry Song , "Huang, Ying" , LKML Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 92F4740011 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: a98xr11u6bbrsxfzg8bmhd6ydxhp1zm3 X-HE-Tag: 1728702301-101786 X-HE-Meta: U2FsdGVkX1/CNPJCgaVG5n4Hwa4XgbeUIHfmGumERm+h7IeZCo22cmkxh1FnZqVDeQMV9gXH6mKnFZb8t4HeyfRkORfbbjmUxNK/5lY75jgq4k/8sNa32fgNwSkqwkghRd/snxQcqCtstYFiDuN+0haoAi0DqkHqkKeIULv/IyzoJtq0XMxE2/sdBnv3EL0Vj+k1OtRqfm3jIN0lo5y3uURwcfX5WuxQHxtDsS3I1I8mQGUeeATiUOyg+yLwwHDYbF07nFvnrkv/r8JZipvoGGCtZ+BFPcLpeQYOUGHhC39lUt+GWUaS6Suz5qmC+XIbSmGC/Yw5NfMc1Kww0j9ZgawRvA5tdR6qjKSgPXAaOQaZWDlTXj/scdde10lZT/1R62YElqZMaUp0DJiloq6uMbgfXxpjaHC1BxuK52+qrzIit+zIZcSIvCmdurD+vQuhuzc+3TvarIoruyD7q2HCmGCff8clEp7wE9+241Tz4BsyWx191mZaGWqjUayO1texMq/QO87DNytFv9yNw+mDdXHmIr81yvkyhPfB0tq0fIuSVXItt1OyuFKr4O7yr47xq1UIQxUFgZHuDQj6Y2XKui9AmieWaj15rXZXncp5p7Nc1DzIpOF278UXpc8PEQI4IiF4Tv6H/RuhLfMZ12+5ul0FpOsre51uYlxZkvLSgSLtVxsqeL+EqulAfY1vs/+ZkVHFsJl2tDtiEWWOtuNw+dDP610gZcaob4WLBXd4UpXcjU+eZbLSCltUrk587aTVC0t5wdLx+pC4VrZm9P9E5gvQCjRIBp5B3cUVgGszExbVv9x34uHCtsS1mdNCQm0lIsgYk0sk6q/Hsjat1m0pHI7NY/JWrqNLoFO4yPq8nxkt+b7+ImdiiKYJ0q7gVAB3e8sztlPjW8M6b2el0G8LlcwqdQCr8uKkKMBzmZ/AIUUKBB22sCL6E4ZGsxEPEzuHxRhckhNvd0o8DigpEM5 uRqSYWrR mmdWW6VtRVfCAIobg7NuSFqaKfSJBz0LBGCQhwa8+8foqS8VmR2UF/0ZLOX15xjisQQaqiTwxtYtW8S+PU+FTu9HQ8wNBxHxAi3nmws/f+8ASecxiYIts2xkOHHMptTtwrR8KyNO6Q78ZyWQ/mTULXU9gcNIGe9HJbJWCgsNX//u17mtA36MLgHRGCBU/0Eua8NR1HdtJyg1q4yeIYEE0CIYuw4x4dXSlAmRX9jwhmIP6KHn1FInuqJIMPN9T50GJatDRHZoieMHiA3EeZj/roeFZIDXsvyo0NAgEV/3YTmsOli+v8rU8Qo7xspQqIyHcEKXbtXJgYNEMJ9spVJaqRr3qB0v3l7OXUUSRtRLR4j7zZCfWxxIQj7se7hpqLAUHu+mkhE116zPGbjVrhHlAJ2Ld7OcTjwDhtqc78fjJfI96rMw= 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: Johannes Weiner =E4=BA=8E 2024=E5=B9=B410=E6=9C=8812= =E6=97=A5=E5=91=A8=E5=85=AD 02:28=E5=86=99=E9=81=93=EF=BC=9A > > On Fri, Oct 11, 2024 at 10:53:31AM -0700, Yosry Ahmed wrote: > > On Fri, Oct 11, 2024 at 10:20=E2=80=AFAM Kairui Song = wrote: > > > > > > From: Kairui Song > > > > > > zswap_invalidation simply calls xa_erase, which acquires the Xarray > > > lock first, then does a look up. This has a higher overhead even if > > > zswap is not used or the tree is empty. > > > > > > So instead, do a very lightweight xa_empty check first, if there is > > > nothing to erase, don't touch the lock or the tree. > > Great idea! > > > XA_STATE(xas, ..); > > > > rcu_read_lock(); > > entry =3D xas_load(&xas); > > if (entry) { > > xas_lock(&xas); > > WARN_ON_ONCE(xas_reload(&xas) !=3D entry); > > xas_store(&xas, NULL); > > xas_unlock(&xas); > > } > > rcu_read_unlock(): > > This does the optimization more reliably, and I think we should go > with this version. Hi Yosry and Johannes, This is a good idea. But xa_empty is just much lighweighter, it's just a inlined ( =3D=3D NULL ) check, so unsurprising it has better performance than xas_load. And surprisingly it's faster than zswap_never_enabled. So I think it could be doable to introduce something like zswap_may_have_swpentry as Yosry suggested. So how about a combined version with xas_load and xa_empty? Check xa_empty first as a faster path, then xas_load, then xas_store. Here is the benchmark result (time of swapin 2G zero pages in us): Before: 1908944 1905870 1905322 1905627 1901667 xa_empty: 1835343 1827367 1828402 1831841 1832719 z.._enabled: 1838428 1831162 1838205 1837287 1840980 xas_load: 1874606 1878971 1870182 1875852 1873403 combined: 1845309 1832919 1831904 1836455 1842570 `combined` is xa_empty + xas_load.