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