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


Reply via email to