When the revalidator thread takes a long time to dump data path flows (e.g. due to busy CPU), it reduces the maximum limit for new flows that can be added. This results in more upcalls for packets which do not find data path flows and temporarily reduces overall throughput. When the situation improves and the revalidator gets enough CPU cycles, it should increase the flow limit allowing more flows to get inserted.
Currently the flow limit does not increase if the existing number of flows is less than 2000 and does not allow any new flows due to incorrect condition check. This results in a permanent drop in performance in OVS with no automatic recovery. This patch fixes the conditional check for increasing flow limit. Signed-off-by: Vishal Deep Ajmera <[email protected]> --- ofproto/ofproto-dpif-upcall.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ofproto/ofproto-dpif-upcall.c b/ofproto/ofproto-dpif-upcall.c index 85f5792..6222207 100644 --- a/ofproto/ofproto-dpif-upcall.c +++ b/ofproto/ofproto-dpif-upcall.c @@ -931,8 +931,8 @@ udpif_revalidator(void *arg) flow_limit /= duration / 1000; } else if (duration > 1300) { flow_limit = flow_limit * 3 / 4; - } else if (duration < 1000 && n_flows > 2000 - && flow_limit < n_flows * 1000 / duration) { + } else if (duration < 1000 && + flow_limit < n_flows * 1000 / duration) { flow_limit += 1000; } flow_limit = MIN(ofproto_flow_limit, MAX(flow_limit, 1000)); -- 1.9.1 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
