On 01/31/2013 10:36 PM, Michael S. Tsirkin wrote: > On Thu, Jan 31, 2013 at 04:21:49PM +0200, Michael S. Tsirkin wrote: >> On Wed, Jan 30, 2013 at 07:12:19PM +0800, Jason Wang wrote: >>> Hello all: >>> >>> This seires is an update of last version of multiqueue virtio-net support. >>> >>> This series tries to brings multiqueue support to virtio-net through a >>> multiqueue support tap backend and multiple vhost threads. >>> >>> Patch 1 converts bitfield in TAPState to bool. Patch 2 replace assert(0) >>> with >>> abort() in tap. >>> >>> To support this, multiqueue nic support were added to qemu. This is done by >>> introducing an array of NetClientStates in NICState, and make each pair of >>> peers >>> to be an queue of the nic. This is done in patch 3-9. >>> >>> Tap were also converted to be able to create a multiple queue >>> backend. Currently, only linux support this by issuing TUNSETIFF N times >>> with >>> the same device name to create N queues. Each fd returned by TUNSETIFF were >>> a >>> queue supported by kernel. Three new command lines were introduced, "queues" >>> were used to tell how many queues will be created by qemu; "fds" were used >>> to >>> pass multiple pre-created tap file descriptors to qemu; "vhostfds" were >>> used to >>> pass multiple pre-created vhost descriptors to qemu. This is done in patch >>> 10-15. >>> >>> A method of deleting a queue and queue_index were also introduce for virtio, >>> this is done in patch 16-17. >>> >>> Vhost were also changed to support multiqueue by introducing a start vq >>> index >>> which tracks the first virtqueue that will be used by vhost instead of the >>> assumption that the vhost always use virtqueue from index 0. This is done in >>> patch 18. >>> >>> The last part is the multiqueue userspace changes, this is done in patch >>> 19-22. >>> >>> With this changes, user could start a multiqueue virtio-net device through >>> >>> ./qemu -netdev tap,id=hn0,queues=2,vhost=on -device >>> virtio-net-pci,netdev=hn0 >>> >>> Management tools such as libvirt can pass multiple pre-created fds/vhostfds >>> through >>> >>> ./qemu -netdev tap,id=hn0,fds=X:Y,vhostfds=M:N -device >>> virtio-net-pci,netdev=hn0 >>> >>> For the one who wants to try, a git tree is available at: >>> git://github.com/jasowang/qemu.git >>> >>> Changes from V3: >>> - convert bitfield to bool in TAPState (Blue) >>> - use abort() instead of assert(0) in tap code (Blue) >>> - rebase to the latest >>> - fix a bug that breaks the non-tap network >> This conflicts with the pull request I sent, in partucular this adds a >> layout assumption. In the hope this will accelerate things, I did a >> rebase and a trivial test with single queue only and it seems ok: >> >> git://github.com/mstsirkin/qemu.git pci >> >> There were some warnings about whitespace at EOF but >> otherwise seems ok. > Pushed to my pci branch on kernel.org too.
Tested with mq, it works well. Thanks. > >> -- >> MST