Google Summer of Code
Venkatesh Srinivas
vsrinivas at ops101.org
Mon Mar 4 15:09:52 PST 2013
On Fri, Mar 01, 2013 at 10:20:18PM +0530, Mohit Dhingra wrote:
>*Hi All,
>
>I am a final year student, Masters by Research, at Indian Institute of
>Science Bangalore. I want to work in GSoC 2013. I did a survey of projects
>that people did earlier, and I am interested in the projects related to
>device drivers and virtualization. I looked at "porting virtio device
>drivers from NetBSD to DragonFly BSD". I have done a research project on
> virtualization and presented a paper "Resource Usage Monitoring in Clouds"
>in IEEE/ACM Grid in Beijing last year. Can someone please suggest some
>topics related to this which are yet to be implemented on DragonFly BSD?
Hi,
What area(s) of virtualization are you interested in? DFly as a guest?
As a host? What VMMs?
If you're interested in DragonFly as a virtualization guest on
qemu/KVM or an other platform that exports virtio paravirtualized
devices, there is some work left on the virtio guest drivers --
* virtio-blk:
I cleaned up and brought in Tim Bisson's port of FreeBSD's virtio-blk
driver in January, based on work dating back to last April. The driver
works okay, but has a few issues:
** qemu exports a 128-entry virtqueue for virtio-blk; DragonFly as a
guest doesn't support indirect ring entries and can issue up to 64 KiB
I/Os, so we can very easily slam into the virtqueue size limit. If we
force qemu to expose a larger virtqueue, we can reach ~95% of host
throughput. Virtio supports up to 16k-entry virtqueue, but qemu+SeaBIOS
can only boot from 128-entry or smaller queues. Adding indirect ring
support would help w/ bandwidth here; this is a pretty small project.
** virtio-blk currently 'kicks' the host VMM directly from its
strategy() routine; it may make sense to defer this to a taskqueue. This
is a tiny change, but understanding the performance implications may
take a bit longer.
** virtio-blk doesn't support dumps (crash/panics). Fixing this would be
pretty straightforward and small in scope.
* virtio-net:
I have a port of virtio-net, again based on Tim's work,
but it is usually testing as slower than em (e1000) on netperf
TCP_STREAM/TCP_RR tests. Improving on this port, re-adding indirect
ring support (much less of a win for virtio-net compared to -blk),
and implementing multiqueue would perhaps be large enough for a SoC
project.
* Our virtio drivers don't support MSI-X; this is not a huge deal for
virtio-blk, but virtio-net would really benefit from it.
* There are other virtio devices; virtio-scsi is a paravirtualized SCSI
adapter, there is a FreeBSD driver that could serve as a good start
for a port. virtio-scsi allows multiple targets per-PCI device, which
is nice, and newer versions of the adapter support multiple request
queues. Porting this and implementing multiqueue would be a nice
project too.
* When running DragonFly as a guest on KVM, we take a lot of VM exits,
particularly to our host/VMM's APIC device. We could implement a
kvmclock time source to avoid some timer exits and support for the
paravirtualized EOI (https://lwn.net/Articles/502176/) in our platform
code to cut down on VM exits.
---
DragonFly also has a neat mechanism to allow DFly kernels to run as user
processes on itself ('vkernels'). If you are interested in vkernels,
there is a fair bit of performance work that could be done on them:
* vkernels currently use a shadow translation scheme for virtual memory
for its guests. (see http://acm.jhu.edu/~me/vpgs.c for an example of
how that interface works). The shadow translation scheme works on
every x86/x86-64 CPU, but on CPUs w/ second generation virtualization
(RVI on AMD or EPT on Intel/Via), we can do much better using those
hardware guest pagetable walkers.
* DragonFly BSD has simple process checkpointing/restore. In 2011, Irina
Presa worked on a project to enable checkpoint save/restore of a
virtual kernel
(http://leaf.dragonflybsd.org/mailarchive/kernel/2011-04/msg00008.html).
Continuing this GSoC would be pretty neat, the ability to freeze and
thaw a virtual kernel would allow all sorts of interesting use cases.
* Virtual kernel host code have simple implementations of
paravirtualized devices, vkdisk and vknet; understanding their
performance and perhaps replacing them with host-side virtio devices
might be worthwhile.
---
A brave last project would be to re-implement the Linux KVM (or some
subset-of) interface on DragonFly. If you're interested in this kind
of project, I'd be happy to explain a bit further...
Take care,
-- vs;
http://ops101.org/
More information about the Kernel
mailing list