From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752303AbdLHIkV (ORCPT ); Fri, 8 Dec 2017 03:40:21 -0500 Received: from mail-ot0-f195.google.com ([74.125.82.195]:41179 "EHLO mail-ot0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750993AbdLHIkT (ORCPT ); Fri, 8 Dec 2017 03:40:19 -0500 X-Google-Smtp-Source: AGs4zMaycBrETb297cDBQETHycvBVqkeNULqfvPaQGwnb5poFOM/tPFHoenBcIm6N+oxjVjIlBnGBw== From: Quan Xu X-Google-Original-From: Quan Xu To: pbonzini@redhat.com, rkrcmar@redhat.com Cc: yang.zhang.wz@gmail.com, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Ben Luo Subject: [PATCH RFC 0/7] kvm pvtimer Date: Fri, 8 Dec 2017 16:39:43 +0800 Message-Id: <1512722390-3654-1-git-send-email-quan.xu0@gmail.com> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Ben Luo This patchset introduces a new paravirtualized mechanism to reduce VM-exit caused by guest timer accessing. In general, KVM guest programs tsc-deadline timestamp to MSR_IA32_TSC_DEADLINE MSR. This will cause a VM-exit, and then KVM handles this timer for guest. Also kvm always registers timer on the CPU which vCPU was running on. Even though vCPU thread is rescheduled to another CPU, the timer will be migrated to the target CPU as well. When timer expired, timer interrupt could make guest-mode vCPU VM-exit on this CPU. When pvtimer is enabled: - The tsc-deadline timestamp is mostly recorded in share page with less VM-exit. We Introduce a periodically working kthread to scan share page and synchronize timer setting for guest on a dedicated CPU. - Since the working kthread scans periodically, some of the timer events may be lost or delayed. We have to program these tsc-deadline timestamps to MSR_IA32_TSC_DEADLINE as normal, which will cause VM-exit and KVM will signal the working thread through IPI to program timer, instread of registering on current CPU. - Timer interrupt will be delivered by posted interrupt mechanism to vCPUs with less VM-exit. Ben Luo (7): kvm: x86: emulate MSR_KVM_PV_TIMER_EN MSR kvm: x86: add a function to exchange value KVM: timer: synchronize tsc-deadline timestamp for guest KVM: timer: program timer to a dedicated CPU KVM: timer: ignore timer migration if pvtimer is enabled Doc/KVM: introduce a new cpuid bit for kvm pvtimer kvm: guest: reprogram guest timer Documentation/virtual/kvm/cpuid.txt | 4 + arch/x86/include/asm/kvm_host.h | 5 + arch/x86/include/asm/kvm_para.h | 9 ++ arch/x86/include/uapi/asm/kvm_para.h | 7 ++ arch/x86/kernel/apic/apic.c | 9 +- arch/x86/kernel/kvm.c | 38 ++++++++ arch/x86/kvm/cpuid.c | 1 + arch/x86/kvm/lapic.c | 170 +++++++++++++++++++++++++++++++++- arch/x86/kvm/lapic.h | 11 ++ arch/x86/kvm/x86.c | 15 +++- include/linux/kvm_host.h | 3 + virt/kvm/kvm_main.c | 42 +++++++++ 12 files changed, 308 insertions(+), 6 deletions(-)