Received: by 2002:a6b:fb09:0:0:0:0:0 with SMTP id h9csp1899662iog; Thu, 16 Jun 2022 16:54:48 -0700 (PDT) X-Google-Smtp-Source: AGRyM1s5AMBKTR9LhaU22MOjEaKLdvdiOWAyvHd6ZQ9c9LjKju9JM7H7i9VgDF9J3lY4Q0ILOoAo X-Received: by 2002:a05:6402:3224:b0:42d:e68c:2fd with SMTP id g36-20020a056402322400b0042de68c02fdmr9447194eda.282.1655423688180; Thu, 16 Jun 2022 16:54:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1655423688; cv=none; d=google.com; s=arc-20160816; b=x1ovCo3GIkmnF36NUmLcOwFYXEP2Pk0N8wAg2lE8FztaGoISpc56nsZeUvPqbRFg8g YjQ+qs61vRzY0f78UjMKwd/fKOoU8dAPud/XrYzthwVuDtU4g76cBjakglQP47tU1Wx8 qb6/11GccNH4UZ9F89qODYZryvXrvfx7UWst9aXgF9YFLHQp4kJ7GwT+imGdCENcxfKA ulD22EnLHVAOtqjYW90C5EZMEyzckxQYEvTUQABOr/RBeVL7YwJnwzzPv9vDbWTQkCYC ApZcDLADNKlfihThkMTuHo0MpnD40uIP1CiI4Wt6ctU7i1ven0Y4jpgzeq0nDwdPeaqQ L3nw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=jTQu5pe6Zf0+qj19U3vviuhopcu1lsdgelMDE7rhu0Q=; b=CsJ1/xKFZLoWTvMaMiiCHpmEFaBw0HwsIH0TEuhok17RPUSfYg3C9Xl7ggZ9/Uf2Mf tA6diV53lNtWTte3EZ9j+qW/Y+i7ZPabbaTTEgbq56V1Mp8GBGlUYIzgy9z2QDs4kILU wIk3cA5sGc+k/lKB6RloCNu9/KLV7AtC+spYqVzZsg6WxxGNmLtelLYTud72L+0Any9x e7tYQpOkAcDUMAvQhIgJB+p8lGnpAi9YAm3OVvz8D2etmMS6jBBUvLDz2UqgFzEhvg2f mzAqZLF/0ETjnRbF2Y/hLrRbzwq96SydwB71V/acGNZURRybBtxJNZfEV4gnm0FYGzoZ 1nZw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=tOonm2OI; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id dm6-20020a05640222c600b0042b5f20c62asi3619194edb.70.2022.06.16.16.54.22; Thu, 16 Jun 2022 16:54:48 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=tOonm2OI; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232257AbiFPXaF (ORCPT + 99 others); Thu, 16 Jun 2022 19:30:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57706 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232177AbiFPX37 (ORCPT ); Thu, 16 Jun 2022 19:29:59 -0400 Received: from mail-vs1-xe2e.google.com (mail-vs1-xe2e.google.com [IPv6:2607:f8b0:4864:20::e2e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 06EA55FF3E for ; Thu, 16 Jun 2022 16:29:57 -0700 (PDT) Received: by mail-vs1-xe2e.google.com with SMTP id j39so2602756vsv.11 for ; Thu, 16 Jun 2022 16:29:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=jTQu5pe6Zf0+qj19U3vviuhopcu1lsdgelMDE7rhu0Q=; b=tOonm2OIkZMBU/bLGDvI7kAER+D+N/KWwhs+Yk5bDeqcXoDUEirgvpt7Q9JysPsHYA 6LdxZobaPlu7v03YFmDCMAW3+t/XzxD6Xnuh1H32fIjUF1dv66ru8JuQDhuNJA85y/tj jUSf0Exxifrnke77ACFpsYgc3m4l6e17IxPmoPpEu9D7icFToolqS1hjIg6MAgJCK8cp jrsf932jCh/QooZfhdpc2EZ8SlIVNhVQSS5E/hWXAEzlhkomzv5h9DxTefjNLVA77OYa eXlnuSbNI3ELZ1clQiuOgRYCOLMy/JcYAv+YY1F9ryL4RGz/7hVzY8LTHm4fjfAnF4iQ ZXzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=jTQu5pe6Zf0+qj19U3vviuhopcu1lsdgelMDE7rhu0Q=; b=bIhlhCwBnfo3cxVcTJuPPkt+rA6MfpFg8uWhJLRLEkjrU3H6FamhDPy8HPa0+tqiOg eBQ3wmbV5yuuj46cvtSVuZG0ubcN3bh6+G2lPynGWR9u9vied015eLHmYltgEMWbvC1S K3JHWjnXDwM5RrdDguG8+v9yuatLPtvBMb7oRJ7M9AmpBi8GQNXX/Dvwncrmme+16QbE sUX2Fs65LYnIwfCRTv5ZrAjdHHrloSoifu3RR9Mow0jY/Juk10x+foelK/5wGLJGxdEz 3DFRTccIoNUsgNHVKOq1NuCXP7RGjtMD4JSmR3vMfpGTVffudPAUPwgvfrZA6do8yzFj tZdQ== X-Gm-Message-State: AJIora9rxQ7I02IwD2gwAsyu4Z8t85NFg+IbtvOjYqOd3AO5hO/hv/ed bk7U8jesKCfRvW/w4uJseSwDY71tqivRphsb4NKflQ== X-Received: by 2002:a05:6102:3e23:b0:34b:b6b0:2ae7 with SMTP id j35-20020a0561023e2300b0034bb6b02ae7mr3717280vsv.81.1655422195990; Thu, 16 Jun 2022 16:29:55 -0700 (PDT) MIME-Version: 1.0 References: <20220518014632.922072-1-yuzhao@google.com> <20220518014632.922072-8-yuzhao@google.com> <20220607102135.GA32448@willie-the-truck> <20220607104358.GA32583@willie-the-truck> In-Reply-To: From: Yu Zhao Date: Thu, 16 Jun 2022 17:29:19 -0600 Message-ID: Subject: Re: [PATCH v11 07/14] mm: multi-gen LRU: exploit locality in rmap To: Barry Song <21cnbao@gmail.com> Cc: Linus Torvalds , Will Deacon , Andrew Morton , Linux-MM , Andi Kleen , Aneesh Kumar , Catalin Marinas , Dave Hansen , Hillf Danton , Jens Axboe , Johannes Weiner , Jonathan Corbet , Matthew Wilcox , Mel Gorman , Michael Larabel , Michal Hocko , Mike Rapoport , Peter Zijlstra , Tejun Heo , Vlastimil Babka , LAK , Linux Doc Mailing List , LKML , x86 , Kernel Page Reclaim v2 , Brian Geffon , Jan Alexander Steffens , Oleksandr Natalenko , Steven Barrett , Suleiman Souhlal , Daniel Byrne , Donald Carr , =?UTF-8?Q?Holger_Hoffst=C3=A4tte?= , Konstantin Kharlamov , Shuang Zhai , Sofia Trinh , Vaibhav Jain , huzhanyuan@oppo.com Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-17.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL,USER_IN_DEF_SPF_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Jun 16, 2022 at 4:33 PM Barry Song <21cnbao@gmail.com> wrote: > > On Fri, Jun 17, 2022 at 9:56 AM Yu Zhao wrote: > > > > On Wed, Jun 8, 2022 at 4:46 PM Barry Song <21cnbao@gmail.com> wrote: > > > > > > On Thu, Jun 9, 2022 at 3:52 AM Linus Torvalds > > > wrote: > > > > > > > > On Tue, Jun 7, 2022 at 5:43 PM Barry Song <21cnbao@gmail.com> wrote: > > > > > > > > > > Given we used to have a flush for clear pte young in LRU, right now we are > > > > > moving to nop in almost all cases for the flush unless the address becomes > > > > > young exactly after look_around and before ptep_clear_flush_young_notify. > > > > > It means we are actually dropping flush. So the question is, were we > > > > > overcautious? we actually don't need the flush at all even without mglru? > > > > > > > > We stopped flushing the TLB on A bit clears on x86 back in 2014. > > > > > > > > See commit b13b1d2d8692 ("x86/mm: In the PTE swapout page reclaim case > > > > clear the accessed bit instead of flushing the TLB"). > > > > > > This is true for x86, RISC-V, powerpc and S390. but it is not true for > > > most platforms. > > > > > > There was an attempt to do the same thing in arm64: > > > https://www.mail-archive.com/linux-kernel@vger.kernel.org/msg1793830.html > > > but arm64 still sent a nosync tlbi and depent on a deferred to dsb : > > > https://www.mail-archive.com/linux-kernel@vger.kernel.org/msg1794484.html > > > > Barry, you've already answered your own question. > > > > Without commit 07509e10dcc7 arm64: pgtable: Fix pte_accessible(): > > #define pte_accessible(mm, pte) \ > > - (mm_tlb_flush_pending(mm) ? pte_present(pte) : pte_valid_young(pte)) > > + (mm_tlb_flush_pending(mm) ? pte_present(pte) : pte_valid(pte)) > > > > You missed all TLB flushes for PTEs that have gone through > > ptep_test_and_clear_young() on the reclaim path. But most of the time, > > you got away with it, only occasional app crashes: > > https://lore.kernel.org/r/CAGsJ_4w6JjuG4rn2P=d974wBOUtXUUnaZKnx+-G6a8_mSROa+Q@mail.gmail.com/ > > > > Why? > > Yes. On the arm64 platform, ptep_test_and_clear_young() without flush > can cause random > App to crash. > ptep_test_and_clear_young() + flush won't have this kind of crashes though. > But after applying commit 07509e10dcc7 arm64: pgtable: Fix > pte_accessible(), on arm64, > ptep_test_and_clear_young() without flush won't cause App to crash. > > ptep_test_and_clear_young(), with flush, without commit 07509e10dcc7: OK > ptep_test_and_clear_young(), without flush, with commit 07509e10dcc7: OK > ptep_test_and_clear_young(), without flush, without commit 07509e10dcc7: CRASH I agree -- my question was rhetorical :) I was trying to imply this logic: 1. We cleared the A-bit in PTEs with ptep_test_and_clear_young() 2. We missed TLB flush for those PTEs on the reclaim path, i.e., case 3 (case 1 & 2 guarantee flushes) 3. We saw crashes, but only occasionally Assuming TLB cached those PTEs, we would have seen the crashes more often, which contradicts our observation. So the conclusion is TLB didn't cache them most of the time, meaning flushing TLB just for the sake of the A-bit isn't necessary. > do you think it is safe to totally remove the flush code even for > the original > LRU? Affirmative, based on not only my words, but 3rd parties': 1. Your (indirect) observation 2. Alexander's benchmark: https://lore.kernel.org/r/BYAPR12MB271295B398729E07F31082A7CFAA0@BYAPR12MB2712.namprd12.prod.outlook.com/ 3. The fundamental hardware limitation in terms of the TLB scalability (Fig. 1): https://www.usenix.org/legacy/events/osdi02/tech/full_papers/navarro/navarro.pdf