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

[gsoc] Virtio progress


From: Stéphanie Ouillon <stephanie@xxxxxxxxx>
Date: Sun, 19 Jun 2011 22:24:44 +0200

Hello,

Here is what I worked on during the last two weeks.

I kept on working on Tim Bisson's code of the virtio blovk device driver.
I kept on testing the code, but I faced severals bugs:



1)
When running a dd test, with small or big data to write on the virtio block device, the console/machine would usually freeze. (log messages [1])


---> When a request is not treated because there is no free place in the queue, it is placed in a vbb_queue and it tries again later. However, in the virtio_blk_execute function, when virtio_enqueue prep passed but virtio_enqueue_reserve failed, the request wasn't inserted again in the vbb_queue.
So I added some lines to perform this: l.241 in virtio-blk.c [2]


But it didn't solve the problem entirely. And it was linked with the second bug. Sometimes I had only the first one, sometimes only the second one, sometimes both.

Another part of the solution (I think) is that I was working on a virtio disk which was formated in hammer FS. But maybe it was too small. I had a problem on my kvm hard disk (df / told me it was full, but a du command indicated that I occupated only 6% of the total capacity - a "hammer -h cleanup" command saved me. )
So I did my tests again on a virtio block device formated in UFS, and it seems to work better. I will try again with a bigger hammer partition.





2)
The block device wouldn't umount correctly and/or the virtio-blk module wouldn't unload. The only way to solve the problem was rebooting.
I activated the debug mode in the code, but I had no access to any log messages related to these problems because the console/machine was frozen before the key moment.


--->The problem was due to the fact that in the virtio_blk_detatch() function, vq->vq_entries was freed twice: once by the call of the virtio_free_entry and once by a direct call of kfree in virtio_blk_detach(). [3]




Meanwhile, I began to work on the virtio network device driver. I wrote the probe/attach/detach functions (not tested yet) [4]. It gave me some ideas for debugging the block device driver when I didn't know where to look.
I looked carefully at the NetBSD code. Some parts of the code are quite "dirty" (especially the virtio_alloc_mems() function).




Regards


[1] github.com/arroway/virtio_DragonFlyBSD/blob/dev-block/kldload_logs.txt
[2] github.com/arroway/virtio_DragonFlyBSD/commit/6dddd6a825ec3b06405d77bdb2c22023e5f0ed01#diff-0
[3] github.com/arroway/virtio_DragonFlyBSD/commit/464fd12eb65af3d2059ccce55dafe4893f57077f
[4] github.com/arroway/virtio_DragonFlyBSD/blob/dev-net/net/virtio-net.c


--
Stéphanie



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