Hi Billy, >Hi All, > >This patch set provides a method to request ingress scheduling on interfaces. >It also provides an implemtation of same for DPDK physical ports. > >This allows specific packet types to be: >* forwarded to their destination port ahead of other packets. >and/or >* be less likely to be dropped in an overloaded situation. > >It was previously discussed >https://mail.openvswitch.org/pipermail/ovs-discuss/2017-May/044395.html >and RFC'd >https://mail.openvswitch.org/pipermail/ovs-dev/2017-July/335237.html > >Limitations of this patch: >* The patch uses the Flow Director filter API in DPDK and has only been tested >on Fortville (XL710) NIC. >* Prioritization is limited to: >** eth_type >** Fully specified 5-tuple src & dst ip and port numbers for UDP & TCP packets >* ovs-appctl dpif-netdev/pmd-*-show o/p should indicate rxq prioritization. >* any requirements for a more granular prioritization mechanism > >Initial results: >* even when userspace OVS is very much overloaded and > dropping significant numbers of packets the drop rate for prioritized traffic > is running at 1/1000th of the drop rate for non-prioritized traffic. > >* the latency profile of prioritized traffic through userspace OVS is also much > improved > >1e0 |* > |* >1e-1 |* | Non-prioritized pkt latency > |* * Prioritized pkt latency >1e-2 |* > |* >1e-3 |* | > |* | >1e-4 |* | | | > |* |* | | >1e-5 |* |* | | | > |* |* |* | | | >1e-6 |* |* |* |* | | > |* |* |* |* |* | >1e-7 |* |* |* |* |* |* > |* |* |* |* |* |* >1e-8 |* |* |* |* |* |* > 0-1 1-20 20-40 40-50 50-60 60-70 ... 120-400 > Latency (us) > > Proportion of packets per latency bin @ 80% Max Throughput > (Log scale) >
Thanks for working on this feature. I started reviewing the code initially but later decided to test it first as it uses XL710 NIC Flow director features and wanted to Know the implications if any. I had few observations here and would like to know if you have seen this during your unit tests. 1) With this patch series, Rx Burst Bulk Allocation call back function is invoked instead of vector rx function. Meaning i40e_recv_pkts_bulk_alloc() gets invoked instead of i40e_recv_pkts_vec(). Please check i40e_set_rx_function() of i40e DPDK drivers. I am speculating this may be due to the enabling flow director and rules. I don't know the implications of using bulk_alloc() function, maybe we should check with DPDK guys on this. 2) When I tried to prioritize the udp pkts for specific IPs and Ports, I see a massive performance drop. I am using XL710 NIC with stable firmware version. Below are my steps. - Start OvS and make sure the the n_rxq for DPDK0, DPDK1 ports is set to 2. - Do simple P2P test with single stream(ip_src=8.18.8.1,ip_dst=101.10.10.1,udp_src=10001,udp_dst=5001) and check the throughput. - Prioritize the active stream. ovs-vsctl set interface dpdk0 other_config:ingress_sched=udp,ip_src=8.18.8.1,ip_dst=101.10.10.1,udp_src=10001,udp_dst=5001 - Throughput drop is observed now. (~1.7Mpps) A bit of debugging in to case 2, I found that "miniflow_hash_5tuple()" is getting invoked and consuming 10% of the total cycles. one of the commits had below lines. ----------------------------dpdk_eth_dev_queue_setup------------------------------ /* Ingress scheduling requires ETH_MQ_RX_NONE so limit it to when exactly * two rxqs are defined. Otherwise MQ will not work as expected. */ if (dev->ingress_sched_str && n_rxq == 2) { conf.rxmode.mq_mode = ETH_MQ_RX_NONE; } else { conf.rxmode.mq_mode = ETH_MQ_RX_RSS; } --------------------------------------------------------------------------------------------- Does ingress scheduling turn off RSS? This will be big drawback as calculating hash in SW consumes significant cycles. 3) This is another corner case. - Here n_rxq set to 4 for my DPDK ports. start OvS and traffic is started and throughput is as expected. - Now prioritize the stream ovs-vsctl set interface dpdk0 other_config:ingress_sched=udp,ip_src=8.18.8.1,ip_dst=101.10.10.1,udp_src=10001,udp_dst=5001 - The above command shouldn't take in to affect as n_rxq is set to 4 and not 2 and the same is logged appropriately. "2017-07-28T11:11:57.792Z|00104|netdev_dpdk|ERR|Interface dpdk0: Ingress scheduling config ignored; Requires n_rxq==2. 2017-07-28T11:11:57.809Z|00105|dpdk|INFO|PMD: i40e_pf_config_rss(): Max of contiguous 4 PF queues are configured" - However the throughput drop is observed in this case too. Let me know if the above is reproducible on your setup. Meanwhile I will review the code. Regards, Bhanuprakash. _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev