From fbd8fb09c50bcee3f046dce2281f25baa4e14927 Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Fri, 21 Aug 2020 12:04:12 +0200 Subject: src: add chain hashtable cache This significantly improves ruleset listing time with large rulesets (~50k rules) with _lots_ of non-base chains. # time nft list ruleset &> /dev/null Before this patch: real 0m11,172s user 0m6,810s sys 0m4,220s After this patch: real 0m4,747s user 0m0,802s sys 0m3,912s This patch also removes list_bindings from netlink_ctx since there is no need to keep a temporary list of chains anymore. Signed-off-by: Pablo Neira Ayuso --- include/rule.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'include/rule.h') diff --git a/include/rule.h b/include/rule.h index f2f82cc0..62d25be2 100644 --- a/include/rule.h +++ b/include/rule.h @@ -8,6 +8,7 @@ #include /* For NFTNL_CTTIMEOUT_ARRAY_MAX. */ #include #include +#include /** * struct handle_spec - handle ID @@ -153,6 +154,7 @@ struct table { struct handle handle; struct location location; struct scope scope; + struct list_head *chain_htable; struct list_head chains; struct list_head sets; struct list_head objs; @@ -217,6 +219,7 @@ struct hook_spec { */ struct chain { struct list_head list; + struct list_head hlist; struct handle handle; struct location location; unsigned int refcnt; @@ -242,7 +245,6 @@ extern const char *chain_hookname_lookup(const char *name); extern struct chain *chain_alloc(const char *name); extern struct chain *chain_get(struct chain *chain); extern void chain_free(struct chain *chain); -extern void chain_add_hash(struct chain *chain, struct table *table); extern struct chain *chain_lookup(const struct table *table, const struct handle *h); extern struct chain *chain_lookup_fuzzy(const struct handle *h, -- cgit v1.2.3