TODO: Difference between revisions

From KVM
No edit summary
(update TODO)
Line 3: Line 3:
The following items need some love. Please post to the list if you are interested in helping out:  
The following items need some love. Please post to the list if you are interested in helping out:  


* Real mode support: VT support for real mode is terrible, so we need to do it in software. This means extending the x86 emulator (x86_emulate.c) to handle more instructions, and changing the execution loop to call the emulator for real mode.  
* Real mode support: VT support for real mode is terrible, so we need to do it in software. This means extending the x86 emulator (x86_emulate.c) to handle more instructions, and changing the execution loop to call the emulator for real mode (in progress).
* Move the apic/ioapic/pic/pit emulation into the kernel.  This will simplify in-kernel paravirtualized devices (as there is no need to exit to userspace to inject an interrupt) and guest SMP.  Some bitrotted code already exists.
* Move the apic/ioapic/pic/pit emulation into the kernel.  This will simplify in-kernel paravirtualized devices (as there is no need to exit to userspace to inject an interrupt) and guest SMP (in progress).
* Drop the preemption counter while doing mmu stuff, and turn kvm->lock into a mutex.
* Drop the preemption counter while doing mmu stuff, and turn kvm->lock into a mutex.
** Even better, hook the state switch to the scheduler, and do away with disabling preemption completely.
** Even better, hook the state switch to the scheduler, and do away with disabling preemption completely (in progress).
* Emulate the architectural performance monitor counters/msrs, for Linux nmi watchdog support.
* Emulate the architectural performance monitor counters/msrs, for Linux nmi watchdog support.


The following smaller scale tasks can be a nice entry point to someone wishing to get involved:  
The following smaller scale tasks can be a nice entry point to someone wishing to get involved:  


* Enforce the virtual time stamp counter monotonicity even when a vcpu is migrated to another physical cpu. (in progress, Leonard Norrgård)
* Enforce the virtual time stamp counter monotonicity even when a vcpu is migrated to another physical cpu. (done for AMD, in progress for Intel)
* Trap #UD and emulate sysenter/syscall/sysret/sysexit.  These instructions don't exist on all cpus in all modes, so they hinder cross-vendor migration
* Trap #UD and emulate sysenter/syscall/sysret/sysexit.  These instructions don't exist on all cpus in all modes, so they hinder cross-vendor migration
* Consolidate the various functions that read and write guest memory.  There is some duplication there.
* Consolidate the various functions that read and write guest memory.  There is some duplication there.
Line 18: Line 18:


MMU related:
MMU related:
* Attach kvm memory to a Linux address_space so that guest memory can be paged out.
* Attach kvm memory to a Linux address_space so that guest memory can be paged out (patch exists for alternative approach to guest paging).
* Support large pages (in conjunction with the item above) so that if the guest uses a large page mapping and the guest memory is backed by hugetlbfs, a large-page pte is created.
* Support large pages (in conjunction with the item above) so that if the guest uses a large page mapping and the guest memory is backed by hugetlbfs, a large-page pte is created.
* Improve mmu page eviction algorithm (currently FIFO, change to approximate LRU).
* Improve mmu page eviction algorithm (currently FIFO, change to approximate LRU).
* Add a read-only memory type.  This can be used to speed up APIC reads, which is fairly important for Windows guests.
* Add a read-only memory type.
* Implement AM20 for dos and the like.
* Implement AM20 for dos and the like.
* Implement direct page tables on paravirt_ops enabled Linux guests
* Implement direct page tables on paravirt_ops enabled Linux guests (in progress)


For the adventurous:
For the adventurous:


* Emulate the VT and SVM instructions, so that kvm can run in a virtual machine.  Test by running a VM in a VT guest in an SVM guest on VT hardware, as well as running a VM in an SVM guest in a VT guest on SVM hardware.
* Emulate the VT and SVM instructions, so that kvm can run in a virtual machine.  Test by running a VM in a VT guest in an SVM guest on VT hardware, as well as running a VM in an SVM guest in a VT guest on SVM hardware.
* Keep this TODO up to date


__NOTOC__
__NOTOC__

Revision as of 03:27, 13 June 2007

TODO


The following items need some love. Please post to the list if you are interested in helping out:

  • Real mode support: VT support for real mode is terrible, so we need to do it in software. This means extending the x86 emulator (x86_emulate.c) to handle more instructions, and changing the execution loop to call the emulator for real mode (in progress).
  • Move the apic/ioapic/pic/pit emulation into the kernel. This will simplify in-kernel paravirtualized devices (as there is no need to exit to userspace to inject an interrupt) and guest SMP (in progress).
  • Drop the preemption counter while doing mmu stuff, and turn kvm->lock into a mutex.
    • Even better, hook the state switch to the scheduler, and do away with disabling preemption completely (in progress).
  • Emulate the architectural performance monitor counters/msrs, for Linux nmi watchdog support.

The following smaller scale tasks can be a nice entry point to someone wishing to get involved:

  • Enforce the virtual time stamp counter monotonicity even when a vcpu is migrated to another physical cpu. (done for AMD, in progress for Intel)
  • Trap #UD and emulate sysenter/syscall/sysret/sysexit. These instructions don't exist on all cpus in all modes, so they hinder cross-vendor migration
  • Consolidate the various functions that read and write guest memory. There is some duplication there.
  • Consolidate the inb/outb emulation helpers into x86_emulate.c
  • struct kvm_vcpu has many vmx specific fields. Move them into a new member vmx. Have each arch allocate the vcpu so its arch-specific members can be addressed without indirection (AnthonyLiguori has started this).

MMU related:

  • Attach kvm memory to a Linux address_space so that guest memory can be paged out (patch exists for alternative approach to guest paging).
  • Support large pages (in conjunction with the item above) so that if the guest uses a large page mapping and the guest memory is backed by hugetlbfs, a large-page pte is created.
  • Improve mmu page eviction algorithm (currently FIFO, change to approximate LRU).
  • Add a read-only memory type.
  • Implement AM20 for dos and the like.
  • Implement direct page tables on paravirt_ops enabled Linux guests (in progress)

For the adventurous:

  • Emulate the VT and SVM instructions, so that kvm can run in a virtual machine. Test by running a VM in a VT guest in an SVM guest on VT hardware, as well as running a VM in an SVM guest in a VT guest on SVM hardware.
  • Keep this TODO up to date