]> git.baikalelectronics.ru Git - kernel.git/commit
Merge branch 'add-a-bhash2-table-hashed-by-port-address'
authorJakub Kicinski <kuba@kernel.org>
Sat, 21 May 2022 01:16:31 +0000 (18:16 -0700)
committerJakub Kicinski <kuba@kernel.org>
Sat, 21 May 2022 01:16:31 +0000 (18:16 -0700)
commit07bc7f95c32b77b60f387bb99bd3f07a82b9a985
tree464be1977af3e8290dd0f519c5c3849299b20c3a
parentc1d516b40f98514c0d4ee641704cdd2a1a231bcc
parentd1bfd417cd0a05e790b44f19f93f3c41cc84024c
Merge branch 'add-a-bhash2-table-hashed-by-port-address'

Joanne Koong says:

====================
Add a bhash2 table hashed by port + address

This patchset proposes adding a bhash2 table that hashes by port and address.
The motivation behind bhash2 is to expedite bind requests in situations where
the port has many sockets in its bhash table entry, which makes checking bind
conflicts costly especially given that we acquire the table entry spinlock
while doing so, which can cause softirq cpu lockups and can prevent new tcp
connections.

We ran into this problem at Meta where the traffic team binds a large number
of IPs to port 443 and the bind() call took a significant amount of time
which led to cpu softirq lockups, which caused packet drops and other failures
on the machine

The patches are as follows:
1/2 - Adds a second bhash table (bhash2) hashed by port and address
2/2 - Adds a test for timing how long an additional bind request takes when
the bhash entry is populated

When experimentally testing this on a local server for ~24k sockets bound to
the port, the results seen were:

ipv4:
before - 0.002317 seconds
with bhash2 - 0.000018 seconds

ipv6:
before - 0.002431 seconds
with bhash2 - 0.000021 seconds
====================

Link: https://lore.kernel.org/r/20220520001834.2247810-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>