]> git.baikalelectronics.ru Git - kernel.git/commit
selftests/net: Add test for timing a bind request to a port with a populated bhash...
authorJoanne Koong <joannelkoong@gmail.com>
Mon, 22 Aug 2022 18:10:22 +0000 (11:10 -0700)
committerJakub Kicinski <kuba@kernel.org>
Thu, 25 Aug 2022 02:30:09 +0000 (19:30 -0700)
commitf97df01a9010bb35bb7800678202244bb5b68be3
tree88b05db4ea0bc9bfb62c08b954edd85c76d5e411
parente230e943f612d8a1e5fc32c1e2901c48571f3d8e
selftests/net: Add test for timing a bind request to a port with a populated bhash entry

This test populates the bhash table for a given port with
MAX_THREADS * MAX_CONNECTIONS sockets, and then times how long
a bind request on the port takes.

When populating the bhash table, we create the sockets and then bind
the sockets to the same address and port (SO_REUSEADDR and SO_REUSEPORT
are set). When timing how long a bind on the port takes, we bind on a
different address without SO_REUSEPORT set. We do not set SO_REUSEPORT
because we are interested in the case where the bind request does not
go through the tb->fastreuseport path, which is fragile (eg
tb->fastreuseport path does not work if binding with a different uid).

To run the script:
    Usage: ./bind_bhash.sh [-6 | -4] [-p port] [-a address]
    6: use ipv6
    4: use ipv4
    port: Port number
    address: ip address

Without any arguments, ./bind_bhash.sh defaults to ipv6 using ip address
"2001:0db8:0:f101::1" on port 443.

On my local machine, I see:
ipv4:
before - 0.002317 seconds
with bhash2 - 0.000020 seconds

ipv6:
before - 0.002431 seconds
with bhash2 - 0.000021 seconds

Signed-off-by: Joanne Koong <joannelkoong@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
tools/testing/selftests/net/.gitignore
tools/testing/selftests/net/Makefile
tools/testing/selftests/net/bind_bhash.c [new file with mode: 0644]
tools/testing/selftests/net/bind_bhash.sh [new file with mode: 0755]