On Wed, Apr 28, 2021 at 08:12:06PM +0800, taoyunupt wrote: > Hi, > Recently I encountered a TCP connection performance problem, the test > tool is Apache benchmark. > The OVS in my environment is set for hardware offload solution. The > "Requests per second" is about 6000/s, it closed to non-offload solution. > > > "flow-lmit" has a dynamic balance in udpif_revalidator, it will modify > by the OVS condition(which is pind to "duration"). In the revalidate > function, when the number of flows is greater than twice the "flow-limit" , > the delete flow operation will be triggered to delete all flows; when the > number of flows is greater than the "flow-limit", the aging time will be > adjusted to 0.1s, Slowly delete flow. > > > > I found that the reason for the poor performance is that when the number > of flows in the datapath increases and the processing power of OVS decreases, > a large number of flow deletions are generated. > As we know, In the hardware offloading scenario, although there are a > lot of flows, in fact, apart from the first packet, there is no need to > process subsequent packets. > In my opinion, the dynamic balance mechanism is very necessary, but we > need to increase the value of “duration”, or provide some new switches for > some high-performance scenarios, such as hardware offloading. > Do we still need to restrict the number of flows so strictly? By the > way, do you have another solution to resolve this?
It's been a long time since I worked on this, but I recall two reasons for the flow limit. First, each flow takes up memory. Second, each flow must be revalidated periodically, meaning that it uses CPU as well. I don't, off-hand, remember the real reasons why the logic for deleting flows works as it does. It might be in the comments or the commit messages. But, I suspect, it is because above the flow-limit we want to try to reduce the amount of memory and CPU time dedicated to the cache and, if we arrive at twice the flow limit, we conclude that that try failed and that we must have a large number of very short flows so that caching is not very valuable anyhow. In a hardware offload scenario, we get rid of some costs (the cost of processing and forwarding packets and perhaps the memory cost in the datapath) but we still have the cost of revalidating them. When there are many flows, we add the extra cost of balancing flows between software and the offload hardware. Because of the remaining cost and the added ones when there is hardware offload, it's not obvious to me that we can stop limiting the number of flows. I think that experimentation and measurements would be needed. Perhaps this would be an adjustment to the dynamic algorithm, rather than a removal of it. _______________________________________________ discuss mailing list disc...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-discuss