[ovs-dev] [PATCH v6 00/12] Reconfigure netdev at runtime

Kavanagh, Mark B mark.b.kavanagh at intel.com
Wed Mar 30 14:41:55 UTC 2016


Hi Daniele,

Thanks for addressing my comments; all LGTM now.

=>	Acked-by: Mark Kavanagh <mark.b.kavanagh at intel.com>

BTW, any idea if Ben is planning to review this patchset soon?

Thanks,
Mark

>
>Currently we treat set_multiq() calls specially in netdev and dpif-netdev:
>every pmd thread must be stopped and set_multiq() is allowed to destroy and
>recreate the device.
>
>I think we can improve this by:
>* Generalizing the mechanism to allow changing other parameters at runtime
>  (such as MTU).
>* Involving less the above layer (dpif-netdev).  The request for changes
>  often comes from below (netdev_dpdk_set_config(), or the vhost new_device()
>  callback).  There's no need for dpif-netdev to remember the requested value,
>  all that it needs to know is that a configuration change is requested.
>
>This series implements exactly this: a mechanism to allow a netdev provider
>to request configuration changes, to which dpif-netdev will respond by
>stopping rx/tx and calling a netdev function to appy the new configuration.
>
>The new mechanism is used in this series to replace the set_multiq() call,
>but the idea is to use it also at least for:
>
>* Changing the MTU at runtime
>* Automatically detecting the number of rx queues for a vhost-user device
>
>The first commits also clean up some code in dpif-netdev and make the ports
>cmap fully RCU protected.
>
>The series is also available here:
>
>https://github.com/ddiproietto/ovs/tree/configchangesv6
>
>v6:
>* Rebased against master.
>* Check return value of netdev_rxq_open().
>* Fix comment.
>
>v5:
>* Style fixes.
>* Fixed a bug in dp_netdev_free() in patch 6.
>
>v4:
>* Added another patch to uniform names of variables in netdev-dpdk (no
>  functional change)
>* Update some netdev comments to document the relation between
>  netdev_set_multiq() and netdev_reconfigure()
>* Clarify that when netdev_reconfigure() is called no call to netdev_send()
>  or netdev_rxq_recv() must be issued.
>* Move check to skip reconfiguration in netdev_dpdk_reconfigure() before
>  rte_eth_dev_stop().
>
>v3:
>* Fixed another outdated comment about rx queue configuration, as pointed out
>  by Mark
>* Removed unnecessary and buggy initialization of requested_n_rxq in
>  reconfigure_pmd_threads().
>* Removed unused 'err' variable in netdev_dpdk_set_multiq().
>* Changed comparison in netdev_set_multiq() to use previous
>  'netdev->requested_n_txq' instead of 'netdev->up.n_txq'
>* Return immediately in netdev_dpdk_reconfigure() if configuration didn't
>  change anything.
>
>v2:
>* Fixed do_add_port(): we have to call netdev_reconfigure() before opening
>  the rxqs.  This prevents memory leaks, and makes sure that the datapath
>  polls the appropriate number of queues
>* Fixed netdev_dpdk_vhost_set_multiq(): it must call
>  netdev_request_reconfigure(). Since it is now equal to
>  netdev_dpdk_set_multiq(), the two function have been merged.
>* Fixed netdev_dpdk_set_config(): dev->requested_n_rxq is now accessed
>  while holding the appropriate mutex.
>* Fixed some outdated comments about rx queue configuration.
>
>
>Daniele Di Proietto (12):
>  netdev-dpdk: Consistent variable naming.
>  dpif-netdev: Proper error handling in do_add_port().
>  dpif-netdev: Keep count of elements in port->rxq[].
>  dpif-netdev: Do not keep refcount for ports.
>  dpif-netdev: Remove useless dpif-dummy/delete-port appctl.
>  dpif-netdev: Wait an RCU grace period before freeing ports.
>  ofproto-dpif: Call dpif_poll_threads_set() before dpif_run()
>  dpif-netdev: Change pmd thread configuration in dpif_netdev_run().
>  dpif-netdev: Document locking discipline for non_pmd_mutex.
>  dpif-netdev: Fix reconfigure_pmd_threads().
>  netdev: Add reconfigure request mechanism.
>  netdev-dpdk: Use ->reconfigure() call to change rx/tx queues.
>
> lib/dpif-netdev.c      | 441 ++++++++++++++++++---------------
> lib/dpif-provider.h    |   3 +-
> lib/netdev-bsd.c       |   1 +
> lib/netdev-dpdk.c      | 660 +++++++++++++++++++++++++------------------------
> lib/netdev-dummy.c     |   1 +
> lib/netdev-linux.c     |   1 +
> lib/netdev-provider.h  |  50 ++--
> lib/netdev-vport.c     |   1 +
> lib/netdev.c           |  72 ++++--
> lib/netdev.h           |   7 +-
> ofproto/ofproto-dpif.c |   4 +-
> tests/bridge.at        |   4 +-
> 12 files changed, 675 insertions(+), 570 deletions(-)
>
>--
>2.1.4




More information about the dev mailing list