In PMD, cycle cost for each rxq is saved so that we know each rxq's load. But rxq that doesn't receive a packet is skipped. In fact, polling no-packet rxq costs cycles as well. In my test, 100w pps rxq(vhostuser) cost cycles 87,553,850,086 while no-packet rxq costs cycles 353,402,306.
In asign mode "group", ovs always pick the lowest load pmd. If we have too many(let's say 100) no-packet rxqs, these rxqs will be asigned to the same pmd. Because no load increase when a no-packet rxq to pmd. To avoid this, this patch count cycles for no-packet rxq as well. Signed-off-by: lic121 <lic...@chinatelecom.cn> --- lib/dpif-netdev.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index a45b460..b30a098 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -5335,8 +5335,8 @@ dp_netdev_process_rxq_port(struct dp_netdev_pmd_thread *pmd, dp_netdev_pmd_flush_output_packets(pmd, false); } else { - /* Discard cycles. */ - cycle_timer_stop(&pmd->perf_stats, &timer); + cycles = cycle_timer_stop(&pmd->perf_stats, &timer); + dp_netdev_rxq_add_cycles(rxq, RXQ_CYCLES_PROC_CURR, cycles); if (error != EAGAIN && error != EOPNOTSUPP) { static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5); -- 1.8.3.1 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev