]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commit
netfilter: nf_tables: coalesce multiple notifications into one skbuff
authorPablo Neira Ayuso <pablo@netfilter.org>
Thu, 27 Aug 2020 17:28:42 +0000 (19:28 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Tue, 8 Sep 2020 11:02:44 +0000 (13:02 +0200)
commit67cc570edaa02016a8685a06a0ee91f05a6277d9
treeb63abd09d1a7c144ddd786f29bec05365fb276f2
parent1cc5ef91d2ff94d2bf2de3b3585423e8a1051cb6
netfilter: nf_tables: coalesce multiple notifications into one skbuff

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>
include/net/netns/nftables.h
net/netfilter/nf_tables_api.c