DragonFly BSD
DragonFly kernel List (threaded) for 2011-01
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Virtio drivers (virtio-net)


From: Tim Bisson <bissont@xxxxxxx>
Date: Sun, 23 Jan 2011 02:49:29 -0800

Hi All,

There's been some activity in the FreeBSD mailing lists about the virtio drivers. A couple of people presented their drivers:
http://lists.freebsd.org/pipermail/freebsd-current/2011-January/022036.html
http://lists.freebsd.org/pipermail/freebsd-current/2011-January/022045.html


We took a look at these drivers and found that the first link seemed to be a really clean implementation of the virtio infrastructure and virtio-net driver. We decided to stop the porting effort of the NetBSD-based virtio drivers and instead use the FreeBSD ones. We successfully ported the FreeBSD virtio infrastructure and virtio-net driver, which now works and is ready for more testers.

In order to port this driver, we had to make some changes to the kernel: essentially add kern/subr_sglist.c from FreeBSD and make a probe interface public. The patch file is in the top-level directory of the git tree and was diff'd from master this morning. The file name is:
0001-kern-changes-for-freeebsd-virtio-driver-port.patch


Regarding the original virtio-blk driver we ported from NetBSD. I will probably port this to the new virtio-infrastructure, unless the FreeBSD virtio-blk driver is posted on the FreeBSD mailing list in the near future.

Here's a link to the code:
http://gitorious.org/dbd-virtio-drivers-freebsd-port

and some notes:
http://gitorious.org/dbd-virtio-drivers-freebsd-port/pages/Home

Regarding performance, I don't have a good explanation yet, but emulation with the re driver is actually faster than virtio on a simle scp test:

re driver
$ time scp 192.168.122.140:200m .
200m                       100%  200MB  15.4MB/s   00:13

virtio driver
$ time scp 192.168.123.8:200m .
200m                       100%  200MB  11.8MB/s   00:17

ifconfig from dbsd vm for above test
$ ifconfig
re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=1b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING>
    inet6 fe80::5054:ff:fe03:9900%re0 prefixlen 64 scopeid 0x1
    inet 192.168.122.140 netmask 0xffffff00 broadcast 192.168.122.255
    ether 52:54:00:03:99:00
    media: Ethernet autoselect (100baseTX <full-duplex>)
    status: active
faith0: flags=8002<BROADCAST,MULTICAST> mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
    options=3<RXCSUM,TXCSUM>
    inet 127.0.0.1 netmask 0xff000000
    inet6 ::1 prefixlen 128
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
ppp0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500
sl0: flags=c010<POINTOPOINT,LINK2,MULTICAST> mtu 552
vtnet0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=28<VLAN_MTU,JUMBO_MTU>
    inet6 fe80::5054:ff:fe33:3bd3%vtnet0 prefixlen 64 scopeid 0x6
    inet 192.168.123.8 netmask 0xffffff00 broadcast 192.168.123.255
    ether 52:54:00:33:3b:d3

Comments and suggestions are always welcome.
Tim



[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]