Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp1016860pxf; Thu, 8 Apr 2021 20:06:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy9aVwaSEN4Xt23/J62Bw0kXf5Pf7/66mjSuWCxfsY4iGmLx6lOu6Y6Zzw73c4IZK6kMJ+2 X-Received: by 2002:a17:902:e889:b029:e6:4c9:ef02 with SMTP id w9-20020a170902e889b02900e604c9ef02mr10878061plg.1.1617937563766; Thu, 08 Apr 2021 20:06:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1617937563; cv=none; d=google.com; s=arc-20160816; b=AGlNu3tzbUi99sGtbp0/YTsC5DM/p3R6A5u6mJR9tR8BiIgqLXUW32vhto3TTMTaSc cuqv9a13u2NqcdVOKGxvGLQszXz7638s7dp/E2z4lXzAdsPwhEVHBf53CHW66Obj3NUo RwfY2DXfMPBCzS4oT2HHEii5EEv/sIbgmBFycKGWrKBmqD1olFdiR4lkVAurmQzg9q8j ZjSvr+VCQV39pYs4QTskiVNMdxgEqICLSVnNXZHLkl0Gjigzt9oxie4SF6RTL0+xUExD PKFJJcn4Fi2i0mPITzIqgmgaerqL0NEtfEYs5iqNEd0dVAQ2qDQ8XnuhuobRxg90V+9j ersA== 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=ZAauTo+p3+o5110VbhLNzHzIGrbICjJmfEEY/9Ouk4k=; b=hRoDN1MAv9zpem0H9dQZq7KNccLpczKSc3ur3oLgaDZryrHSYIEDpjRejSzWY2XuKk 3eTF/zwda5eXoqXr/R0X6eogNUZH+fAkDt59nlGloUw+v/X9aAzg9b9RDAaNd82B4g8Y uZOulESXdBU8TxNUIxMeaG/irG/IjI3e8VjEViHT6eFBZ8dJYOyR+mSPiX4+qa+XoPfJ ZQ8kvfvDj8aZ9HYknyEkIKUMOV0egrereM5P5QNr2joLeCmAfTgQMvOYH8ab+tvi5QKQ Cq6FsnfYXvX+gmdnA7ozoLH1LaHqkTO1tq0gf7by3jNle+pdfsIw2DbYBAKJLO5GEouE 5vwA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=fcy27v0G; 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=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g12si1325241pjl.159.2021.04.08.20.05.51; Thu, 08 Apr 2021 20:06: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=@gmail.com header.s=20161025 header.b=fcy27v0G; 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=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233055AbhDIDFZ (ORCPT + 99 others); Thu, 8 Apr 2021 23:05:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47672 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232662AbhDIDFZ (ORCPT ); Thu, 8 Apr 2021 23:05:25 -0400 Received: from mail-ot1-x332.google.com (mail-ot1-x332.google.com [IPv6:2607:f8b0:4864:20::332]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F174AC061760; Thu, 8 Apr 2021 20:05:12 -0700 (PDT) Received: by mail-ot1-x332.google.com with SMTP id d3-20020a9d29030000b029027e8019067fso2477641otb.13; Thu, 08 Apr 2021 20:05:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=ZAauTo+p3+o5110VbhLNzHzIGrbICjJmfEEY/9Ouk4k=; b=fcy27v0G77koIAzP8x3ZQC7AsiJ632w4zZTIwb2upvoL51vCSvSEeXHgPFIhIEaIF8 3woYwf99gc8HnisNDkx4CHIPh4oOIQFwHjwBm3ileEY7T4+ndhS8bOOSilzsnppni2aM fe5u95g+e0Le1EFh6PX1gL1MFaOoBGQQ31RKGCw8j/DU7d0UlzzRwYKSnV0CyARzcXZ3 XiGCIP5VJ2BZYe9r1Rw3pFZh4F+dl34Qe+66S8cyGY957sxa6x31OA6tMYnsyoHaiOri yx8Isq/uqvMPsGgaGET/Ms8JI0Zw1S+9JnbvTE5iDPQWWJoZyodhU1LsdQVdZtjkzEtl OGRQ== 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=ZAauTo+p3+o5110VbhLNzHzIGrbICjJmfEEY/9Ouk4k=; b=GFPZ665BkQRVEJoWVKF8rAN6R9/ychiOiQWT7InRYPXne+Kj/t9T6QvW2kvfCKbIFf /OK/4DtJH1og9ZVctPxAJInWpgHd6X/vJzEUrtPlzHpBMpRGq1rIEBnenPearPtdTUFs VB9Yjq/wsFw+9gYQkIC77jvVTOIHPvGIaYOxKDzZzUZ3DohkJpxz2owwJBPblo8WTn+l SQEc7QjYfAk6uYyutQrJXE/1hU5BOb6NyogeZOAJ/PqL9y4GrUTl3pQ9Bnk8IZrRYTJI /Gg4Y458xv6RCnLNpiuoCGPRg8TmGJTy1cFrOicNvg2NGYfpXo7HKjfltTFRZSInUagS Q7cA== X-Gm-Message-State: AOAM531ZzNbzl34X7kCLusCmbNyY+tkMNh9EhWFc8/2I0FQwBjkRK+JZ KA8iNVWRmfvJ+Lbw4KBisyYupOS1gFYp7k1tq3gN1Ds8 X-Received: by 2002:a9d:6b13:: with SMTP id g19mr10343601otp.185.1617937512406; Thu, 08 Apr 2021 20:05:12 -0700 (PDT) MIME-Version: 1.0 References: <1617697935-4158-1-git-send-email-wanpengli@tencent.com> In-Reply-To: From: Wanpeng Li Date: Fri, 9 Apr 2021 11:05:00 +0800 Message-ID: Subject: Re: [PATCH] KVM: X86: Count success and invalid yields To: Sean Christopherson Cc: LKML , kvm , Paolo Bonzini , Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Joerg Roedel Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, 9 Apr 2021 at 01:08, Sean Christopherson wrote: > > On Tue, Apr 06, 2021, Wanpeng Li wrote: > > From: Wanpeng Li > > > > To analyze some performance issues with lock contention and scheduling, > > it is nice to know when directed yield are successful or failing. > > > > Signed-off-by: Wanpeng Li > > --- > > arch/x86/include/asm/kvm_host.h | 2 ++ > > arch/x86/kvm/x86.c | 26 ++++++++++++++++++++------ > > 2 files changed, 22 insertions(+), 6 deletions(-) > > > > diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h > > index 44f8930..157bcaa 100644 > > --- a/arch/x86/include/asm/kvm_host.h > > +++ b/arch/x86/include/asm/kvm_host.h > > @@ -1126,6 +1126,8 @@ struct kvm_vcpu_stat { > > u64 halt_poll_success_ns; > > u64 halt_poll_fail_ns; > > u64 nested_run; > > + u64 yield_directed; > > + u64 yield_directed_ignore; > > }; > > > > struct x86_instruction_info; > > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > > index 16fb395..3b475cd 100644 > > --- a/arch/x86/kvm/x86.c > > +++ b/arch/x86/kvm/x86.c > > @@ -246,6 +246,8 @@ struct kvm_stats_debugfs_item debugfs_entries[] = { > > VCPU_STAT("halt_poll_success_ns", halt_poll_success_ns), > > VCPU_STAT("halt_poll_fail_ns", halt_poll_fail_ns), > > VCPU_STAT("nested_run", nested_run), > > + VCPU_STAT("yield_directed", yield_directed), > > This is ambiguous, it's not clear without looking at the code if it's counting > attempts or actual yields. > > > + VCPU_STAT("yield_directed_ignore", yield_directed_ignore), > > "ignored" also feels a bit misleading, as that implies KVM deliberately ignored > a valid request, whereas many of the failure paths are due to invalid requests > or errors of some kind. > > What about mirroring the halt poll stats, i.e. track "attempted" and "successful", > as opposed to "attempted" and "ignored/failed". And maybe switched directed > and yield? I.e. directed_yield_attempted and directed_yield_successful. Good suggestion. > > Alternatively, would it make sense to do s/directed/pv, or is that not worth the > potential risk of being wrong if a non-paravirt use case comes along? > > pv_yield_attempted > pv_yield_successful > > > VM_STAT("mmu_shadow_zapped", mmu_shadow_zapped), > > VM_STAT("mmu_pte_write", mmu_pte_write), > > VM_STAT("mmu_pde_zapped", mmu_pde_zapped), > > @@ -8211,21 +8213,33 @@ void kvm_apicv_init(struct kvm *kvm, bool enable) > > } > > EXPORT_SYMBOL_GPL(kvm_apicv_init); > > > > -static void kvm_sched_yield(struct kvm *kvm, unsigned long dest_id) > > +static void kvm_sched_yield(struct kvm_vcpu *vcpu, unsigned long dest_id) > > { > > struct kvm_vcpu *target = NULL; > > struct kvm_apic_map *map; > > > > + vcpu->stat.yield_directed++; > > + > > rcu_read_lock(); > > - map = rcu_dereference(kvm->arch.apic_map); > > + map = rcu_dereference(vcpu->kvm->arch.apic_map); > > > > if (likely(map) && dest_id <= map->max_apic_id && map->phys_map[dest_id]) > > target = map->phys_map[dest_id]->vcpu; > > > > rcu_read_unlock(); > > + if (!target) > > + goto no_yield; > > + > > + if (!READ_ONCE(target->ready)) > > I vote to keep these checks together. That'll also make the addition of the > "don't yield to self" check match the order of ready vs. self in kvm_vcpu_on_spin(). Do it in v2. Wanpeng