Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753838AbbHRSag (ORCPT ); Tue, 18 Aug 2015 14:30:36 -0400 Received: from mail-wi0-f175.google.com ([209.85.212.175]:33440 "EHLO mail-wi0-f175.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752500AbbHRSae (ORCPT ); Tue, 18 Aug 2015 14:30:34 -0400 Subject: Re: [PATCH v2 4/5] KVM: add KVM_USER_EXIT vcpu ioctl for userspace exit To: Paolo Bonzini , =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= , linux-kernel@vger.kernel.org References: <1438792381-19453-1-git-send-email-rkrcmar@redhat.com> <1438792381-19453-5-git-send-email-rkrcmar@redhat.com> <55D0F219.6020502@gmail.com> <55D1DE8F.4050806@redhat.com> Cc: kvm@vger.kernel.org From: Avi Kivity Message-ID: <55D379C2.9020608@gmail.com> Date: Tue, 18 Aug 2015 21:30:26 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.1.0 MIME-Version: 1.0 In-Reply-To: <55D1DE8F.4050806@redhat.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2514 Lines: 66 On 08/17/2015 04:15 PM, Paolo Bonzini wrote: > > On 16/08/2015 13:27, Avi Kivity wrote: >> On 08/05/2015 07:33 PM, Radim Krčmář wrote: >>> The guest can use KVM_USER_EXIT instead of a signal-based exiting to >>> userspace. Availability depends on KVM_CAP_USER_EXIT. >>> Only x86 is implemented so far. >>> >>> Signed-off-by: Radim Krčmář >>> --- >>> v2: >>> * use vcpu ioctl instead of vm one [4/5] >>> * shrink kvm_user_exit from 64 to 32 bytes [4/5] >>> >>> Documentation/virtual/kvm/api.txt | 30 ++++++++++++++++++++++++++++++ >>> arch/x86/kvm/x86.c | 24 ++++++++++++++++++++++++ >>> include/uapi/linux/kvm.h | 7 +++++++ >>> virt/kvm/kvm_main.c | 5 +++-- >>> 4 files changed, 64 insertions(+), 2 deletions(-) >>> >>> diff --git a/Documentation/virtual/kvm/api.txt >>> b/Documentation/virtual/kvm/api.txt >>> index 3c714d43a717..c5844f0b8e7c 100644 >>> --- a/Documentation/virtual/kvm/api.txt >>> +++ b/Documentation/virtual/kvm/api.txt >>> @@ -3020,6 +3020,36 @@ Returns: 0 on success, -1 on error >>> Queues an SMI on the thread's vcpu. >>> + >>> +4.97 KVM_USER_EXIT >>> + >>> +Capability: KVM_CAP_USER_EXIT >>> +Architectures: x86 >>> +Type: vcpu ioctl >>> +Parameters: struct kvm_user_exit (in) >>> +Returns: 0 on success, >>> + -EFAULT if the parameter couldn't be read, >>> + -EINVAL if 'reserved' is not zeroed, >>> + >>> +struct kvm_user_exit { >>> + __u8 reserved[32]; >>> +}; >>> + >>> +The ioctl is asynchronous to VCPU execution and can be issued from >>> all threads. >>> +format >> This breaks an invariant of vcpu ioctls, and also forces a cacheline >> bounce when we fget() the vcpu fd. > KVM_USER_EXIT in practice should be so rare (at least with in-kernel > LAPIC) that I don't think this matters. KVM_USER_EXIT is relatively > uninteresting, it only exists to provide an alternative to signals that > doesn't require expensive atomics on each and every KVM_RUN. :( Ah, so the idea is to remove the cost of changing the signal mask? Yes, although it looks like a thread-local operation, it takes a process-wide lock. I expect most user wakeups are via irqfd, so indeed the performance of KVM_USER_EXIT is uninteresting. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/