Received: by 10.223.164.202 with SMTP id h10csp1903318wrb; Sat, 11 Nov 2017 19:20:07 -0800 (PST) X-Google-Smtp-Source: AGs4zMZ+jBv8kJ2jBGJbCDnXTIwImuOCZ5KTG8q7oRJehnJ++O6D/O0WQ4GsmFIysf4Zei/Bzwkz X-Received: by 10.84.234.199 with SMTP id i7mr4993472plt.15.1510456807285; Sat, 11 Nov 2017 19:20:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1510456807; cv=none; d=google.com; s=arc-20160816; b=tQi2D/7qxc3ccwxkv7Wps+ghOF+vFNx1V6AqvV1H88y9+MC1Fh9QkcXxEAzDBWiW/L ixn9Cub39LTnhcYuPNoVV9c3acF8u/jIilmLT8s+ceIhd3p1lLFbPRND7U0Wu3gC7wAs D622iimGI72mWZRKnJBa3BAfBhR8wBCMOIl+0DGqgGA4RfjE/R90EKq4SpGZImgkQgY1 fX+wZgdLGWoHfo9NdNYMYM6J+Tq2YPGa/XEBuob8RT2zq2U93DNDc2uSfFrKav87JA0Q ike+XX1MPBVSyK2i+KXDI49FiJP73NkSBNNTTL8PO4qXlquOwvCwK3d475j5Sl7Vtf28 7m0Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=L2kJM8hS1I9E+4Ru193T7zZeqg6Jcv9xr7R8WohVj48=; b=qgyY0CDxLd5tuZAyVaPjWoiNunwpbWFkI8sMgedMq41aMWERkpFldZpDVpDbzaOxyo GoCv4GR9fd/nDIXFX0qHIHEcA3Xhr8mxn6q1e39IUjLVPqj4erP7/gjttMpgjIJ2y9+V WWGdzhaQWQ7wjRjU3pbUXb0QsHAxfGEvvK3JkjvLYarn5r8ZCcBecFzjYcMAf0mqXu32 JEeN+Ilct7/UGLb9YuBA0XAH3nQbE5jSHH2ktB2Pi5XVUhJ6Szkp5UHo5m4WFh0vaQ86 AT0VVDHBmzyNowZ4zH0Z3fdGe0NH7x/vgqYR7girPdn1aef1eqy4x/Do4bABgmF8Py/4 nqog== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=eKSdXcer; 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 j16si12832929pli.353.2017.11.11.19.19.47; Sat, 11 Nov 2017 19:20:07 -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=eKSdXcer; 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 S1752821AbdKLDSt (ORCPT + 86 others); Sat, 11 Nov 2017 22:18:49 -0500 Received: from mail-pg0-f67.google.com ([74.125.83.67]:51580 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752373AbdKLDSq (ORCPT ); Sat, 11 Nov 2017 22:18:46 -0500 Received: by mail-pg0-f67.google.com with SMTP id p9so10236432pgc.8; Sat, 11 Nov 2017 19:18:46 -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; bh=L2kJM8hS1I9E+4Ru193T7zZeqg6Jcv9xr7R8WohVj48=; b=eKSdXcervNAMia5UmspFz2ayW94UBj9Df4pF38Ynpw90jcXtB2cvgV2EWPmom6irol F1SM0snl/iGjmtpQgXHFSpGaAYnzOs9bhvv3D6IHKGDi6pqNU0zBrXCrI/1qiOPhZy+/ ajs69XN+YfhIZp9m4OhTulFBD3tcXG/H7M+oEKSL6VDTbbCo0bkHqTcwHZHgIEBsM9o8 /HB+whg6/hGrDygrqfcFaDPVE/KVdHqj9BTpqeWav7kC94LOqFsx4KNk1fMU1OS+JDkw oSlpY1PXA6PhZBJea81yKudXQUcTJD+MXuWZ+cPkJd+I47vRJgPzT+qmmgSKca1JDiqs b1Zg== 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; bh=L2kJM8hS1I9E+4Ru193T7zZeqg6Jcv9xr7R8WohVj48=; b=bHBXuZ34whmlY+ub71aww708vIEDolJLXQ3aRROefa/DkA3iljzZMkGBNakt1A9oZx bk7v/vKw6Yl49WD4x36Ci1TNRz8ScmjuoRsV1lIVik93r35DtXTQDNwBVu4aRKApYscV DpCzRkWxUl7X4WcBR6kf+Lpd6wKs0jYur08UQd4ywGKa5nLjMIPLv35T9fy7LhEJhDYj wIdjHm5F9Dzha03wheORadi6Y/mMxSqSbUfn6TlWMYL+IIjvMKcus3a2bTV5dZ+AzdLw xRW8eCBZYVkVe+VWLeMpJtV+dJjK+ItQdlOzsmGBqDghPZ9kn3o4v0ShKJz4FjFucZeN 71Gw== X-Gm-Message-State: AJaThX4+osjznmUB2ZQtiEhc9IeUf0paZfk+1bLSLrchOuBYy0CWCvq4 JDZ1+c8wUQcmWScpjer/uX9lkg== X-Received: by 10.98.65.11 with SMTP id o11mr5443776pfa.86.1510456726054; Sat, 11 Nov 2017 19:18:46 -0800 (PST) Received: from localhost ([223.72.77.190]) by smtp.gmail.com with ESMTPSA id z17sm25691668pfd.124.2017.11.11.19.18.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 11 Nov 2017 19:18:45 -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 v4 0/4] KVM: X86: Paravirt remote TLB flush Date: Sat, 11 Nov 2017 19:18:37 -0800 Message-Id: <1510456721-3630-1-git-send-email-wanpeng.li@hotmail.com> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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. Idea was discussed here: https://lkml.org/lkml/2012/2/20/157 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. In addition, thanks for commit 9e52fc2b50d ("x86/mm: Enable RCU based page table freeing (CONFIG_HAVE_RCU_TABLE_FREE=y)") 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% Note: The patchset is rebased against "locking/qspinlock/x86: Avoid test-and-set when PV_DEDICATED is set" v3 v3 -> v4: * use READ_ONCE() * use try_cmpxchg instead of cmpxchg * add {} to if * no FLUSH flags to preserve during set_preempted * "KVM: X86" prefix to patch subject v2 -> v3: * percpu cpumask v1 -> v2: * a new CPUID feature bit * fix cmpxchg check * use kvm_vcpu_flush_tlb() to get the statistics right * just OR the KVM_VCPU_PREEMPTED in kvm_steal_time_set_preempted * add a new bool argument to kvm_x86_ops->tlb_flush * __cpumask_clear_cpu() instead of cpumask_clear_cpu() * not put cpumask_t on stack * rebase the patchset against "locking/qspinlock/x86: Avoid test-and-set when PV_DEDICATED is set" v3 Wanpeng Li (4): KVM: X86: Add vCPU running/preempted state KVM: X86: Add paravirt remote TLB flush KVM: X86: introduce invalidate_gpa argument to tlb flush KVM: X86: Add flush_on_enter before guest enter Documentation/virtual/kvm/cpuid.txt | 4 ++++ arch/x86/include/asm/kvm_host.h | 2 +- arch/x86/include/uapi/asm/kvm_para.h | 6 +++++ arch/x86/kernel/kvm.c | 46 ++++++++++++++++++++++++++++++++++-- arch/x86/kvm/cpuid.c | 3 ++- arch/x86/kvm/svm.c | 14 +++++------ arch/x86/kvm/vmx.c | 21 ++++++++-------- arch/x86/kvm/x86.c | 25 +++++++++++++------- 8 files changed, 88 insertions(+), 30 deletions(-) -- 2.7.4 From 1583672158120378805@xxx Fri Nov 10 09:51:02 +0000 2017 X-GM-THRID: 1583661793844982516 X-Gmail-Labels: Inbox,Category Forums,HistoricalUnread