At least, you have to flush non-PMD threads too.

Best regards, Ilya Maximets.

On 18.06.2017 22:56, Bhanuprakash Bodireddy wrote:
> Under low rate traffic conditions, there can be 2 issues.
>   (1) Packets potentially can get stuck in the intermediate queue.
>   (2) Latency of the packets can increase significantly due to
>        buffering in intermediate queue.
> 
> This commit handles the (1) issue by flushing the tx port queues from
> PMD processing loop. Also this commit addresses issue (2) by flushing
> the tx queues after every rxq port processing. This reduces the latency
> with out impacting the forwarding throughput.
> 
>    MASTER
>   --------
>    Pkt size  min(ns)   avg(ns)   max(ns)
>     512      4,631      5,022    309,914
>    1024      5,545      5,749    104,294
>    1280      5,978      6,159     45,306
>    1518      6,419      6,774    946,850
> 
>   MASTER + COMMIT
>   -----------------
>    Pkt size  min(ns)   avg(ns)   max(ns)
>     512      4,711      5,064    182,477
>    1024      5,601      5,888    701,654
>    1280      6,018      6,491    533,037
>    1518      6,467      6,734    312,471
> 
> PMDs can be teared down and spawned at runtime and so the rxq and txq
> mapping of the PMD threads can change. In few cases packets can get
> stuck in the queue due to reconfiguration and this commit helps flush
> the queues.
> 
> Suggested-by: Eelco Chaudron <echau...@redhat.com>
> Reported-at: 
> https://mail.openvswitch.org/pipermail/ovs-dev/2017-April/331039.html
> Signed-off-by: Bhanuprakash Bodireddy <bhanuprakash.bodire...@intel.com>
> Signed-off-by: Antonio Fischetti <antonio.fische...@intel.com>
> Co-authored-by: Antonio Fischetti <antonio.fische...@intel.com>
> Signed-off-by: Markus Magnusson <markus.magnus...@ericsson.com>
> Co-authored-by: Markus Magnusson <markus.magnus...@ericsson.com>
> Acked-by: Eelco Chaudron <echau...@redhat.com>
> ---
>  lib/dpif-netdev.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
> index d59208e..dfd88aa 100644
> --- a/lib/dpif-netdev.c
> +++ b/lib/dpif-netdev.c
> @@ -3761,6 +3761,8 @@ reload:
>          for (i = 0; i < poll_cnt; i++) {
>              dp_netdev_process_rxq_port(pmd, poll_list[i].rx,
>                                         poll_list[i].port_no);
> +
> +            dp_netdev_flush_txq_ports(pmd);
>          }
>  
>          if (lc++ > 1024) {
> @@ -3781,6 +3783,9 @@ reload:
>          }
>      }
>  
> +    /* Flush the queues as part of reconfiguration logic. */
> +    dp_netdev_flush_txq_ports(pmd);
> +
>      poll_cnt = pmd_load_queues_and_ports(pmd, &poll_list);
>      exiting = latch_is_set(&pmd->exit_latch);
>      /* Signal here to make sure the pmd finishes
> 
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to