Re: [Qemu-devel] [PATCH V4 00/22] Multiqueue virtio-net
On 01/31/2013 12:00 AM, Jason Wang wrote: On 01/31/2013 02:29 AM, Eric Blake wrote: On 01/30/2013 04:12 AM, Jason Wang wrote: 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 Do we really need specific fds= parsing, or can we reuse the existing -add-fd command line option to our advantage? I guess what I'm asking is how hotplug will work; and if hotplug takes a file name, shouldn't the command line also take a name; and if the command line takes a name, what's wrong with: ./qemu -add-fd fdset=1,fd=X -add-fd fdset=2,fd=Y -add-fd fdset=3,fd=M -add-fd fdset=4,fd=N -netdev tap,id=hn0,fds=/dev/fdset/1:/dev/fdset/2,vhostfds=/dev/fdset/3:/dev/fdset/4 -device virtio-net-pci,netdev=hn0 AFAIK, tap does not support fdset now, so this requirement is beyond the scope of multiqueue itself. We can do this in the future. Btw does libvirt support add-fd now? Anything that uses qemu_open() supports fdset now. The question I'm asking is whether the command line has a way to pass /path/to/name (which can be presented as /dev/fdset/nnn for add-fd usage) now, or whether it only supports fds=integers. For hotplug, it just work if you pass multiple file descriptors one by one through getfd and then use fds=X:Y,vhostfds=M:N. For hotplug, you can't pass integers; you have to name the fds either way. Either you name it with getfd, or you name it with add-fd. But getfd is not as nice as add-fd when it comes to ensuring that fds are not leaked in qemu, even when the management app such as libvirt restarts. Furthermore, if it is possible to specify taps by pathname instead of by fd inheritance, then using getfd means you have to support two different approaches in QMP to distinguish which string is being supplied, while supporting add-fd means you only have to support qemu_open() which handles both direct names and fd passing in a single string interface. As for libvirt support of add-fd, I'm currently working with Stefan Berger to get patches applied; the goal is tha libvirt 1.0.3 (end of February) will support add-fd. -- Eric Blake eblake redhat com+1-919-301-3266 Libvirt virtualization library http://libvirt.org signature.asc Description: OpenPGP digital signature
Re: [Qemu-devel] [PATCH V4 00/22] Multiqueue virtio-net
On Thu, Jan 31, 2013 at 06:44:49AM -0700, Eric Blake wrote: On 01/31/2013 12:00 AM, Jason Wang wrote: On 01/31/2013 02:29 AM, Eric Blake wrote: On 01/30/2013 04:12 AM, Jason Wang wrote: 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 Do we really need specific fds= parsing, or can we reuse the existing -add-fd command line option to our advantage? I guess what I'm asking is how hotplug will work; and if hotplug takes a file name, shouldn't the command line also take a name; and if the command line takes a name, what's wrong with: ./qemu -add-fd fdset=1,fd=X -add-fd fdset=2,fd=Y -add-fd fdset=3,fd=M -add-fd fdset=4,fd=N -netdev tap,id=hn0,fds=/dev/fdset/1:/dev/fdset/2,vhostfds=/dev/fdset/3:/dev/fdset/4 -device virtio-net-pci,netdev=hn0 AFAIK, tap does not support fdset now, so this requirement is beyond the scope of multiqueue itself. We can do this in the future. Btw does libvirt support add-fd now? Anything that uses qemu_open() supports fdset now. The question I'm asking is whether the command line has a way to pass /path/to/name (which can be presented as /dev/fdset/nnn for add-fd usage) now, or whether it only supports fds=integers. For hotplug, it just work if you pass multiple file descriptors one by one through getfd and then use fds=X:Y,vhostfds=M:N. For hotplug, you can't pass integers; you have to name the fds either way. Either you name it with getfd, or you name it with add-fd. But getfd is not as nice as add-fd when it comes to ensuring that fds are not leaked in qemu, even when the management app such as libvirt restarts. Furthermore, if it is possible to specify taps by pathname instead of by fd inheritance, I don't think there's a way to specify taps by pathname. then using getfd means you have to support two different approaches in QMP to distinguish which string is being supplied, while supporting add-fd means you only have to support qemu_open() which handles both direct names and fd passing in a single string interface. As for libvirt support of add-fd, I'm currently working with Stefan Berger to get patches applied; the goal is tha libvirt 1.0.3 (end of February) will support add-fd. -- Eric Blake eblake redhat com+1-919-301-3266 Libvirt virtualization library http://libvirt.org -- To unsubscribe from this list: send the line unsubscribe kvm in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [Qemu-devel] [PATCH V4 00/22] Multiqueue virtio-net
On 01/31/2013 09:44 PM, Eric Blake wrote: On 01/31/2013 12:00 AM, Jason Wang wrote: On 01/31/2013 02:29 AM, Eric Blake wrote: On 01/30/2013 04:12 AM, Jason Wang wrote: 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 Do we really need specific fds= parsing, or can we reuse the existing -add-fd command line option to our advantage? I guess what I'm asking is how hotplug will work; and if hotplug takes a file name, shouldn't the command line also take a name; and if the command line takes a name, what's wrong with: ./qemu -add-fd fdset=1,fd=X -add-fd fdset=2,fd=Y -add-fd fdset=3,fd=M -add-fd fdset=4,fd=N -netdev tap,id=hn0,fds=/dev/fdset/1:/dev/fdset/2,vhostfds=/dev/fdset/3:/dev/fdset/4 -device virtio-net-pci,netdev=hn0 AFAIK, tap does not support fdset now, so this requirement is beyond the scope of multiqueue itself. We can do this in the future. Btw does libvirt support add-fd now? Anything that uses qemu_open() supports fdset now. The question I'm asking is whether the command line has a way to pass /path/to/name (which can be presented as /dev/fdset/nnn for add-fd usage) now, or whether it only supports fds=integers. Nothing special with 'fds' and 'vhostfds', it just split the params by ':' and pass them one by one through monitor_handle_fd_param() just like fd and vhostfd. So if 'fd' and 'vhostfd' supports /path/to/name, so do 'fds' and 'vhostfds'. So for command line, you do can pass /path/to/name to fd/vhostfd but it won't work since monitor_handle_fd_param() can not handle it because 1) it's not an integer 2) it was not named before. But for hotplug, non-integers works since it has already named by getfd, so does fds and vhostfds. For management such as libvirt, what's needed is just to connect the fdname with ':'. For hotplug, it just work if you pass multiple file descriptors one by one through getfd and then use fds=X:Y,vhostfds=M:N. For hotplug, you can't pass integers; you have to name the fds either way. Either you name it with getfd, or you name it with add-fd. But getfd is not as nice as add-fd when it comes to ensuring that fds are not leaked in qemu, even when the management app such as libvirt restarts. Furthermore, if it is possible to specify taps by pathname instead of by fd inheritance, then using getfd means you have to support two different approaches in QMP to distinguish which string is being supplied, while supporting add-fd means you only have to support qemu_open() which handles both direct names and fd passing in a single string interface. As for libvirt support of add-fd, I'm currently working with Stefan Berger to get patches applied; the goal is tha libvirt 1.0.3 (end of February) will support add-fd. Thanks, I know there are advantages of add-fd, but current tap does not use qemu_open() which means it can't support fdset. We can add this in the future. -- To unsubscribe from this list: send the line unsubscribe kvm in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [Qemu-devel] [PATCH V4 00/22] Multiqueue virtio-net
On 01/31/2013 06:58 AM, Michael S. Tsirkin wrote: For hotplug, it just work if you pass multiple file descriptors one by one through getfd and then use fds=X:Y,vhostfds=M:N. For hotplug, you can't pass integers; you have to name the fds either way. Either you name it with getfd, or you name it with add-fd. But getfd is not as nice as add-fd when it comes to ensuring that fds are not leaked in qemu, even when the management app such as libvirt restarts. Furthermore, if it is possible to specify taps by pathname instead of by fd inheritance, I don't think there's a way to specify taps by pathname. Then using fds=integer:integer on the command line makes the most sense, and QMP uses fds=name:name where name was specified by 'getfd', and there is no way to wire up qemu_open() nor any need to use 'add-fd'. Okay, my question has been answered, your approach looks right now that I know more about how -netdev works to begin with. -- Eric Blake eblake redhat com+1-919-301-3266 Libvirt virtualization library http://libvirt.org signature.asc Description: OpenPGP digital signature
Re: [Qemu-devel] [PATCH V4 00/22] Multiqueue virtio-net
On 01/31/2013 02:29 AM, Eric Blake wrote: On 01/30/2013 04:12 AM, Jason Wang wrote: 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 Do we really need specific fds= parsing, or can we reuse the existing -add-fd command line option to our advantage? I guess what I'm asking is how hotplug will work; and if hotplug takes a file name, shouldn't the command line also take a name; and if the command line takes a name, what's wrong with: ./qemu -add-fd fdset=1,fd=X -add-fd fdset=2,fd=Y -add-fd fdset=3,fd=M -add-fd fdset=4,fd=N -netdev tap,id=hn0,fds=/dev/fdset/1:/dev/fdset/2,vhostfds=/dev/fdset/3:/dev/fdset/4 -device virtio-net-pci,netdev=hn0 AFAIK, tap does not support fdset now, so this requirement is beyond the scope of multiqueue itself. We can do this in the future. Btw does libvirt support add-fd now? For hotplug, it just work if you pass multiple file descriptors one by one through getfd and then use fds=X:Y,vhostfds=M:N. -- To unsubscribe from this list: send the line unsubscribe kvm in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html