[ovs-dev] [PATCH v3 1/3] dpif-netdev: Only poll enabled vhost queues.

Ian Stokes ian.stokes at intel.com
Wed Jun 26 18:15:45 UTC 2019


On 4/25/2019 4:22 PM, David Marchand wrote:
> We currently poll all available queues based on the max queue count
> exchanged with the vhost peer and rely on the vhost library in DPDK to
> check the vring status beneath.
> This can lead to some overhead when we have a lot of unused queues.
> 
> To enhance the situation, we can skip the disabled queues.
> On rxq notifications, we make use of the netdev's change_seq number so
> that the pmd thread main loop can cache the queue state periodically.
> 
> $ ovs-appctl dpif-netdev/pmd-rxq-show
> pmd thread numa_id 0 core_id 1:
>    isolated : true
>    port: dpdk0             queue-id:  0 (enabled)   pmd usage:  0 %
> pmd thread numa_id 0 core_id 2:
>    isolated : true
>    port: vhost1            queue-id:  0 (enabled)   pmd usage:  0 %
>    port: vhost3            queue-id:  0 (enabled)   pmd usage:  0 %
> pmd thread numa_id 0 core_id 15:
>    isolated : true
>    port: dpdk1             queue-id:  0 (enabled)   pmd usage:  0 %
> pmd thread numa_id 0 core_id 16:
>    isolated : true
>    port: vhost0            queue-id:  0 (enabled)   pmd usage:  0 %
>    port: vhost2            queue-id:  0 (enabled)   pmd usage:  0 %
> 
> $ while true; do
>    ovs-appctl dpif-netdev/pmd-rxq-show |awk '
>    /port: / {
>      tot++;
>      if ($5 == "(enabled)") {
>        en++;
>      }
>    }
>    END {
>      print "total: " tot ", enabled: " en
>    }'
>    sleep 1
> done
> 
> total: 6, enabled: 2
> total: 6, enabled: 2
> ...
> 
>   # Started vm, virtio devices are bound to kernel driver which enables
>   # F_MQ + all queue pairs
> total: 6, enabled: 2
> total: 66, enabled: 66
> ...
> 
>   # Unbound vhost0 and vhost1 from the kernel driver
> total: 66, enabled: 66
> total: 66, enabled: 34
> ...
> 
>   # Configured kernel bound devices to use only 1 queue pair
> total: 66, enabled: 34
> total: 66, enabled: 19
> total: 66, enabled: 4
> ...
> 
>   # While rebooting the vm
> total: 66, enabled: 4
> total: 66, enabled: 2
> ...
> total: 66, enabled: 66
> ...
> 
>   # After shutting down the vm
> total: 66, enabled: 66
> total: 66, enabled: 2
> 
> Signed-off-by: David Marchand <david.marchand at redhat.com>

Thank all for working on this. I didn't come across any issues during 
testing the last 2 days and code LGTM.

I've fixed the alignment issue spotted by Ilya below and pushed to master.

 > +     ds_put_format(reply, " %s", netdev_rxq_enabled(list[i].rxq->rx)
 > +                   ? "(enabled) " : "(disabled)");

The second line should be shifted to keep the ternary operator visually 
consistent:

ds_put_format(reply, " %s", netdev_rxq_enabled(list[i].rxq->rx)
                             ? "(enabled) " : "(disabled)");


Regards
Ian


More information about the dev mailing list