Received: by 2002:a25:683:0:0:0:0:0 with SMTP id 125csp838891ybg; Wed, 10 Jun 2020 15:23:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx99wBC4saS5YQCTikQK2tOK9fWsCbFEY9yPBMatope+8zQ6Yx2/8Wyk8/R818gSKzAkl+O X-Received: by 2002:a50:d55c:: with SMTP id f28mr4222665edj.87.1591827783771; Wed, 10 Jun 2020 15:23:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591827783; cv=none; d=google.com; s=arc-20160816; b=M7waN+khBSCOwiD6f2h53oVtzYHC0WkkvYiv1RO7ZX8eRtrz+RlWs2unkvuNnvxf2y wTBc1XcUISVlj6PajnVIjm/L5Jyeu3G7KdXnG12bjfp9/VexX2QqXosZdltCBMxgFPeb PraNnB39ni+G8oE/cHqjMc2RMekepN4fyGTXkMoJCkqLBPpo0WccOe40upyFEM9jJDm7 uodFWHxDjkioSZmjR2WNHA2Yv9mEvH7GoGRUcuEZzbZZZqFQG0ggXipqf2Ld9GuIU2Z6 P7BzOWVEQHk9tRjZah1ga6zIJUtgmZPLgwFCbPUZqyYNKomWxAvtzpTfZFKI8mhE6amw Dxtw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=gbYrwjkRNzZs52wtNe5b9ymrBledc5fgJdW/7CYMczg=; b=Keu1CzzrNHogy6DBg3jFO1iuoTZj5Uer37Hst4NZl2n1+THKQmZuO9v8D0cqzehrrE hZZRsPFTWQQus8Phxaz9mP/70BGS1j0+NtupdSWZETeXP+9Hl6gmL+loWywdkVO7Y3GF C0/ZPCLr2ho16i7V0SQXG7PcZJvQz01/P4q7D95XF/l8mZPnpPb7Mi4XGYzPbf8m7C+V bQ3DeYxe059oha4KWY33CMHZ3F9limb8eN90iiaHYk+g5A1QD8GSWgTqO38ghoKPZ/TB Su8UwxRa4RMlmsQxnOaJVxYe5m0sFmNsbuZ2FNjgN9TFaaWpwmMkwzY70jl/HXrD88jq IiRQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=QyyXrmeK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id be28si517306edb.525.2020.06.10.15.22.40; Wed, 10 Jun 2020 15:23:03 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=QyyXrmeK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 S1726710AbgFJWUh (ORCPT + 99 others); Wed, 10 Jun 2020 18:20:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51958 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726374AbgFJWUf (ORCPT ); Wed, 10 Jun 2020 18:20:35 -0400 Received: from mail-vs1-xe44.google.com (mail-vs1-xe44.google.com [IPv6:2607:f8b0:4864:20::e44]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EE4E2C03E96B for ; Wed, 10 Jun 2020 15:20:34 -0700 (PDT) Received: by mail-vs1-xe44.google.com with SMTP id c1so2247903vsc.11 for ; Wed, 10 Jun 2020 15:20:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=gbYrwjkRNzZs52wtNe5b9ymrBledc5fgJdW/7CYMczg=; b=QyyXrmeKJSKKc54VOXRhBA48lstvw0q3ctLwmRUmYvuniF6MaKqprw76G6WKeXgKXB r/jbdUg8yJ7iw34oE1OWz0dWyMIlim7iHYcQtD67/ivBRy+I7B838Bxvx4JWOVUAxYN3 POzPLtPUSvRylefwwyiJnNCwZ28r+eFHCfQTlfjzukPMl52cDhRE0H8vA3A5R5qZ//vK hyVJruxV9jjEt3XKZbDLdCyH9tLqObhgWfqQJpRCLqqkFBHz8EB0eQ7avKhqHHK0zYzj RESHvTrXTKtZufFfvsuK5nk/vVANKcnKj1isrCHWI7ENKEYpAZgFY60ZfqvyNfgEDVAL 29Zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=gbYrwjkRNzZs52wtNe5b9ymrBledc5fgJdW/7CYMczg=; b=WinfFpmHGGgKnUdunfZ4dekxO0p3KhpTik6GVspBdh8Abawoc8ZmdCPO49D4efjOJ8 LMpMfXi6yPEYwaQoXYIgRNvcNlM3HPua94z7LmNk32sNF5AUYGoCpmEa63tS3tm8xbYi /L4pNGhOVproZFxw75zQsJ7mEt9w9JRzvczj8m4SJZtKECoJoh90gzs7F9A2kJdxrkJG OnwDQVVcuMDUR0trId9OIevgkr5SWswcJmTvNKFGXLKDSVF28ySCklR7nQ4VG2Og7OO1 JAdvBzxP4zC2/liHk7f1DmdRWlTLEh+/Pf5Wp/JenwkWgD6/UPgW8vGUQfKYXE7Rc0t+ cCMw== X-Gm-Message-State: AOAM531sBWgesSKKAOMwmlhPP70ZV9otyneWtwQVF6SC6xwV/IM/tonM f6RNAT9Myq2Ocn4pF/mlfcVa47VlZrMr0js0J95Dcw== X-Received: by 2002:a67:d287:: with SMTP id z7mr4666597vsi.2.1591827633895; Wed, 10 Jun 2020 15:20:33 -0700 (PDT) MIME-Version: 1.0 References: <20200605213853.14959-1-sean.j.christopherson@intel.com> <20200605213853.14959-9-sean.j.christopherson@intel.com> In-Reply-To: <20200605213853.14959-9-sean.j.christopherson@intel.com> From: Ben Gardon Date: Wed, 10 Jun 2020 15:20:19 -0700 Message-ID: Subject: Re: [PATCH 08/21] KVM: x86/mmu: Clean up the gorilla math in mmu_topup_memory_caches() To: Sean Christopherson Cc: Marc Zyngier , Paul Mackerras , Christian Borntraeger , Janosch Frank , Paolo Bonzini , James Morse , Julien Thierry , Suzuki K Poulose , David Hildenbrand , Cornelia Huck , Claudio Imbrenda , Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Joerg Roedel , linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, linux-mips@vger.kernel.org, kvm@vger.kernel.org, kvm-ppc@vger.kernel.org, linux-kernel@vger.kernel.org, Peter Feiner , Peter Shier , Junaid Shahid , Christoffer Dall Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Jun 5, 2020 at 2:39 PM Sean Christopherson wrote: > > Clean up the minimums in mmu_topup_memory_caches() to document the > driving mechanisms behind the minimums. Now that encountering an empty > cache is unlikely to trigger BUG_ON(), it is less dangerous to be more > precise when defining the minimums. > > For rmaps, the logic is 1 parent PTE per level, plus a single rmap, and > prefetched rmaps. The extra objects in the current '8 + PREFETCH' > minimum came about due to an abundance of paranoia in commit > c41ef344de212 ("KVM: MMU: increase per-vcpu rmap cache alloc size"), > i.e. it could have increased the minimum to 2 rmaps. Furthermore, the > unexpected extra rmap case was killed off entirely by commits > f759e2b4c728c ("KVM: MMU: avoid pte_list_desc running out in > kvm_mmu_pte_write") and f5a1e9f89504f ("KVM: MMU: remove call to > kvm_mmu_pte_write from walk_addr"). > > For the so called page cache, replace '8' with 2*PT64_ROOT_MAX_LEVEL. > The 2x multiplier is needed because the cache is used for both shadow > pages and gfn arrays for indirect MMUs. > > And finally, for page headers, replace '4' with PT64_ROOT_MAX_LEVEL. > > Note, KVM now supports 5-level paging, i.e. the old minimums that used a > baseline derived from 4-level paging were technically wrong. But, KVM > always allocates roots in a separate flow, e.g. it's impossible in the > current implementation to actually need 5 new shadow pages in a single > flow. Use PT64_ROOT_MAX_LEVEL unmodified instead of subtracting 1, as > the direct usage is likely more intuitive to uninformed readers, and the > inflated minimum is unlikely to affect functionality in practice. > > Signed-off-by: Sean Christopherson Reviewed-by: Ben Gardon > --- > arch/x86/kvm/mmu/mmu.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c > index 4b4c3234d623..451e0365e5dd 100644 > --- a/arch/x86/kvm/mmu/mmu.c > +++ b/arch/x86/kvm/mmu/mmu.c > @@ -1103,14 +1103,17 @@ static int mmu_topup_memory_caches(struct kvm_vcpu *vcpu) > { > int r; > > + /* 1 rmap, 1 parent PTE per level, and the prefetched rmaps. */ > r = mmu_topup_memory_cache(&vcpu->arch.mmu_pte_list_desc_cache, > - 8 + PTE_PREFETCH_NUM); > + 1 + PT64_ROOT_MAX_LEVEL + PTE_PREFETCH_NUM); > if (r) > return r; > - r = mmu_topup_memory_cache(&vcpu->arch.mmu_page_cache, 8); > + r = mmu_topup_memory_cache(&vcpu->arch.mmu_page_cache, > + 2 * PT64_ROOT_MAX_LEVEL); > if (r) > return r; > - return mmu_topup_memory_cache(&vcpu->arch.mmu_page_header_cache, 4); > + return mmu_topup_memory_cache(&vcpu->arch.mmu_page_header_cache, > + PT64_ROOT_MAX_LEVEL); > } > > static void mmu_free_memory_caches(struct kvm_vcpu *vcpu) > -- > 2.26.0 >