KVM-like implementation in a vkernel-like fashion
How I understand vkernel
This chapter is based on my comprehension of Aggelos Economopoulos
papers on lwn part1,
part2
Vkernel is an elf32 binary executed in userland. The DragonFlyBSD developpers take the pc32 kernel and remove all the code that does not work in ring3 like cr3 access...
Device present that I need to read.
- vn : vnode disk driver
- vkd : Virtual disk device
- vke : Virtual ethernet device
- vcd : Virtual CDRom device
VMX - How it Work ? What can be done ?
VTX allow the guest to have virtualised :
- CR0, CR3, CR4
- DR7
- [R]SP, [R]IP, [R|I]FLAGS
- CS, SS, DS, ES, FS, GS, LDTR, and TR
- base address and limit for GDTR and IDTR
- A bunch of MSR registers
- SMBASE containing the base addresse of SMRAM
And a we can fetch this information for a guest VM :
- Activity state (Active, Halt, shutdown, Wait startup IPI
- Interruptibility state
- Pending debug exception
- VMX preemption timer
- page-directory-pointer-table entries
KVM-like proposal
I think we can cut this project into 5 differents parts :
- 1st - Create a libkvm in the source tree with stubs function and try to compile qemu with this interface
- 2nd - Implement a kernel driver for kvm support for i386
- 3rd - launching a DragonFly kernel (pc32 one) on top of a qemu
- 4th - Implement some code to boot a pc32 vkernel in a vkernel style using kvm
- bonus - Implement virtio drivers...
Timeline
Here is the true timeline I want to follow. This timeline will be modified in google summer of code submit to follow their timeline.
- Now - 9 april : Implement the 1st task.
- 9 april - 1st June : Implement the 2nd task.
- 1st June - 15th June : Implement the 3rd task
- 15th June - 1st August : Implement the 4th task
- 1st August - end of gsoc : Write some manpages and documentation
GSOC proposal
google summer of code proposal
Documentation
Sylvestre Gallon <ccna.syl at gmail dot com>