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,
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 :
And a we can fetch this information for a guest VM :
- CR0, CR3, CR4
- [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
- Activity state (Active, Halt, shutdown, Wait startup IPI
- Interruptibility state
- Pending debug exception
- VMX preemption timer
- page-directory-pointer-table entries
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...
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
google summer of code proposal
Sylvestre Gallon <ccna.syl at gmail dot com>