[libvirt] [PATCH 4/4] qemu: add multiqueue vhost-user support

Maxime Leroy maxime.leroy at 6wind.com
Thu Jun 4 15:54:17 UTC 2015


On Thu, Jun 4, 2015 at 3:43 PM, Martin Kletzander <mkletzan at redhat.com> wrote:
> From: Maxime Leroy <maxime.leroy at 6wind.com>
>
> This patch adds the support of queues attribute of the driver element
> for vhost-user interface type. Example:
>
> <interface type='vhostuser'>
>       <mac address='52:54:00:ee:96:6d'/>
>       <source type='unix' path='/tmp/vhost2.sock' mode='client'/>
>       <model type='virtio'/>
>       <driver queues='4'/>
> </interface>
>
> Signed-off-by: Maxime Leroy <maxime.leroy at 6wind.com>
> Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
> ---
>  docs/formatdomain.html.in                                 | 11 +++++++++--
>  src/qemu/qemu_command.c                                   | 15 ++++++++++++++-
>  ...stuser.args => qemuxml2argv-net-vhostuser-multiq.args} |  6 +++++-
>  ...hostuser.xml => qemuxml2argv-net-vhostuser-multiq.xml} |  6 ++++++
>  tests/qemuxml2argvtest.c                                  |  3 +++
>  5 files changed, 37 insertions(+), 4 deletions(-)
>  copy tests/qemuxml2argvdata/{qemuxml2argv-net-vhostuser.args => qemuxml2argv-net-vhostuser-multiq.args} (75%)
>  copy tests/qemuxml2argvdata/{qemuxml2argv-net-vhostuser.xml => qemuxml2argv-net-vhostuser-multiq.xml} (87%)
>
> diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
> index 72ad54cee188..85238a16af8d 100644
> --- a/docs/formatdomain.html.in
> +++ b/docs/formatdomain.html.in
> @@ -4260,7 +4260,8 @@ qemu-kvm -net nic,model=? /dev/null
>          type='virtio'/></code>, multiple packet processing queues can be
>          created; each queue will potentially be handled by a different
>          processor, resulting in much higher throughput.
> -        <span class="since">Since 1.0.6 (QEMU and KVM only)</span>
> +        <span class="since">Since 1.0.6 (QEMU and KVM only) and for vhost-user
> +          since 1.2.17</span>
>        </dd>
>        <dt><code>host</code> offloading options</dt>
>        <dd>
> @@ -4581,9 +4582,15 @@ qemu-kvm -net nic,model=? /dev/null
>    <devices>
>      <interface type='vhostuser'>
>        <mac address='52:54:00:3b:83:1a'/>
> -      <source type='unix' path='/tmp/vhost.sock' mode='server'/>
> +      <source type='unix' path='/tmp/vhost1.sock' mode='server'/>
>        <model type='virtio'/>
>      </interface>
> +    <interface type='vhostuser'>
> +      <mac address='52:54:00:3b:83:1b'/>
> +      <source type='unix' path='/tmp/vhost2.sock' mode='client'/>
> +      <model type='virtio'/>
> +      <driver queues='5'/>
> +    </interface>
>    </devices>
>    ...</pre>
>
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index 61faa576e11b..f805f6700e71 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -8089,6 +8089,7 @@ qemuBuildVhostuserCommandLine(virCommandPtr cmd,
>  {
>      virBuffer chardev_buf = VIR_BUFFER_INITIALIZER;
>      virBuffer netdev_buf = VIR_BUFFER_INITIALIZER;
> +    unsigned int queues = 1;

Why setting queues to 1 and not to net->driver.virtio.queues directly ?

>      char *nic = NULL;
>
>      if (!qemuDomainSupportsNetdev(def, qemuCaps, net)) {
> @@ -8126,13 +8127,25 @@ qemuBuildVhostuserCommandLine(virCommandPtr cmd,
>      virBufferAsprintf(&netdev_buf, "type=vhost-user,id=host%s,chardev=char%s",
>                        net->info.alias, net->info.alias);
>
> +    queues = net->driver.virtio.queues;
> +    if (queues) {

I know it's never set to 1 thanks to your patch: "conf: Ignore
multiqueue with one queue."

Anyway I think we should check if queues is superior to 1 for
improving code readability.




More information about the libvir-list mailing list