TODO: Difference between revisions
From KVM
m (Emulate the VT and SVM instruction) |
(Update) |
||
Line 10: | Line 10: | ||
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: | ||
* Reduce qemu memory footprint when using kvm | * Reduce qemu memory footprint when using kvm | ||
** this involves dropping the PhysPageDesc array in favour of a memslot-like approach | |||
* Avoid taking kvm->lock when issuing mmio. Need to check lapic and ioapic accesses for correctness. | * Avoid taking kvm->lock when issuing mmio. Need to check lapic and ioapic accesses for correctness. | ||
Line 20: | Line 19: | ||
** possible using mprotect()? | ** possible using mprotect()? | ||
* Implement AM20 for dos and the like. | * Implement AM20 for dos and the like. | ||
* O(1) write protection by protecting the PML4Es, then on demand PDPTEs, PDEs, and PTEs | * O(1) write protection by protecting the PML4Es, then on demand PDPTEs, PDEs, and PTEs | ||
* O(1) mmu invalidation using a generation number | * O(1) mmu invalidation using a generation number | ||
Line 27: | Line 25: | ||
* Add a NonPT flag (or maybe its inverse, Paging) to instructions that are never used for page table updates (like add, sub, call). Teach the mmu to unshadow page tables if a NonPT instruction is executed on them. | * Add a NonPT flag (or maybe its inverse, Paging) to instructions that are never used for page table updates (like add, sub, call). Teach the mmu to unshadow page tables if a NonPT instruction is executed on them. | ||
* Change the emulator initialization sequence not to read all segment registers (this is slow), instead read them on demand. On 64-bit, no segments are usually needed while on 32-bit only cs and ds are commenly required. | * Change the emulator initialization sequence not to read all segment registers (this is slow), instead read them on demand. On 64-bit, no segments are usually needed while on 32-bit only cs and ds are commenly required. | ||
* Same for ordinary registers, really, copying all registers all the time is gross. | |||
* Implement mmx and sse memory move instructions; useful for guests that use multimedia extensions for accessing vga | |||
* Implement an operation queue for the emulator. The emulator often calls userspace to perform a read or a write, but due to inversion of control it actually restarts instead of continuing. The queue would allow it to replay all previous operations until it reaches the point it last stopped. | |||
** if this is done, we can retire ->read_std() in favour of ->read_emulated(). | |||
* push segment base resolution to the last possible moment, i.e. calling ctxt->ops->read_emulated(); then implement limit checks in that place | |||
* convert more instructions to direct dispatch (function pointer in decode table) | |||
==== Interactivity improvements: ==== | ==== Interactivity improvements: ==== | ||
Line 33: | Line 37: | ||
==== Pass-through/VT-d related: ==== | ==== Pass-through/VT-d related: ==== | ||
* Enhance KVM QEMU to return error messages if user attempts to pass-through unsupported devices: | * Enhance KVM QEMU to return error messages if user attempts to pass-through unsupported devices: | ||
** Devices with shared host IOAPIC interrupt | ** Devices with shared host IOAPIC interrupt | ||
Line 53: | Line 55: | ||
==== For the adventurous: ==== | ==== For the adventurous: ==== | ||
* Emulate the VT and SVM instructions, so that kvm can run in a virtual machine | * Emulate the VT and SVM instructions, so that kvm can run in a virtual machine. | ||
* Emulate the VT and SVM instruction sets on qemu. This would be very beneficial to debugging kvm ( working on this - kern.devel@gmail.com ). | * Emulate the VT and SVM instruction sets on qemu. This would be very beneficial to debugging kvm ( working on this - kern.devel@gmail.com ). | ||
* Keep this TODO up to date | * Keep this TODO up to date |
Revision as of 05:34, 5 September 2010
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).
- Emulate the architectural performance monitor counters/msrs, for Linux nmi watchdog support.
- Emulate MSR_IA32_DEBUGCTL for guests which use it
- Bring up Windows 95 and Windows 98 guests
The following smaller scale tasks can be a nice entry point to someone wishing to get involved:
- Reduce qemu memory footprint when using kvm
- this involves dropping the PhysPageDesc array in favour of a memslot-like approach
- Avoid taking kvm->lock when issuing mmio. Need to check lapic and ioapic accesses for correctness.
- Improve mmu page eviction algorithm (currently FIFO, change to approximate LRU).
- Add a read-only memory type.
- possible using mprotect()?
- Implement AM20 for dos and the like.
- O(1) write protection by protecting the PML4Es, then on demand PDPTEs, PDEs, and PTEs
- O(1) mmu invalidation using a generation number
x86 emulator updates:
- Add a NonPT flag (or maybe its inverse, Paging) to instructions that are never used for page table updates (like add, sub, call). Teach the mmu to unshadow page tables if a NonPT instruction is executed on them.
- Change the emulator initialization sequence not to read all segment registers (this is slow), instead read them on demand. On 64-bit, no segments are usually needed while on 32-bit only cs and ds are commenly required.
- Same for ordinary registers, really, copying all registers all the time is gross.
- Implement mmx and sse memory move instructions; useful for guests that use multimedia extensions for accessing vga
- Implement an operation queue for the emulator. The emulator often calls userspace to perform a read or a write, but due to inversion of control it actually restarts instead of continuing. The queue would allow it to replay all previous operations until it reaches the point it last stopped.
- if this is done, we can retire ->read_std() in favour of ->read_emulated().
- push segment base resolution to the last possible moment, i.e. calling ctxt->ops->read_emulated(); then implement limit checks in that place
- convert more instructions to direct dispatch (function pointer in decode table)
Interactivity improvements:
- If for several frames in a row a large proportion of the framebuffer pages are changing, then for the next few frames don't bother to get the dirty page log from kvm, but instead assume that all pages are dirty. This will reduce page fault overhead on highly interactive workloads.
- When detecting keyboard/video/mouse activity, scale up the frame rate; when activity dies down, scale it back down (applicable to qemu as well).
- Enhance KVM QEMU to return error messages if user attempts to pass-through unsupported devices:
- Devices with shared host IOAPIC interrupt
- Conventional PCI devices
- Devices without FLR capability
- QEMU PCI pass-through patch needs to be enhanced to same functionality as corresponding file in Xen
- Remove direct HW access by QEMU for probing PCI BAR size
- PCI handling of various PCI configuration registers
- Other enhancements that was done in Xen
- Host shared interrupt support
- VT-d2 support (WIP in Linux Kernel)
- Queued invalidation
- Interrupt remapping
- ATS
Bug fixes:
- Less sexy but ever important, fixing bugs is one of the most important contributions
For the adventurous:
- Emulate the VT and SVM instructions, so that kvm can run in a virtual machine.
- Emulate the VT and SVM instruction sets on qemu. This would be very beneficial to debugging kvm ( working on this - kern.devel@gmail.com ).
- Keep this TODO up to date
- Add vmgl support to qemu. Port to virtio. Write a Windows driver.