On 1/29/21 2:22 PM, Dumitru Ceara wrote:
On 1/29/21 7:59 PM, Mark Michelson wrote:
Hi Dumitru,
Hi Mark,
Thanks for the review!
Overall, this looks like a good patch series. I don't have any
specific findings, but I have some general points/questions.
1) There are no tests. With the isolated lflow-cache.[hc] API, adding
unit tests seems like it wouldn't be too difficult.
You're right, I was a bit sloppy, I'll add tests in v2.
2) Has there been any proven benefit to LCACHE_T_CONJ_ID? Reading
through consider_logical_flow(), LCACHE_T_CONJ_ID and LCACHE_T_NONE
require the same work to be done. I suppose it allows more time before
the conj_id overflows, but is that really worth taking up potentially
limited cache space?
The reason for caching conj_id offsets is to not disrupt traffic during
lflow processing (incremental or not), and was added by:
2662498bfd13 ("ovn-controller: Persist the conjunction ids allocated for
conjuctive matches.")
We could add more knobs to configure what types of lflow cache entries
we want stored or not. On the other hand that means more knobs :)
What do you think?
No more knobs!
I reviewed that particular commit back before it went in. It had slipped
my mind about how persisting the conj_ids means not having to rewrite
the OF, and how that results in less interruptions in traffic.
So for the purposes of reducing ovn-controller CPU, LCACHE_T_CONJ_ID
isn't very beneficial, but it still has some importance.
3) It seems like cached lflows of type LCACHE_T_MATCHES are the most
valuable, since caching them saves the most amount of work in
consider_logical_flow(). Is there any way to give preference to these
types of lflows over others? It would be a shame if the cache filled
up with LCACHE_T_EXPR and LCACHE_T_CONJ_ID lflows, and that prevented
LCACHE_T_MATCHES flows from being cached as a result.
That's a good idea, I'll think of a way to evacuate "less important"
cache entries if we're at the limit of the cache size.
4) We calculate the memory of each lflow_cache_value whenever it is
added to the cache. Does this incur a noticeable cost? If the
lflow_cache has no memory limit, then would it be more beneficial not
to calculate the memory when the value is added, but instead wait
until a memory report is requested?
Initially I tried computing the expr/matches sizes on the fly while
parsing/building matches but that turned out to be quite complex due to
how expressions are parsed/combined/simplified. I'll have another go at
it though.
Otherwise, your suggestion is reasonable, if there's no memory limit it
might make sense to postpone computing sizes.
I did run some scale tests and I didn't notice any noticeable hit in
performance even with the additional size computations.
My suggestion hinges on noticeable performance drops. If scale tests
don't show anything obvious from calculating memory usage on each cache
add, then it probably isn't necessary to change what you've already written.
Thanks,
Dumitru
On 1/28/21 11:25 AM, Dumitru Ceara wrote:
Scale tests have identified the lflow cache to be one of the main memory
consumers in ovn-controller. This series refactors the lflow cache code
and adds configuration knobs to limit the size (in lines and/or memory)
of the cache.
Dumitru Ceara (6):
lflow: Refactor convert_match_to_expr() to explicitly consume
prereqs.
lflow-cache: Move the lflow cache to its own module.
lflow-cache: Add coverage counters.
lflow-cache: Reclaim heap memory after cache flush.
lflow-cache: Make maximum number of cache entries configurable.
lflow-cache: Make max cache memory usage configurable.
NEWS | 5 +
configure.ac | 1
controller/automake.mk | 2
controller/chassis.c | 44 +++++
controller/lflow-cache.c | 282
++++++++++++++++++++++++++++++++
controller/lflow-cache.h | 81 +++++++++
controller/lflow.c | 349
+++++++++++++--------------------------
controller/lflow.h | 6 -
controller/ovn-controller.8.xml | 23 +++
controller/ovn-controller.c | 65 ++++---
include/ovn/expr.h | 2
lib/expr.c | 46 +++++
12 files changed, 635 insertions(+), 271 deletions(-)
create mode 100644 controller/lflow-cache.c
create mode 100644 controller/lflow-cache.h
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev