On 5/30/17, 7:12 AM, "Ilya Maximets" <i.maxim...@samsung.com> wrote:

    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.maxim...@samsung.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 596d133..79db770 100644
    --- a/lib/dpif-netdev.c
    +++ b/lib/dpif-netdev.c
    @@ -3453,7 +3453,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);
     
    @@ -3461,7 +3461,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++;

I don’t think PMD mask changes are common, so this patch is trying to optimize 
a 
rare disruptive event that can/will be scheduled by the administrator.

Based on the actual number of queues supported and the number of cores present,
this optimization may or may not work. It is unpredictable whether there will 
be benefit
in a particular case from the user POV.
If I were the administrator, I would try to error on the conservative side 
anyways if I could
not predict the result.

Did I miss something ?

         /* The number of pmd threads might have changed, or a port can be new:
          * adjust the txqs. */
    @@ -3474,9 +3482,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;
             }
         }
    @@ -3510,7 +3526,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;
             }
         }
     
    -- 
    2.7.4
    
    

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to