From: Paolo Bonzini <pbonzini@redhat.com>
To: "Charls D. Chap" <chapcharls@gmail.com>
Cc: kvm@vger.kernel.org
Subject: Re: tlb flush after each vm_exit, also virtual interrupts injection
Date: Tue, 2 Aug 2016 13:33:39 -0400 (EDT) [thread overview]
Message-ID: <346384966.13112634.1470159219285.JavaMail.zimbra@redhat.com> (raw)
In-Reply-To: <CAA6eV_RephDGuG8ozn-Bandi-2L4Bjg061599vF_9vUYBkHFAg@mail.gmail.com>
> 1) I've seen some slides, back in 08, in which it is described
> that the use of VPID, will solve the problem of TLB flush after each VM_EXIT.
> But, i see from the code that it actually does a flush after a VM_EXIT.
>
> Obviously, i am wrong. So I need some help,
> Where to look, i mean which lines of code, in order to figure out, what is
> happening with TLB flush and VM_EXITS
You are saying that you "see from the code that it actually does a flush
after a VM_EXIT". Where is this?
> 2) system call from ing 0 (non-root), to ring 0(root)
> Could guest os, do a system call to host os?
No. You'd need a program running on the host, and a channel between
this program and a guest (such as a socket or a serial port).
> 3) what is the mechanism of virtual interrupt injection
> What is the mechanism that is used for a virtual interrupt injection,
> in full virtualization?
>
> Host injects an interrupt to guest, HOW? eg. hardware interrupt?
> to which point of guest? guest complete_bh?
Interrupt injections happens through ioctls on the KVM file descriptors
(the CPU file descriptor for KVM_INTERRUPT, the VM file descriptors for others).
When the LAPIC is emulated by userspace (not the common case) this is
done with the KVM_INTERRUPT ioctl. When the LAPIC is emulated in kernel,
there are various mechanisms.
ioctl when? interrupt kind
------------------------------------------------------------------------
KVM_INTERRUPT i8259 in userspace EXTINT
KVM_SET_GSI_ROUTING (always) IOAPIC
KVM_SIGNAL_MSI (always) MSI
KVM_SET_GSI_ROUTING (always) MSI
KVM_IRQFD any that can use KVM_SET_GSI_ROUTING
After KVM_SET_GSI_ROUTING, the host invokes another ioctl on the VM
file descriptor (either KVM_IRQ_LINE or KVM_IRQ_LINE_STATUS) in order
to trigger the interrupt. In QEMU this corresponds to qemu_irq_raise,
pci_set_irq or msi_notify.
After KVM_IRQFD, the host writes to an eventfd in order to trigger the
interrupt. In QEMU this corresponds to event_notifier_set.
(For MSI, KVM_SIGNAL_MSI is preferred to KVM_IRQ_LINE/KVM_IRQ_LINE_STATUS
because it's faster, but they provide the same functionality).
> 4)
> I've seen from bibliography, that KVM operates in protection ring -1.
> What doe it mean? Is there HW implementation for that ring?
>
> Why not in ring 0?
Ring -1 is not a particularly good name. The right name is that KVM
operates in VMX ring 0 root mode, while the guest operates in VMX
non-root mode (which can be any of ring 0-1-2-3 depending on the
current privilege level of the guest).
Paolo
next prev parent reply other threads:[~2016-08-02 19:03 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-27 10:19 tlb flush after each vm_exit, also virtual interrupts injection charls chap
2016-07-28 8:20 ` Fwd: " Charls D. Chap
2016-08-02 17:33 ` Paolo Bonzini [this message]
2016-08-03 14:43 ` Charls D. Chap
2016-08-03 15:56 ` Paolo Bonzini
2016-08-05 11:29 ` Charls D. Chap
2016-08-05 11:59 ` Paolo Bonzini
2016-08-25 9:12 ` Wanpeng Li
2016-08-29 9:55 ` Paolo Bonzini
2016-08-29 10:22 ` Wanpeng Li
2016-08-29 16:39 ` Paolo Bonzini
2016-08-30 0:39 ` Wanpeng Li
2016-07-28 13:25 ` Radim Krčmář
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=346384966.13112634.1470159219285.JavaMail.zimbra@redhat.com \
--to=pbonzini@redhat.com \
--cc=chapcharls@gmail.com \
--cc=kvm@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.