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

In case of non PMD threads we don’t have to flush as the packets aren't queued 
and bursted instantly. The call path on the transmit side is:

Vswitchd thread:    

    dp_execute_cb()
          netdev_send()           
                netdev_dpdk_send__() 
                        dpdk_do_tx_copy() 
                               netdev_dpdk_eth_tx_burst().     [ Burst packets 
immediately]

- Bhanuprakash.

>
>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