[ovs-dev] [PATCH v3 2/3] dpif-netdev: Avoid port's reconfiguration on pmd-cpu-mask changes.
Stokes, Ian
ian.stokes at intel.com
Thu Jun 15 13:19:42 UTC 2017
> -----Original Message-----
> From: Ilya Maximets [mailto:i.maximets at samsung.com]
> Sent: Thursday, June 15, 2017 12:37 PM
> To: dev at openvswitch.org; Darrell Ball <dball at vmware.com>
> Cc: Heetae Ahn <heetae82.ahn at samsung.com>; Daniele Di Proietto
> <diproiettod at ovn.org>; Ben Pfaff <blp at ovn.org>; Pravin Shelar
> <pshelar at ovn.org>; Loftus, Ciara <ciara.loftus at intel.com>; Stokes, Ian
> <ian.stokes at intel.com>; Kevin Traynor <ktraynor at redhat.com>; Ilya Maximets
> <i.maximets at samsung.com>
> Subject: [PATCH v3 2/3] dpif-netdev: Avoid port's reconfiguration on pmd-
> cpu-mask changes.
>
> Reconfiguration of HW NICs may lead to packet drops.
> In current model all physical ports will be reconfigured each time number
> of PMD threads changed. Since we not stopping threads on pmd-cpu-mask
> changes, this patch will help to further decrease port's downtime by
> setting the maximum possible number of wanted tx queues to avoid
> unnecessary reconfigurations.
>
> Signed-off-by: Ilya Maximets <i.maximets at samsung.com>
> Tested-by: Ian Stokes <ian.stokes at intel.com>
> ---
> lib/dpif-netdev.c | 26 +++++++++++++++++++++-----
> 1 file changed, 21 insertions(+), 5 deletions(-)
>
> diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index c0bcca0..d2443da
> 100644
> --- a/lib/dpif-netdev.c
> +++ b/lib/dpif-netdev.c
> @@ -3450,7 +3450,7 @@ reconfigure_datapath(struct dp_netdev *dp) {
> struct dp_netdev_pmd_thread *pmd;
> struct dp_netdev_port *port;
> - int wanted_txqs;
> + int needed_txqs, wanted_txqs;
>
> dp->last_reconfigure_seq = seq_read(dp->reconfigure_seq);
>
> @@ -3458,7 +3458,15 @@ reconfigure_datapath(struct dp_netdev *dp)
> * on the system and the user configuration. */
> reconfigure_pmd_threads(dp);
>
> - wanted_txqs = cmap_count(&dp->poll_threads);
> + /* We need 1 Tx queue for each thread to avoid locking, but we will
> try
> + * to allocate the maximum possible value to minimize the number of
> port
> + * reconfigurations. */
> + needed_txqs = cmap_count(&dp->poll_threads);
> + /* (n_cores + 1) is the maximum that we might need to have.
> + * Additional queue is for non-PMD threads. */
> + wanted_txqs = ovs_numa_get_n_cores();
> + ovs_assert(wanted_txqs != OVS_CORE_UNSPEC);
> + wanted_txqs++;
>
> /* The number of pmd threads might have changed, or a port can be
> new:
> * adjust the txqs. */
> @@ -3471,9 +3479,17 @@ reconfigure_datapath(struct dp_netdev *dp)
>
> /* Check for all the ports that need reconfiguration. We cache this
> in
> * 'port->reconfigure', because netdev_is_reconf_required() can
> change at
> - * any time. */
> + * any time.
> + * Also mark for reconfiguration all ports which will likely change
> their
> + * 'dynamic_txqs' parameter. It's required to stop using them before
> + * changing this setting and it's simpler to mark ports here and
> allow
> + * 'pmd_remove_stale_ports' to remove them from threads. There will
> be
> + * no actual reconfiguration in 'port_reconfigure' because it's
> + * unnecessary. */
> HMAP_FOR_EACH (port, node, &dp->ports) {
> - if (netdev_is_reconf_required(port->netdev)) {
> + if (netdev_is_reconf_required(port->netdev)
> + || (port->dynamic_txqs
> + != (netdev_n_txq(port->netdev) < needed_txqs))) {
> port->need_reconfigure = true;
> }
> }
> @@ -3508,7 +3524,7 @@ reconfigure_datapath(struct dp_netdev *dp)
> seq_change(dp->port_seq);
> port_destroy(port);
> } else {
> - port->dynamic_txqs = netdev_n_txq(port->netdev) <
> wanted_txqs;
> + port->dynamic_txqs = netdev_n_txq(port->netdev) <
> + needed_txqs;
> }
> }
>
LGTM,
Acked-by: Ian Stokes <ian.stokes at intel.com>
> --
> 2.7.4
More information about the dev
mailing list