We have a problem in UMA where creating new zones requires a traversal
of all existing zones (in order to find a unique name for the vm.uma
sysctl subtree). This means that per-VNET UMA zones can be expensive to
create if one creates many VNET jails in a row. This itself is a
problem, but I don't see a quick solution.
Ideally we would avoid creating per-VNET zones in the first place, and
it turns out that the TCP fastopen and SACK code seems to create several
per-VNET zones. I can't see a reason for this.
So: make fastopen and SACK zones global. Move some fastopen structure
definitions into tcp_fastopen.c, as they don't need to be public.
Note, this means that we don't get any leak checking when a per-VNET
zone is destroyed. That is a minor regression, but probably acceptable?
In the medium term I am hoping to add a general kernel memory leak
detection mechanism.
Reported by: bapt ("creating many VNET jails in a row is slow")