From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-lj1-f180.google.com (mail-lj1-f180.google.com [209.85.208.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F36716D13 for ; Thu, 12 Aug 2021 21:08:34 +0000 (UTC) Received: by mail-lj1-f180.google.com with SMTP id h11so12458772ljo.12 for ; Thu, 12 Aug 2021 14:08:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=shutemov-name.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=YpFOixfCUpC49LCJc0vUvfuAwPcwjJWVPf9TZf8tyJ8=; b=cAG9i2LwB3ilC3ArMI7sK1ndTIQHyayqlAYVv3TlOJ5K+Z6NySlDYlyxQEVoQ9Wgvk NhkpaxSmgxedeZ2O7khhDzfm6Pak3MvGiXBVHRibHFlBD2cRKkF8oTVL46xJI4ean5h7 GVZlzbl37MOZrjyehEAeM9aL+K9Z8D0aTmBV/UpyNzofZ3IdxRhubVb37DRtAxp6f/1W XBMmDjpd+LuS370xmTefqRvppJguLKysX+6ubL2k8A+4chahQoxIFx5fdSIdFoWutTy4 fqmEKHXyCBHHbu9yMrwydNqTj7C7EXBa6HS3BN+B4DqpzrbXVuTyXhqsCprOwayzDeRC tEjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=YpFOixfCUpC49LCJc0vUvfuAwPcwjJWVPf9TZf8tyJ8=; b=SOvsAMtVCw3ktzSR+MXliO7y6CMqqwN55M9sZ/dRRgT7cQwzW7Q+tOI21iwxCpEiiH U2N3IYAzLQ7fqt1bIhDOL0QhVx21019hRDTONiGNfmIQM4PLUga4WK3kHP4ae7rgAD55 2cZ2FDNMOC9oDfO51LwWGRR/SN9i3K+70pXy8YsqJtRWLqjlSXx+lnZjb5h7pnK1o0aG zPzZrS3j2sADbV5DD9z1aytK/dML+IipsFdgUWQsyHLc50sSPRKakvbS5b0GvVVhvIqp whWGtRpCm3j8xiHKvp6MhjAY+/gHVuYI15o0p63Tm9CGv3vP1l9IW4E+WytChNqZvlvC vSTQ== X-Gm-Message-State: AOAM533SrsRvOFPD7PbCXGCxBZzvN3CZaUIDwlZWD4xoXK4SK4+0SJWD 3rjtoXtW7DOX2LL5jRCBDcXnhA== X-Google-Smtp-Source: ABdhPJzFIkQOm8E0duwu89bHdOD4H/nXReJ/pZkzEeRcCz/lKjlA0OADTVu1mSRdY1UHYhvG1mAEcQ== X-Received: by 2002:a05:651c:516:: with SMTP id o22mr161107ljp.152.1628802513050; Thu, 12 Aug 2021 14:08:33 -0700 (PDT) Received: from box.localdomain ([86.57.175.117]) by smtp.gmail.com with ESMTPSA id q66sm441742ljb.83.2021.08.12.14.08.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Aug 2021 14:08:32 -0700 (PDT) Received: by box.localdomain (Postfix, from userid 1000) id 10242102BEE; Fri, 13 Aug 2021 00:08:46 +0300 (+03) Date: Fri, 13 Aug 2021 00:08:46 +0300 From: "Kirill A. Shutemov" To: Dave Hansen Cc: Borislav Petkov , Andy Lutomirski , Sean Christopherson , Andrew Morton , Joerg Roedel , Andi Kleen , Kuppuswamy Sathyanarayanan , David Rientjes , Vlastimil Babka , Tom Lendacky , Thomas Gleixner , Peter Zijlstra , Paolo Bonzini , Ingo Molnar , Varad Gautam , Dario Faggioli , x86@kernel.org, linux-mm@kvack.org, linux-coco@lists.linux.dev, linux-kernel@vger.kernel.org, "Kirill A. Shutemov" Subject: Re: [PATCH 1/5] mm: Add support for unaccepted memory Message-ID: <20210812210846.bfalflrvn4bfpyyh@box.shutemov.name> References: <20210810062626.1012-1-kirill.shutemov@linux.intel.com> <20210810062626.1012-2-kirill.shutemov@linux.intel.com> Precedence: bulk X-Mailing-List: linux-coco@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: On Tue, Aug 10, 2021 at 01:50:57PM -0700, Dave Hansen wrote: > On 8/10/21 11:13 AM, Dave Hansen wrote: > >> @@ -1001,6 +1004,9 @@ static inline void del_page_from_free_list(struct page *page, struct zone *zone, > >> if (page_reported(page)) > >> __ClearPageReported(page); > >> > >> + if (PageOffline(page)) > >> + clear_page_offline(page, order); > >> + > >> list_del(&page->lru); > >> __ClearPageBuddy(page); > >> set_page_private(page, 0); > > So, this is right in the fast path of the page allocator. It's a > > one-time thing per 2M page, so it's not permanent. > > > > *But* there's both a global spinlock and a firmware call hidden in > > clear_page_offline(). That's *GOT* to hurt if you were, for instance, > > running a benchmark while this code path is being tickled. Not just to > > > > That could be just downright catastrophic for scalability, albeit > > temporarily. > > One more thing... > > How long are these calls? You have to make at least 512 calls into the > SEAM module. Assuming they're syscall-ish, so ~1,000 cycles each, > that's ~500,000 cycles, even if we ignore the actual time it takes to > zero that 2MB worth of memory and all other overhead within the SEAM module. I hope to get away with 2 calls per 2M: one MapGPA and one TDACCEPTPAGE (or 3 for MAXORDER -- 4M -- pages). I don't have any numbers yet. > So, we're sitting on one CPU with interrupts off, blocking all the other > CPUs from doing page allocation in this zone. I agree that's not good. Let's see if it's going to be okay with accepting in 2M chunks. > Then, we're holding a global lock which prevents any other NUMA nodes > from accepting pages. Looking at this again, the global lock is aviodable: the caller owns the pfn range so nobody can touch these bits in the bitmap. We can replace bitmap_clear() with atomic clear_bit() loop and drop the lock completely. > If the other node happens to *try* to do an > accept, it will sit with its zone lock held waiting for this one. > Maybe nobody will ever notice. But, it seems like an awfully big risk > to me. I'd at least *try* do these calls outside of the zone lock. > Then the collateral damage will at least be limited to things doing > accepts rather than all zone->lock users. > > Couldn't we delay the acceptance to, say the place where we've dropped > the zone->lock and do the __GFP_ZERO memset() like at prep_new_page()? > Or is there some concern that the page has been split at that point? It *will* be split by the point. Like if you ask for order-0 page and you don't any left page allocator will try higher orders until finds anything. On order-9 it would hit unaccepted. At that point the page going to split and put on the free lists accordingly. That's all happens under zone lock. __rmqueue_smallest -> del_page_from_free_list() expand() > I guess that makes it more complicated because you might have a 4k page > but you need to go accept a 2M page. You might end up having to check > the bitmap 511 more times because you might see 511 more PageOffline() > pages come through. > > You shouldn't even need the bitmap lock to read since it's a one-way > trip from unaccepted->accepted. Yeah. Unless we don't want to flip it back on making the range share. I think we do. Otherwise it will cause problems for kexec. -- Kirill A. Shutemov