Received: by 10.223.164.202 with SMTP id h10csp351358wrb; Wed, 8 Nov 2017 18:04:16 -0800 (PST) X-Google-Smtp-Source: ABhQp+RKYYRpQTHG942+rnTAopiRB89oRnHdzgQYHbGmKK6Djd9aGdXsQzquO6PXXE5dnawaOJIJ X-Received: by 10.99.51.193 with SMTP id z184mr2226585pgz.285.1510193056212; Wed, 08 Nov 2017 18:04:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1510193056; cv=none; d=google.com; s=arc-20160816; b=Dqu1ULi0gy/iiTPnaaabwe1HEWrZp3+xxQunP9hWVGffJ6wkuSei/BAJNDS10Ttydo K+RAmn22faOZi1DEMBul5ulh+yzIchBtYyByl4lCQSEnCo9d48jQXlks7TWc7S6VF2RN JYty30fyXEu+yDDaMzytpIclKFgIwQv082te5/Ulf9dAaIp2IkRS94LaLeyzG9gYmnmg tQwvX04/QZ+eDig7LGkUEJ7wJXdlf6gE0RzY/6tVG14amTpxq753j+RtFtkIxD4+n1wr 1amxT4V9meSU2VOEz+Tv0uemS8IATX13Y9BmP1a50Il1rOg+/+ZbJTWetZq9xrEvvFmC NKaw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=hOaj+r30mxyu4GJK6WMd/pslc8zdO2agY+rvmdwpbZg=; b=Dy6WHTj+r/cZhR5MS67aaCzqcmBWXXlONja2F2rUJjGcxtCOgIXguRAGGPYFt84y8B P0ldMaPw+eettqwEp5g7m7nYOCuEeKq1k6SPOe1u40Rr0jR8+YEAlS0tzekK0X9VVvw0 NjWuBQ2yd45ZO6CBhmiX3dRoKs2o+vGESqSedEEuZaZTEyNWl3cwOeL24F7SzRrpNSKV MNlFtNI7loIMw/h9jBnMSuzcIchH5SgOAMZAdt7wkoDTPNPkyOiY2oILOo5ycI/xGRCh JjOGA6ejd1wQnMh35FsTBxWJIq0aWOiuniBi32WeUWmh+qYqU3X2NTSuzr8GHOCg5unV a4Og== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=qPsKyESq; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s14si4905879pgr.330.2017.11.08.18.04.04; Wed, 08 Nov 2017 18:04:16 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=qPsKyESq; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752237AbdKICC2 (ORCPT + 82 others); Wed, 8 Nov 2017 21:02:28 -0500 Received: from mail-pg0-f66.google.com ([74.125.83.66]:45995 "EHLO mail-pg0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751930AbdKICCW (ORCPT ); Wed, 8 Nov 2017 21:02:22 -0500 Received: by mail-pg0-f66.google.com with SMTP id l19so889493pgo.2; Wed, 08 Nov 2017 18:02:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=hOaj+r30mxyu4GJK6WMd/pslc8zdO2agY+rvmdwpbZg=; b=qPsKyESq5EK7A++gU5lO/3UnRv/RC00bN1qXzlqE1bx2k2Fq6M0F1Zv6ezFT9YbXNx qd3/M+EDxnhZvPH40aKEUE75RX2CcDkmRvTGyGYtfbpeVUhMY6AFj3NtQDx0T2uMiKYB 2jK8EzZ13//9yvFfdcTHUlMiGrWBbc6o0+oCRfxWGAk5YnQ8MoIO+I7KZeNoM70ywa/X w8r6rN5bDakW5I7vX4osAoauYeQyEfE4yn7+Ye8HVmTy991J36TiC9bgMurjTd/ZuVJn aKH/FEz3mcfohPT7aX0rYGhkG5INbb+tt4H5YX9Vzos1p7eSjIeiyLJWsOq9/3ety7c2 YoFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=hOaj+r30mxyu4GJK6WMd/pslc8zdO2agY+rvmdwpbZg=; b=qM6L07/zPiHL704JS5Jn3PwiLyvzphdMx91mIKe9y2wJSv1Dh20ZUmgENmHe8+moLG iMA5eY+D65wTBSLRph9QAp/QnuvIx2lCVkv9FAVOjmo/oi6ZO+9prC2g379TDU0FOwyT Ecf1zzLKxPs/Y8IUMVMTj0oeoRbKoK70SgIJz1AiMgxe2o1cgzjWBPx7pJyqHB4T4Iqr pU9xVuvuCiqQ9jBkJItJiCljSBECQ4l5gx4NostPo4GQ25waU5NgP/B7bRmKxKNEEN8y jI18pnjzfKLPxIhM1hf7mmt1RBJCrX8a6cEpvbMwo2WYrIUDdav/Mb7onyNmXBFq/c9l cn2w== X-Gm-Message-State: AJaThX4BGzn/bUfDwrmT/XwKitZ9pFCjCeVkJJTj+FnRmj0WDYQK9KTE 9vDodjbIADpDrDBOWSV1006VHQ== X-Received: by 10.99.116.89 with SMTP id e25mr2275983pgn.218.1510192941925; Wed, 08 Nov 2017 18:02:21 -0800 (PST) Received: from localhost ([203.205.141.123]) by smtp.gmail.com with ESMTPSA id b9sm8106716pgu.20.2017.11.08.18.02.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 08 Nov 2017 18:02:21 -0800 (PST) From: Wanpeng Li X-Google-Original-From: Wanpeng Li To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: Paolo Bonzini , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Wanpeng Li Subject: [PATCH RESEND 2/3] KVM: Add paravirt remote TLB flush Date: Wed, 8 Nov 2017 18:02:13 -0800 Message-Id: <1510192934-5369-3-git-send-email-wanpeng.li@hotmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1510192934-5369-1-git-send-email-wanpeng.li@hotmail.com> References: <1510192934-5369-1-git-send-email-wanpeng.li@hotmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Wanpeng Li Remote flushing api's does a busy wait which is fine in bare-metal scenario. But with-in the guest, the vcpus might have been pre-empted or blocked. In this scenario, the initator vcpu would end up busy-waiting for a long amount of time. This patch set implements para-virt flush tlbs making sure that it does not wait for vcpus that are sleeping. And all the sleeping vcpus flush the tlb on guest enter. The best result is achieved when we're overcommiting the host by running multiple vCPUs on each pCPU. In this case PV tlb flush avoids touching vCPUs which are not scheduled and avoid the wait on the main CPU. Test on a Haswell i7 desktop 4 cores (2HT), so 8 pCPUs, running ebizzy in one linux guest. ebizzy -M vanilla optimized boost 8 vCPUs 10152 10083 -0.68% 16 vCPUs 1224 4866 297.5% 24 vCPUs 1109 3871 249% 32 vCPUs 1025 3375 229.3% Cc: Paolo Bonzini Cc: Radim Krčmář Signed-off-by: Wanpeng Li --- arch/x86/include/uapi/asm/kvm_para.h | 1 + arch/x86/kernel/kvm.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/arch/x86/include/uapi/asm/kvm_para.h b/arch/x86/include/uapi/asm/kvm_para.h index ff23ce9..189e354 100644 --- a/arch/x86/include/uapi/asm/kvm_para.h +++ b/arch/x86/include/uapi/asm/kvm_para.h @@ -52,6 +52,7 @@ struct kvm_steal_time { #define KVM_VCPU_NOT_PREEMPTED (0 << 0) #define KVM_VCPU_PREEMPTED (1 << 0) +#define KVM_VCPU_SHOULD_FLUSH (1 << 1) #define KVM_CLOCK_PAIRING_WALLCLOCK 0 struct kvm_clock_pairing { diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index 1b1b641..2e2f3ae 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -465,6 +465,33 @@ static void __init kvm_apf_trap_init(void) update_intr_gate(X86_TRAP_PF, async_page_fault); } +static void kvm_flush_tlb_others(const struct cpumask *cpumask, + const struct flush_tlb_info *info) +{ + u8 state; + int cpu; + struct kvm_steal_time *src; + cpumask_t flushmask; + + + cpumask_copy(&flushmask, cpumask); + /* + * We have to call flush only on online vCPUs. And + * queue flush_on_enter for pre-empted vCPUs + */ + for_each_cpu(cpu, cpumask) { + src = &per_cpu(steal_time, cpu); + state = src->preempted; + if ((state & KVM_VCPU_PREEMPTED)) { + if (cmpxchg(&src->preempted, state, state | 1 << + KVM_VCPU_SHOULD_FLUSH)) + cpumask_clear_cpu(cpu, &flushmask); + } + } + + native_flush_tlb_others(&flushmask, info); +} + void __init kvm_guest_init(void) { int i; @@ -484,6 +511,8 @@ void __init kvm_guest_init(void) pv_time_ops.steal_clock = kvm_steal_clock; } + pv_mmu_ops.flush_tlb_others = kvm_flush_tlb_others; + if (kvm_para_has_feature(KVM_FEATURE_PV_EOI)) apic_set_eoi_write(kvm_guest_apic_eoi_write); -- 2.7.4 From 1583551558691477552@xxx Thu Nov 09 01:54:10 +0000 2017 X-GM-THRID: 1583551558691477552 X-Gmail-Labels: Inbox,Category Forums,HistoricalUnread