67cc570eda
On x86_64, each notification results in one skbuff allocation which consumes at least 768 bytes due to the skbuff overhead. This patch coalesces several notifications into one single skbuff, so each notification consumes at least ~211 bytes, that ~3.5 times less memory consumption. As a result, this is reducing the chances to exhaust the netlink socket receive buffer. Rule of thumb is that each notification batch only contains netlink messages whose report flag is the same, nfnetlink_send() requires this to do appropriate delivery to userspace, either via unicast (echo mode) or multicast (monitor mode). The skbuff control buffer is used to annotate the report flag for later handling at the new coalescing routine. The batch skbuff notification size is NLMSG_GOODSIZE, using a larger skbuff would allow for more socket receiver buffer savings (to amortize the cost of the skbuff even more), however, going over that size might break userspace applications, so let's be conservative and stick to NLMSG_GOODSIZE. Reported-by: Phil Sutter <phil@nwl.cc> Acked-by: Phil Sutter <phil@nwl.cc> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
19 lines
366 B
C
19 lines
366 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _NETNS_NFTABLES_H_
|
|
#define _NETNS_NFTABLES_H_
|
|
|
|
#include <linux/list.h>
|
|
|
|
struct netns_nftables {
|
|
struct list_head tables;
|
|
struct list_head commit_list;
|
|
struct list_head module_list;
|
|
struct list_head notify_list;
|
|
struct mutex commit_mutex;
|
|
unsigned int base_seq;
|
|
u8 gencursor;
|
|
u8 validate_state;
|
|
};
|
|
|
|
#endif
|