Received: by 10.223.164.202 with SMTP id h10csp2709198wrb; Sun, 12 Nov 2017 16:35:54 -0800 (PST) X-Google-Smtp-Source: AGs4zMYJtjh+wM0D+VN+mjYjH1ct3FYBMdVkvo2ke2KFz6WhWO62qhhSoSRX8Vpte5dcCYfRhSDh X-Received: by 10.84.132.65 with SMTP id 59mr5424716ple.146.1510533354790; Sun, 12 Nov 2017 16:35:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1510533354; cv=none; d=google.com; s=arc-20160816; b=Y+WraANfYTvw1BPZdHpqDn1ac+RyJvhQYt3PkXMeSIIQYix8xpUCHIPzF4HDvIpHFc ZsNmzBPAw1WhwGuLBPESWONkrp2uAMDicXBBlqRMIxCT0vaZgCxQ1kdAr1Pm96qdrzMf nG8ZS10OkaNFfdb1hSi1TdJzKKPsTRiy5W4cXkOb3WzBnhRzz4FT9jvkyih2xD2Tw9IJ 8DEopf9PxOJPlOL3iv/GhLN+tgNX5am1Ak4m/J2ec0a2xrkxrdVbmluj4UBOaN3u6tu+ G0LWW2zoIUmDlB8UGPwA8oOOrMX9hgvPaIBO84Xi/OJZoxwWeQllI1nL3di6EZR+OWdZ fuvQ== 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=06fpjdaRVg2StxEuSU5o5tY5GrLT7110D7C+ZfaN5VnPS8pDnldvzsV+Z7NsFdPDE/ 3+D7f9ZZ8M02/cRSjEK+41/6ws92yjL4rHDCdwTkZwQylMp6CLSaSL3/dB4Ff3Osh2g1 kCX9HQip2ZxLv36SGzy5kezM/E5kXY3aVXMQrEHxryLG9S9STMIUlZZVUAQMfD1349pR aPhYyVqAzu3YM/TgzVSNSDQqUgstE3Y7CP1dP6m4aqqqZJ5T/7v5CZXpCWDes/tfVEye kAPZu4TbjhhOyWTJrrJTjEgUgD15WoOihRus25g4B2d9IiwfeELIYKStdYcwxwMA7W2T nw7w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=JkePV9sn; 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 i8si12731064pgr.690.2017.11.12.16.35.42; Sun, 12 Nov 2017 16:35:54 -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=JkePV9sn; 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 S1751242AbdKMAdc (ORCPT + 87 others); Sun, 12 Nov 2017 19:33:32 -0500 Received: from mail-pg0-f67.google.com ([74.125.83.67]:54593 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750954AbdKMAda (ORCPT ); Sun, 12 Nov 2017 19:33:30 -0500 Received: by mail-pg0-f67.google.com with SMTP id c123so3432345pga.11; Sun, 12 Nov 2017 16:33:29 -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=JkePV9snilgfh8Z1w8G280Guie8s8fT9+f0m3Yj49O52LTukzajIGrOvHfboXPOejV iNCbfw0+256mvy0WdArwtdSOGYoVVzlQolRv6GvFRwlTKmvGvtj8koH1meARxxaZWpa5 0tExFoSf6Lb48Leja+w/KUZ/fj5TZ/sVSytQRWpL2mzUx5sp7aeyeoASSNRyy9bZMnoN EdCt+jcxrLJRbP8D40RMuZZBrAAM+9n4Fr2sBjmtQwcp9np+peKv2fZl4zpENumuZqn6 /udf40fOmpqk+0VZ4h17AQuh8kIU37cuvm5QtMqT30RssfDYP8tTBvprS30ux+scwuXn eeSw== 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=beNiAf+Aw4yLPmdwV+PH2Y9XnESdTFH5RlybqiHk9xbjTAh2ZMGmg8xqpSy73Yeb1t CIaGlxrmDzKH6G1rEaOi+2T9OSoX/Z4dwlLtaz5brAqp7djDSQ/KUG0YMVEYzxS+MdL9 q8I5Fl/aBAspoRPyie++WhwkqbR6fbBXKtZaEpjZxn5XJmYHSN38pRP1DhqHa+YPvzoY O9NJNn6fe+3GwU2Jbx55WZKiuZ15vjoQ0vu0BYj0w47BOX2xbNU0yJ6nB+NOSLbL7mFC NEfDeuRmOfv2PHHrm2g92z/jCZPaZtQ6Z6z5JijA9FPlQhhuifrv4tUiimlMvv6yvP4a w+WA== X-Gm-Message-State: AJaThX75sXxuOWVfHiReK1p+7nNYQKVk540ed73a3+wltekHFIPCX+1+ 32cRxBrwFXzf/HAM/dtRBbY3zw== X-Received: by 10.99.125.92 with SMTP id m28mr2177934pgn.142.1510533209496; Sun, 12 Nov 2017 16:33:29 -0800 (PST) Received: from localhost ([203.205.141.123]) by smtp.gmail.com with ESMTPSA id f24sm31445036pfk.183.2017.11.12.16.33.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 12 Nov 2017 16:33:28 -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?= , Peter Zijlstra , Wanpeng Li Subject: [PATCH v4 0/4] KVM: X86: Paravirt remote TLB flush Date: Sun, 12 Nov 2017 16:33:22 -0800 Message-Id: <1510533206-9821-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 1584248786840476839@xxx Thu Nov 16 18:36:18 +0000 2017 X-GM-THRID: 1583995865061497644 X-Gmail-Labels: Inbox,Category Forums,HistoricalUnread