03 May, 2007

17 commits


04 Mar, 2007

3 commits

  • Signed-off-by: Avi Kivity

    Avi Kivity
     
  • Allocate a distinct inode for every vcpu in a VM. This has the following
    benefits:

    - the filp cachelines are no longer bounced when f_count is incremented on
    every ioctl()
    - the API and internal code are distinctly clearer; for example, on the
    KVM_GET_REGS ioctl, there is no need to copy the vcpu number from
    userspace and then copy the registers back; the vcpu identity is derived
    from the fd used to make the call

    Right now the performance benefits are completely theoretical since (a) we
    don't support more than one vcpu per VM and (b) virtualization hardware
    inefficiencies completely everwhelm any cacheline bouncing effects. But
    both of these will change, and we need to prepare the API today.

    Signed-off-by: Avi Kivity

    Avi Kivity
     
  • This avoids having filp->f_op and the corresponding inode->i_fop different,
    which is a little unorthodox.

    The ioctl list is split into two: global kvm ioctls and per-vm ioctls. A new
    ioctl, KVM_CREATE_VM, is used to create VMs and return the VM fd.

    Signed-off-by: Avi Kivity

    Avi Kivity
     

13 Feb, 2007

2 commits


27 Jan, 2007

1 commit

  • This patch implements forwarding of SHUTDOWN intercepts from the guest on to
    userspace on AMD SVM. A SHUTDOWN event occurs when the guest produces a
    triple fault (e.g. on reboot). This also fixes the bug that a guest reboot
    actually causes a host reboot under some circumstances.

    Signed-off-by: Joerg Roedel
    Signed-off-by: Avi Kivity
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Joerg Roedel
     

06 Jan, 2007

1 commit

  • The current interrupt injection mechanism might delay an interrupt under
    the following circumstances:

    - if injection fails because the guest is not interruptible (rflags.IF clear,
    or after a 'mov ss' or 'sti' instruction). Userspace can check rflags,
    but the other cases or not testable under the current API.
    - if injection fails because of a fault during delivery. This probably
    never happens under normal guests.
    - if injection fails due to a physical interrupt causing a vmexit so that
    it can be handled by the host.

    In all cases the guest proceeds without processing the interrupt, reducing
    the interactive feel and interrupt throughput of the guest.

    This patch fixes the situation by allowing userspace to request an exit
    when the 'interrupt window' opens, so that it can re-inject the interrupt
    at the right time. Guest interactivity is very visibly improved.

    Signed-off-by: Dor Laor
    Signed-off-by: Avi Kivity
    Acked-by: Ingo Molnar
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Dor Laor
     

23 Dec, 2006

1 commit


11 Dec, 2006

1 commit

  • web site: http://kvm.sourceforge.net

    mailing list: kvm-devel@lists.sourceforge.net
    (http://lists.sourceforge.net/lists/listinfo/kvm-devel)

    The following patchset adds a driver for Intel's hardware virtualization
    extensions to the x86 architecture. The driver adds a character device
    (/dev/kvm) that exposes the virtualization capabilities to userspace. Using
    this driver, a process can run a virtual machine (a "guest") in a fully
    virtualized PC containing its own virtual hard disks, network adapters, and
    display.

    Using this driver, one can start multiple virtual machines on a host.

    Each virtual machine is a process on the host; a virtual cpu is a thread in
    that process. kill(1), nice(1), top(1) work as expected. In effect, the
    driver adds a third execution mode to the existing two: we now have kernel
    mode, user mode, and guest mode. Guest mode has its own address space mapping
    guest physical memory (which is accessible to user mode by mmap()ing
    /dev/kvm). Guest mode has no access to any I/O devices; any such access is
    intercepted and directed to user mode for emulation.

    The driver supports i386 and x86_64 hosts and guests. All combinations are
    allowed except x86_64 guest on i386 host. For i386 guests and hosts, both pae
    and non-pae paging modes are supported.

    SMP hosts and UP guests are supported. At the moment only Intel
    hardware is supported, but AMD virtualization support is being worked on.

    Performance currently is non-stellar due to the naive implementation of the
    mmu virtualization, which throws away most of the shadow page table entries
    every context switch. We plan to address this in two ways:

    - cache shadow page tables across tlb flushes
    - wait until AMD and Intel release processors with nested page tables

    Currently a virtual desktop is responsive but consumes a lot of CPU. Under
    Windows I tried playing pinball and watching a few flash movies; with a recent
    CPU one can hardly feel the virtualization. Linux/X is slower, probably due
    to X being in a separate process.

    In addition to the driver, you need a slightly modified qemu to provide I/O
    device emulation and the BIOS.

    Caveats (akpm: might no longer be true):

    - The Windows install currently bluescreens due to a problem with the
    virtual APIC. We are working on a fix. A temporary workaround is to
    use an existing image or install through qemu
    - Windows 64-bit does not work. That's also true for qemu, so it's
    probably a problem with the device model.

    [bero@arklinux.org: build fix]
    [simon.kagstrom@bth.se: build fix, other fixes]
    [uril@qumranet.com: KVM: Expose interrupt bitmap]
    [akpm@osdl.org: i386 build fix]
    [mingo@elte.hu: i386 fixes]
    [rdreier@cisco.com: add log levels to all printks]
    [randy.dunlap@oracle.com: Fix sparse NULL and C99 struct init warnings]
    [anthony@codemonkey.ws: KVM: AMD SVM: 32-bit host support]
    Signed-off-by: Yaniv Kamay
    Signed-off-by: Avi Kivity
    Cc: Simon Kagstrom
    Cc: Bernhard Rosenkraenzer
    Signed-off-by: Uri Lublin
    Cc: Ingo Molnar
    Cc: Roland Dreier
    Signed-off-by: Randy Dunlap
    Signed-off-by: Anthony Liguori
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Avi Kivity