Re: Google Summer of Code

Venkatesh Srinivas <[email protected]>
Newsgroups gmane.os.dragonfly-bsd.kernel
Message-ID <[email protected]>
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/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.