|From:||Stéphanie Ouillon <stephanie@xxxxxxxxx>|
|Date:||Tue, 22 Mar 2011 19:53:42 +0100|
On 3/20/11 2:28 PM, Stéphanie Ouillon wrote:Hello,
I come with some questions after I worked on virtio drivers during the week. The answers will help me to elaborate my timeline for the gsoc application :)
_1. Virtio Network Driver_
I solved the problem I discussed with Pratyush Kshirsagar about the loading of virtio.ko and I was able to check that the dmesg message was okay thanks to his help.
( I am still under Virtualbox, I set networks settings to virtio-net, bridge on the ethernet interface )
Here is the result of dmseg ( with some additional kprintf messages ) :
We enter virtio_probe() virtio_probe 4096 Device 4096 is okay virtiobus0 port 0xd020-0XD03f irq 10 at device 3.0 on pci0
We enter virtio_attach() Virtio Network Device (rev 0x00) 0xc2aa52f8 Virtio Type: 1 Network dev child added
We enter virtio_probe() virtio_probe 51966
We enter virtio_probe() virtio_probe 9237
We enter virtio_probe() virtio_probe 28947
So a virtio network device was found.
However, I face some problems with virtio-net when loading the module virtio-net.ko ( the child driver? ):
- it tells me the module loads correctly but,
- when I add some kprintf debug for dmseg, I can see that there are no calls to virtio_net_probe()
This is because of how I've set the drivers up. If you look at attach() in virtio.c, you'll see I end up doing a device_add_child() based on the type of device. When you then load the virtio-net driver, virtio_net_attach() should be called. This probably isn't the right way to do things, but it's how I got things working.
- no network interface seems to be created, and I don't see which function in virtio-net.c creates it. I looked at the NetBSD code, if I understood it rightly, it uses ifnet to create the network interface with the following functions : vioif-init(), vioif_stop(), etc ?
- and to be sure I have no network, when I try to ping something, I get a "no route to host" message, and when I want to set a default route, I get a "network unreachable"
Right, it's only the skeleton of a driver. The virtio-net driver still needs to hook into the virtio APIS (like virtio-blk) and create a networking interface. Right now all it does it negotiate features with the backend.
I saw in some messages in the mailing list that some tests have been done by Tim Bisson (http://leaf.dragonflybsd.org/mailarchive/kernel/2011-01/msg00053.html). Was it realized with the code you gave me ?
No, that was code I ported from the non-BSD licensed FreeBSD virtio code.
_2. Ballooning and Block Device Drivers_
At the moment, I run DragonFly BSD under VirtualBox... which is not nice :/
There are no memory ballooning available on 32-bits machines ( I've got an 32-bits machine, a mac, so I don't have kvm anymore ) :( ) and no virtio block drivers at all for VirtualBox.
So it seems that I'll have to run DragonFly BSD under Qemu to run code on my computer. However, as the project aims at implementing virtio drivers to run DragonFly BSD under kvm, I also plan to install some virtual machines under kvm on a server I have access to.
Block device driver has been ported from NetBSD, and it seems to have been tested ( http://gitorious.org/virtio-drivers/pages/Home )?
And ballooning driver still remains to be ported from NetBSD. I read that Minoura's NetBSD code was checked on NetBSD before porting. Was it done for each driver ( including ballooning ) ?
Yes they work.
_ 3. Changes to the kernel _
According to these messages ( http://leaf.dragonflybsd.org/mailarchive/kernel/2011-01/msg00046.html ), the virtio net driver required some changes to the kernel ( adding kern/subr_sglist.c and making the probe interface public ). Why was it necessary ? Also, were some changes required for the block device driver ?
That was for the non-BSD licensed FreeBSD virtio-net driver. That driver used sglists to package the virtio header, payload, and length. The NetBSD drivers don't use sglists.
_4. Performance tests ( not really a question :) )_
As I understand it, tests will have to be done in order to compare performances with and without virtio, for each driver ( to be sure virtio is doing its job :) ).
Thank you !