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 11626C61D9B for ; Wed, 22 Nov 2023 17:33:20 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 55E006B05B3; Wed, 22 Nov 2023 12:33:20 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 50ED26B05B5; Wed, 22 Nov 2023 12:33:20 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3D5B96B05B7; Wed, 22 Nov 2023 12:33:20 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 29EBA6B05B3 for ; Wed, 22 Nov 2023 12:33:20 -0500 (EST) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id D7441140998 for ; Wed, 22 Nov 2023 17:33:19 +0000 (UTC) X-FDA: 81486286518.09.912E32C Received: from mail-lj1-f181.google.com (mail-lj1-f181.google.com [209.85.208.181]) by imf21.hostedemail.com (Postfix) with ESMTP id DF9DA1C0016 for ; Wed, 22 Nov 2023 17:33:17 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=KyyGw+cH; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf21.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.208.181 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=1700674398; 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=NHEeFsHmTkW/k0EikMcBHjMiZLLoJEpFmWQ5VwQyws8=; b=To3KAown/TjmlV7K1ffZl/Ht6S3D5rL9YsdR60+cPqi6uT4UnXydusrTQCuRdzXyt+WS9p 7y4mxseLIgj8K/+jce0tFEnWFh+iQtJZ5YQTz2PjMIM1GRMLGTFpYrLENkCgUnTTYCbgmw RZUCaSMSM0Itw6buTVURbIhF7gOB+eA= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=KyyGw+cH; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf21.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.208.181 as permitted sender) smtp.mailfrom=ryncsn@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1700674398; a=rsa-sha256; cv=none; b=1OVUgG4WqgH7ibM3XZrEkbwZIEt3GeuM9nTVH4sY9/rRQR3TlG8z9a+s7RiVqjcVkJQoGO 8Pt0+BbGWqgQ9hf2l1iuiMh4QXv1+6wyRZMEmowvxBmQIlAcbSmFbVBtKeURZ6YTKOgxa+ /MOfjcPDKSowdExwRoWs/sMbeEWfcnc= Received: by mail-lj1-f181.google.com with SMTP id 38308e7fff4ca-2c503dbe50dso368741fa.1 for ; Wed, 22 Nov 2023 09:33:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700674396; x=1701279196; 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=NHEeFsHmTkW/k0EikMcBHjMiZLLoJEpFmWQ5VwQyws8=; b=KyyGw+cHxZBTmsXrSUBnSoH6TC3ngo1w2mrDM5RDga2LY3Y4GCpgX3U39DOlQQPQPK ZjIsXsojArvB/UV/dZVOkVXlrlZnSryjLK3RvxSIkb7tEgRjM72ArbO4H65u155jKpXf 2EcqAtDyfax4KUCguO3K70qrYLbbMnHcr8Vhpz+MGL7uZXYkhJcQ1ZaGR0e4xwUH/h+N izerR7BnAWHGGzroFGyl4lLLWBvdQdNlOtDQEuZhr9nuAiy3ePRb2QuggUshfHlpsYqm s3V2JI91eLcnSwaV9CumJShv0iVMWqyvDuFnapt9GF1wGc8fhUjrC0FYqgDFyN9nB6YY QaGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700674396; x=1701279196; 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=NHEeFsHmTkW/k0EikMcBHjMiZLLoJEpFmWQ5VwQyws8=; b=XDhqnLrdQ+IGhWBX7jKSupJwmkVENr/W4fuYvXDSoVvD0up+WMBgqp8rDpV+CyEmy3 Rd2KYbJDrqtHBGG9EAjyDwDGAVaKSYNSYFs+pPFOgWQO2lfZ0WtrYIN4rM8IHvQdxmoI zm42Zu+zzXu5cG6gOAWGq/wEhD7IyHztOAMroz3oGa4RuxGLOsE49DcDEgZpi3Xr/p2u qUPaQ8F6/BylNyAGiCAegxjiDcrcsI22q55vnNkFd4bCVuFyRiILtFBGsJtxxiZBzHBA LLAt1goJ/HUPNKpD6CAmEdG45HyWBkeP20sbMJi5b6YMwny/8lezp5OQbVJUPbFAwS/G bekQ== X-Gm-Message-State: AOJu0Ywk6UxYP2JYZPXK9lPfySGRqx1W2aHy/sZG5GFLAK6Vh6eEdwF7 EXffp/IrQRJXnVV5FuMvhWdB6m6j+w+LxR1SwTw= X-Google-Smtp-Source: AGHT+IGkd+NKe1U0R0nPxVu4xUlaRhq2hW7OVG+0UgiBYcmsECC8oJTycVpCAVdrGZED3XyT25qj8bBT9N6oMbqp2P8= X-Received: by 2002:a2e:9f47:0:b0:2c5:130c:d41e with SMTP id v7-20020a2e9f47000000b002c5130cd41emr2364618ljk.29.1700674395777; Wed, 22 Nov 2023 09:33:15 -0800 (PST) MIME-Version: 1.0 References: <20231119194740.94101-1-ryncsn@gmail.com> <20231119194740.94101-5-ryncsn@gmail.com> In-Reply-To: From: Kairui Song Date: Thu, 23 Nov 2023 01:32:58 +0800 Message-ID: Subject: Re: [PATCH 04/24] mm/swap: avoid setting page lock bit and doing extra unlock check To: Chris Li Cc: linux-mm@kvack.org, Andrew Morton , "Huang, Ying" , David Hildenbrand , Hugh Dickins , Johannes Weiner , Matthew Wilcox , Michal Hocko , linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: DF9DA1C0016 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: yfgzdbamccx5ytrtpu9qr6m8g7itkxoo X-HE-Tag: 1700674397-420956 X-HE-Meta: U2FsdGVkX18Hhe/6oiwr90FPkkg2SZZylFxIpJ/VYc6TVBZcshqKk5FQ3ajeso9g4zQ5v4s9fPUQhyJ/3HKuazTK4Fw6H/HOQqg3JUdH1ixY8L5QtKvm9fKU/a4dJLvGOSuFfnlaowI8juRAmOpVhLBMuSYxZZduqhbHL9RJv3S78h2XfpvnuHS+Z07GqBSgpi/pYLBU+P6iX9asHzPxgFkSJcHQZfgLHeXxEji86+jRts2mDJjtE3KcmouQuvw7w9zfGbGIaVDj8u/Jx3mvou7veJHvuH6kMlao5Laa+MP2FZ4f0+Qx2jTRXZf4rzYMvFFTrG0fJpY/srF3IeLGser78z9Cs+xR7D5/l17TzfitSgjZiQUV6q3e9Nan32Rv8zMNzlEtGjDrFx5IDIIjFPDOJ8zPwmdjqvAxraKT7vLDIvJGEVLOCqdg6ZIXglb/BSIhDZAJ+cvv3xlexhotYu1JZQ5v2RceJ8EMEJaCGOpG7YNCRv1uE9I/Ks/L4OM/2w6W4tOIaRT4JnV9lvZLGONw4Nx6ZtcVCp9Ozz/gubGuuAZH6iciXi8z8yE+tVixwgKDy1DBzo2xspv7EUYsriwuNUVN4wKc0DpEm7VgY31x+8wY7sq41l2X3q4FXNVyMcp7PzWW1x1ukje8TAj8pGGpN0GILB39VtlMKKVKCulgX4/rdWvGF826Oc9stESXUa54yrY6naD+okExxu23CfGObL1BNSCQhL1v3IR/QWBzLgQ9XBpypXHB50mNeSJzTj7d5tfrWLP7SRP7xzq1sYW8/m7INubI1QcpupJIaoV0VAf6Eji6kM7U3Fg8dYEvoWwwqW8KTySBI+4lr197MvR5u2zucUtIIfW3fox++c0KdMKkNhCJtYXTXejrSBAFuels8S5gwEcR2e4tBxnI0woRlNZMWXLHRzTuYFrUuEX0JXP9duZ0tjbybcsBMPEHP28gyXc6rv7VesKEjKX PcAUV8Aw TeS3uecJBTo+uiamkQBqT/3slqqAte52+Tdom1Mcxq0aT3Pg5jgUp5ADcbcNEh3rHkGqGr4/iIv0OAZEsdVfu+8UOZRuP7+d/kyQF+7blqAx+ymXJRgr6byP5qWXdyhyrohC0UvmN3l7eogcuVuMvaVGALw6tlLwOMyb/DgkuYM6WTmnmLTP/bn54V0mfz9ZWuSwRixDue5DK8ZxpcfHRAUv9Bli9WKieAruyOKnDX2R/4wUijjl1Wu4TVaDERsF/QFKa/Bjgm80rz8I3M3S4dDDc/2v4hLYaF8+XKcs0rbGUd618pBcL2LEGEYxcISpMroaXkyqvWvuKr8tYagVrH0d9Q16i5CZGwO/XEEtMImRCmNjjnmAsoyl87eT2rFFZXG0AtCiMdhgQpXXmymCQUU23oZ8CKYePsgkubZuizP01i7zxMRBbZhcGow== 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: Chris Li =E4=BA=8E2023=E5=B9=B411=E6=9C=8821=E6=97=A5= =E5=91=A8=E4=BA=8C 01:44=E5=86=99=E9=81=93=EF=BC=9A > > On Mon, Nov 20, 2023 at 3:15=E2=80=AFAM Kairui Song wr= ote: > > > > diff --git a/mm/swap_state.c b/mm/swap_state.c > > > > index ac4fa404eaa7..45dd8b7c195d 100644 > > > > --- a/mm/swap_state.c > > > > +++ b/mm/swap_state.c > > > > @@ -458,6 +458,8 @@ struct page *__read_swap_cache_async(swp_entry_= t entry, gfp_t gfp_mask, > > > > > > You move the mem_cgroup_swapin_charge_folio() inside the for loop: > > > > > > > > > for (;;) { > > > int err; > > > /* > > > * First check the swap cache. Since this is normall= y > > > * called after swap_cache_get_folio() failed, re-cal= ling > > > * that would confuse statistics. > > > */ > > > folio =3D filemap_get_folio(swap_address_space(entry)= , > > > swp_offset(entry)); > > > > > > > > > > mpol, ilx, numa_nod= e_id()); > > > > if (!folio) > > > > goto fail_put_swap; > > > > + if (mem_cgroup_swapin_charge_folio(folio, NULL, gfp= _mask, entry)) > > > > + goto fail_put_folio; > > > > > > Wouldn't it cause repeat charging of the folio when it is racing > > > against others in the for loop? > > > > The race loser will call folio_put and discharge it? > > There are two different charges. Memcg charging and memcg swapin charging= . > The folio_put will do the memcg discharge, the corresponding memcg > charge is in follio allocation. Hi Chris, I didn't get your idea here... By "memcg swapin charge", do you mean "memory.swap.*"? And "memcg charging" means "memory.*"?. There is no memcg charge related code in folio allocation (alloc_pages_mpol), actually the mem_cgroup_swapin_charge_folio here is doing memcg charge not memcg swapin charge. Swapin path actually need to uncharge "memory.swap" by mem_cgroup_swapin_uncharge_swap in later part of this function. > Memcg swapin charge does things differently, it needs to modify the > swap relately accounting. > The memcg uncharge is not a pair for memcg swapin charge. > > > > > /* > > > > * Swap entry may have been freed since our caller = observed it. > > > > @@ -483,13 +485,9 @@ struct page *__read_swap_cache_async(swp_entry= _t entry, gfp_t gfp_mask, > > > > /* > > > > * The swap entry is ours to swap in. Prepare the new page. > > > > */ > > > > - > > > > __folio_set_locked(folio); > > > > __folio_set_swapbacked(folio); > > > > > > > > - if (mem_cgroup_swapin_charge_folio(folio, NULL, gfp_mask, e= ntry)) > > > > - goto fail_unlock; > > > > - > > > > > > The original code makes the charge outside of the for loop. Only the > > > winner can charge once. > > > > Right, this patch may make the charge/dis-charge path more complex for > > race swapin, I'll re-check this part. > > It is more than just complex, it seems to change the behavior of this cod= e. > > Chris