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 | * 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 | * 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 | * 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 membervmx
. 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