Re: [RFC PATCH 00/11] OVS eBPF datapath.
William Tu
On Tue, Jul 3, 2018 at 10:56 AM, Alexei Starovoitov
<alexei.starovoitov@...> wrote: On Thu, Jun 28, 2018 at 07:19:35AM -0700, William Tu wrote:I mean "new" rules being added at 10 rules/sec.Hi Alexei,is this a typo? you probably meant 10K rule updates a second ? Update rate might be much higher. Last time I've dealt with these algorithms we had 100K acl updates a second.When adding a new rule, do these algorithms require rebuilding the entire tree? In our evaluation, updating an existing entry in the decision tree performs OK, because it is equal to lookup and replace, and lookup is fast, update is just atomic swap. But inserting a new rule is slow, because it requires re-building the tree using all existing rules. And we see new rule being added at rate 10 rules per second. So we are constantly rebuilding the entire tree. If the entire tree has 100k of rules, it takes around 2 seconds to rebuild, based on the dpdk acl library. And without an incremental algorithm, adding 1 new rule will trigger rebuilding the 100k of rules, and it is too slow. Reading through HyperCuts and EffiCuts, I'm not sure how it supports incrementally adding a new rule, without rebuilding the entire tree. http://ccr.sigcomm.org/online/files/p207.pdf http://cseweb.ucsd.edu/~susingh/papers/hyp-sigcomm03.pdf The HyperCuts papers says "A fast update algorithm can also be implemented; however we do not go into the details of incremental update in this paper" yes, now we store the flow key in percpu array with 1 element.have you tried using per-cpu array of one element with large valueMostly related to stack. The flow key OVS uses (struct sw_flow_key)c. Verifier limitation.Not sure what limitations you're concerned about. In the latest verifier most of the operations that can be done with the stackOnce the flow key is stored in map, another eBPF program needs to use that key to lookup flow table (another map). So we have to store the flow key on stack first, in order to use it as key to lookup the flow table map. Is there a way to work around it? Thanks William
|
|