HomeFreeBSD

Now that IP reassembly is no longer under single lock, book-keeping amount

Description

Now that IP reassembly is no longer under single lock, book-keeping amount
of allocations in V_nipq is racy. To fix that, we would simply stop doing
book-keeping ourselves, and rely on UMA doing that. There could be a
slight overcommit due to caches, but that isn't a big deal.

o V_nipq and V_maxnipq go away.
o net.inet.ip.fragpackets is now just SYSCTL_UMA_CUR()
o net.inet.ip.maxfragpackets could have been just SYSCTL_UMA_MAX(), but

historically it has special semantics about values of 0 and -1, so
provide sysctl_maxfragpackets() to handle these special cases.

o If zone limit lowers either due to net.inet.ip.maxfragpackets or due to

kern.ipc.nmbclusters, then new function ipq_drain_tomax() goes over
buckets and frees the oldest packets until we are in the limit.
The code that (incorrectly) did that in ip_slowtimo() is removed.

o ip_reass() doesn't check any limits and calls uma_zalloc(M_NOWAIT).

If it fails, a new function ipq_reuse() is called. This function will
find the oldest packet in the currently locked bucket, and if there is
none, it will search in other buckets until success.

Sponsored by: Nginx, Inc.

Details

Provenance
glebiusAuthored on
Parents
rS281341: rtsold does not need to link to libkvm
Branches
Unknown
Tags
Unknown

Event Timeline