Thanks for all the suggestion and the testing! I've applied this to master with your acks,
Daniele On 15/05/2016 23:27, "Ilya Maximets" <i.maxim...@samsung.com> wrote: >I think, this is ready for merging. > >Tested-by: Ilya Maximets <i.maxim...@samsung.com> >Acked-by: Ilya Maximets <i.maxim...@samsung.com> > >On 23.04.2016 04:02, Daniele Di Proietto wrote: >> 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 >> * Move a DPDK vhost device to the proper NUMA socket >> >> The first commits refactor some code in dpif-netdev and, most importantly >> avoid using RCU for ports. Each thread will have its local copy of all the >> ports in the datapath. >> >> The series is also available here: >> >> https://github.com/ddiproietto/ovs/tree/configchangesv9 >> >> v9: >> * Fix HMAP_FOR_EACH_POP: now it's O(n) in the number of buckets >> * Avoid using & in clang thread safety annotations >> * Fix for non pmd devices: dp_netdev_set_pmds_on_numa() and >> dp_netdev_set_nonpmd() now add the ports to the pmd local cache. >> * Merged patch "dpif-netdev: Remove duplicate code in >> dp_netdev_set_pmds_on_numa()." with "dpif-netdev: Add pmd thread >> local port cache for transmission." >> >> v8: >> * Update comment in rcu.h: ovs_mutex_cond_wait doesn't quiesce. >> * Change 'set_multiq' to 'set_tx_multiq'. >> * Added documentation in comments and commit messages explaining thread local >> port cache. >> * Fixed style issues reported by checkpatch.py. >> * Fixed race condition when deleting pmd thread. >> >> v7: >> * Dropped already applied patches. >> * Stop using RCU for ports. >> * Rebased against master. >> >> 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 (15): >> dpif-netdev: Destroy 'port_mutex' in dp_netdev_free(). >> dpif-netdev: Remove unused 'index' in dp_netdev_pmd_thread. >> dpif-netdev: Factor out port_create() from do_add_port(). >> dpif-netdev: Add functions to modify rxq without reloading pmd >> threads. >> dpif-netdev: Fix race condition in pmd thread initialization. >> hmap: Add HMAP_FOR_EACH_POP. >> dpif-netdev: Add pmd thread local port cache for transmission. >> hmap: Use struct for hmap_at_position(). >> dpif-netdev: Use hmap for ports. >> ovs-thread: Do not quiesce in ovs_mutex_cond_wait(). >> ofproto-dpif: Call dpif_poll_threads_set() before dpif_run(). >> dpif-netdev: Change pmd thread configuration in dpif_netdev_run(). >> dpif-netdev: Handle errors in reconfigure_pmd_threads(). >> netdev: Add reconfigure request mechanism. >> netdev-dpdk: Use ->reconfigure() call to change rx/tx queues. >> >> lib/cfm.c | 5 +- >> lib/dpif-netdev.c | 756 >> ++++++++++++++++++++++++++++--------------- >> lib/dpif-provider.h | 3 +- >> lib/hmap.c | 26 +- >> lib/hmap.h | 27 +- >> lib/id-pool.c | 5 +- >> lib/learning-switch.c | 5 +- >> lib/netdev-bsd.c | 3 +- >> lib/netdev-dpdk.c | 194 +++++------ >> lib/netdev-dummy.c | 3 +- >> lib/netdev-linux.c | 8 +- >> lib/netdev-provider.h | 50 ++- >> lib/netdev-vport.c | 3 +- >> lib/netdev.c | 75 +++-- >> lib/netdev.h | 7 +- >> lib/odp-util.c | 7 +- >> lib/ovs-rcu.h | 3 +- >> lib/ovs-thread.c | 2 - >> lib/sset.c | 12 +- >> lib/sset.h | 7 +- >> ofproto/bond.c | 10 +- >> ofproto/in-band.c | 5 +- >> ofproto/ofproto-dpif-ipfix.c | 5 +- >> ofproto/ofproto-dpif-xlate.c | 5 +- >> ofproto/ofproto-dpif.c | 12 +- >> ofproto/ofproto.c | 5 +- >> ofproto/pinsched.c | 5 +- >> ovn/controller-vtep/vtep.c | 5 +- >> ovn/controller/encaps.c | 5 +- >> ovn/controller/lport.c | 5 +- >> ovn/controller/ofctrl.c | 5 +- >> ovn/controller/physical.c | 4 +- >> ovn/controller/pinctrl.c | 5 +- >> ovn/lib/expr.c | 5 +- >> ovn/northd/ovn-northd.c | 10 +- >> ovsdb/monitor.c | 5 +- >> ovsdb/row.c | 5 +- >> tests/library.at | 2 +- >> tests/test-hmap.c | 42 +++ >> vswitchd/system-stats.c | 6 + >> 40 files changed, 853 insertions(+), 499 deletions(-) >> _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev