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 C0BDFC3DA45 for ; Thu, 11 Jul 2024 19:59:38 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2C5516B0088; Thu, 11 Jul 2024 15:59:38 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 275B46B00A0; Thu, 11 Jul 2024 15:59:38 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 13E356B00A8; Thu, 11 Jul 2024 15:59:38 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id EA8C56B0088 for ; Thu, 11 Jul 2024 15:59:37 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 64F60140794 for ; Thu, 11 Jul 2024 19:59:37 +0000 (UTC) X-FDA: 82328536794.15.9956AB6 Received: from mail-qt1-f170.google.com (mail-qt1-f170.google.com [209.85.160.170]) by imf27.hostedemail.com (Postfix) with ESMTP id 9DB0640017 for ; Thu, 11 Jul 2024 19:59:35 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=trW+clxW; spf=pass (imf27.hostedemail.com: domain of yuzhao@google.com designates 209.85.160.170 as permitted sender) smtp.mailfrom=yuzhao@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1720727959; 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=usQgq2qcD076ORgLl9lg0b15V7evrXBpIxDm3sw86OY=; b=khjuX+nrGvx0IeceK27Jd6/K4pH7zsZLr+9wRAde2nhvjizJl3jppNDKqsydbtPgD3NGX7 npp+bOCqVCn35l4M70EXnsNIQf1Z+kpCYJohMzmXsDd3Dv4Y7Yjqi/SuBAgHg+oEfSDH6U PPR44E4/ClhK+ZEg7qVoNx3AaIBZTiU= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=trW+clxW; spf=pass (imf27.hostedemail.com: domain of yuzhao@google.com designates 209.85.160.170 as permitted sender) smtp.mailfrom=yuzhao@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1720727959; a=rsa-sha256; cv=none; b=BzpTTzx7R2cbk2yJ6kUZY1Nj/efBjM5a05qqTmgIpLhpXWOAttISsXo2ihWEJXBrP/brMi VUDKtIqbdEf5jm0v1m/9uMZiRgrFhHuy/hG5ilMTSg2cI9lQaYlYizN4RsKksNmQQ0Rrs+ 2Qxd1guoRR3lJyIYvL819TEr7xUWer8= Received: by mail-qt1-f170.google.com with SMTP id d75a77b69052e-44a8b140a1bso57091cf.0 for ; Thu, 11 Jul 2024 12:59:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1720727975; x=1721332775; 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=usQgq2qcD076ORgLl9lg0b15V7evrXBpIxDm3sw86OY=; b=trW+clxWaSlMchfjgYy7hL2ZVSx73WiYJ9AvSr64jP19EkwrnLhbrURKXVJOELqiVr uoDpeWOUOEiGojRdp8gg1XzoGBs32Kv0kO03rpqRfBg7bV/WAvsNfOzonzyyCAZywrxI yZy25s0qjCQmrHziRqb1djbVFoWRoS/Ex8YtpS+F0Hp2TByJA2c/2R35qcnW6cnhvh+t FTfAczAj8a0DemJX6eY3XOLbbXNKGb316dn8n9tVskHrnBL+nNY4HmcVGZiO39k81uVp iPoQAeNOyFJFl2VLSJ9cTteT8weWSB2URoeuwoDKl4Nz3Wi6xx/xezoNp5CjBRJrlslT ouJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1720727975; x=1721332775; 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=usQgq2qcD076ORgLl9lg0b15V7evrXBpIxDm3sw86OY=; b=T0YrkLNvJuupeQLSPw1gJu9I1oPBrPl7G421ch/P5dsXRYvvrosPL1iMKd0nJ+L1Rd pfv2Vfvzg0K3LBzncU0n4XKH9cHo/uRSbN09ztg03+Tdh5PZN7Zr/tsQSrQljTuyL4M+ C0ILgYQaMrYqzuT7NwKmjgIgjC5M+e70KWZY9bRx/xQKuNkHVAF1BNx8WK/K/ftSzbwS oLYz1qb1gXOt90yiaCXoUELBp73J+t8h0+B45ZSP0Aow2kAH1Vhm2uqtufDMXcFZUN7W qW1DNovgwe8ej5HMDWCw1kQLMzAjHOkwVWEv+wW4/W/wu514KZxNUSp3v1w2GKURA8O/ dKaw== X-Forwarded-Encrypted: i=1; AJvYcCUcXaNl9qIjUBpmlYC81wCv+uELIjJVAn51zzbxZojUXQL8260ndZQgXDRDce+DqZlz+Frh1r0kwUHm14fioo3LNu8= X-Gm-Message-State: AOJu0YyiyFqZmnn51HgB3L1kVyBVVIFeTSg7YhF7np9+lx3awJiGo5R6 ITp0QjANrgUWo162h6eKQPWNE1CoeESh5ZtD5UOLrBXrs7ARd/jtaUZrXOvNBPpr9KaPsYMqpj+ 4B8MbInt4uFg8tAg/KAPDmb+1K0sf3uEweXW2 X-Google-Smtp-Source: AGHT+IEM7irFssvF1uct5oQd7x7Vaba9daG5UqSQAd7zGLlxjvcWer92aqHngywJVogpDpoHiV+PdmFmORbjnMYXigE= X-Received: by 2002:ac8:7193:0:b0:447:d555:7035 with SMTP id d75a77b69052e-44e793e6f9dmr475651cf.13.1720727974558; Thu, 11 Jul 2024 12:59:34 -0700 (PDT) MIME-Version: 1.0 References: <98798483-dfcd-451e-94bb-57d830bf68d8@redhat.com> <54b6de32-f127-4928-9f4a-acb8653e5c81@redhat.com> <8586b19c-2e14-4164-888f-8c3b86f3f963@redhat.com> <443146f4-9db8-4a19-91f1-b6822fad8ce8@redhat.com> <1c8632b4-06a5-49da-be0c-6fc7ac2b3257@redhat.com> <2c464271-1c61-4cd8-bd4e-4bd8aa01fa00@redhat.com> In-Reply-To: From: Yu Zhao Date: Thu, 11 Jul 2024 13:58:57 -0600 Message-ID: Subject: Re: [PATCH v22 1/4] mm: add MAP_DROPPABLE for designating always lazily freeable mappings To: David Hildenbrand Cc: "Jason A. Donenfeld" , Linus Torvalds , linux-kernel@vger.kernel.org, patches@lists.linux.dev, tglx@linutronix.de, linux-crypto@vger.kernel.org, linux-api@vger.kernel.org, x86@kernel.org, Greg Kroah-Hartman , Adhemerval Zanella Netto , "Carlos O'Donell" , Florian Weimer , Arnd Bergmann , Jann Horn , Christian Brauner , David Hildenbrand , linux-mm@kvack.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam03 X-Rspam-User: X-Rspamd-Queue-Id: 9DB0640017 X-Stat-Signature: hoecmfdssodb61dzo5pwd691uor565cw X-HE-Tag: 1720727975-456350 X-HE-Meta: U2FsdGVkX19Q2XwErCAUFu888ldJV3cz+bxGqYivzdP49jmOFUmRqwXx4L0Ed+KHxfdPrGgX7EIWAXKRyIv2lFa8pJr9QGgr6a4yTHTsHxBXrwKPRo7eeHS5w0nDGJUKEnOSxzzlBoT8bAe0A0yk+vLPN8wqECVDPFa/0JApgUjzzsSvkUJKDupLV03cEUqYfw2IyayDXgFHBREpwCBkdS8AP3eL/vA/Zj4SihVBVfn3JV5/3Z6RLZZAK5fYLnzdC8qesFQlcAZvp+kDh72LiBbcj+1nJ0Tiy7+2l7MxlmKT+GD/1nVGn1PDf4R95P8+TREctmRi0Rgp42A/+RUG2NX58xvh0ioQ2vCinmIkqP1RETYU1yrJmbCTBnnVfeSimIOKLjrOiZrQXBlmL3FtDX3lls6ueRBND/Ctqj3ytTx1Px5sHi1dKFTTdMND8aRSEh0mBnKVRnoRseE/rUew/XlBzg6gZfARz2iuArzk32oV6w1ueAtKIOQgRfKfOIinWAF7cSgpvMHHUzpiooU/DxK/UCuJSNKAV4sY35dP542tNaGeOK/ivx179rS7mao4AEfNCMjuDpHKM73RM1vXi+M7+dRDY7l2xAmTgTzy1HYqmUkPk8WGhv8HMl9FSkccgvYshJhs5andVKHjVqg+LF6NEGK+sVSqrunuBG2723RTFkN6vrFVsdLM7qPiQNFHs0PuUmIH0BSc92/iQhNxCH6Q/H/PNzuOOalV1VG58y2cCvvEgI80dO387U3dbdvLa09quJvCPplmgV80DCHmtTqr68K5rLoRlC24Z+H3IibCtrPjRwsbqwQm5FqHDU5aIbXnTfjtzqay4EjPzH4Yo7vcnL7zZwD7eU/pVzVZvniIMFssBaE7rwp5MtY1ZFr31NlgbMjmNGmG4SbIfSMp3rbLwZvM53mBbBalc2/+zoUYCVPTEGTvLUWCH6qtCJc7WNqzj6nKZc27zdBPkb/ 4IHFc670 1evhsm2MXcXgZOQkueuG98avvOwWQs7TXKFcmWku9Tp47x1QMVUVoeOsqTGcWVMIfIkr0TNwFfJ4NiezTdIhoIVDPB2XER9sukEaLwU9VOpvykW4YOr/heRRDqTQrkCEptNe1AeRaGw1YW+k2ZUHCYwNP37f56Gw9DzdilulttPkzg6bigxbCxvb3u4Msv2kloVYOUaHYrTjxBI3ZfJTtxMEvlFsLKLQejdnJezya4xSPgMoDasA0Pt2GVw== 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, Jul 11, 2024 at 1:53=E2=80=AFPM David Hildenbrand wrote: > > On 11.07.24 21:49, Yu Zhao wrote: > > On Thu, Jul 11, 2024 at 1:20=E2=80=AFPM David Hildenbrand wrote: > >> > >> On 11.07.24 21:18, David Hildenbrand wrote: > >>> On 11.07.24 20:56, David Hildenbrand wrote: > >>>> On 11.07.24 20:54, Jason A. Donenfeld wrote: > >>>>> On Thu, Jul 11, 2024 at 08:24:07PM +0200, David Hildenbrand wrote: > >>>>>>> And PG_large_rmappable seems to only be used for hugetlb branches= . > >>>>>> > >>>>>> It should be set for THP/large folios. > >>>>> > >>>>> And it's tested too, apparently. > >>>>> > >>>>> Okay, well, how disappointing is this below? Because I'm running ou= t of > >>>>> tricks for flag reuse. > >>>>> > >>>>> diff --git a/include/linux/page-flags.h b/include/linux/page-flags.= h > >>>>> index b9e914e1face..c1ea49a7f198 100644 > >>>>> --- a/include/linux/page-flags.h > >>>>> +++ b/include/linux/page-flags.h > >>>>> @@ -110,6 +110,7 @@ enum pageflags { > >>>>> PG_workingset, > >>>>> PG_error, > >>>>> PG_owner_priv_1, /* Owner use. If pagecache, fs= may use*/ > >>>>> + PG_owner_priv_2, > >>>> > >>>> Oh no, no new page flags please :) > >>>> > >>>> Maybe just follow what Linux suggested: pass vma to pte_dirty() and > >>>> always return false for these special VMAs. > >>> > >>> ... or look into removing that one case that gives us headake. > >>> > >>> No idea what would happen if we do the following: > >>> > >>> CCing Yu Zhao. > >>> > >>> diff --git a/mm/vmscan.c b/mm/vmscan.c > >>> index 0761f91b407f..d1dfbd4fd38d 100644 > >>> --- a/mm/vmscan.c > >>> +++ b/mm/vmscan.c > >>> @@ -4280,14 +4280,9 @@ static bool sort_folio(struct lruvec *lruvec, = struct folio *folio, struct scan_c > >>> return true; > >>> } > >>> > >>> - /* dirty lazyfree */ > >>> - if (type =3D=3D LRU_GEN_FILE && folio_test_anon(folio) && fol= io_test_dirty(folio)) { > >>> - success =3D lru_gen_del_folio(lruvec, folio, true); > >>> - VM_WARN_ON_ONCE_FOLIO(!success, folio); > >>> - folio_set_swapbacked(folio); > >>> - lruvec_add_folio_tail(lruvec, folio); > >>> - return true; > >>> - } > >>> + /* lazyfree: we may not be allowed to set swapbacked: MAP_DRO= PPABLE */ > >>> + if (type =3D=3D LRU_GEN_FILE && folio_test_anon(folio) && fol= io_test_dirty(folio)) > >>> + return false; > > > > This is an optimization to avoid an unnecessary trip to > > shrink_folio_list(), so it's safe to delete the entire 'if' block, and > > that would be preferable than leaving a dangling 'if'. > > Great, thanks. > > > > >> Note that something is unclear to me: are we maybe running into that > >> code also if folio_set_swapbacked() is already set and we are not in t= he > >> lazyfree path (in contrast to what is documented)? > > > > Not sure what you mean: either rmap sees pte_dirty() and does > > folio_mark_dirty() and then folio_set_swapbacked(); or MGLRU does the > > same sequence, with the first two steps in walk_pte_range() and the > > last one here. > > Let me rephrase: > > Checking for lazyfree is > > "folio_test_anon(folio) && !folio_test_swapbacked(folio)" > > Testing for dirtied lazyfree is > > "folio_test_anon(folio) && !folio_test_swapbacked(folio) && > folio_test)dirty(folio)" > > So I'm wondering about the missing folio_test_swapbacked() test. It's not missing: type =3D=3D LRU_GEN_FILE means folio_is_file_lru(), which in turn means !folio_test_swapbacked().