• Joanne Koong's avatar
    selftests/net: Add test for timing a bind request to a port with a populated bhash entry · c35ecb95
    Joanne Koong authored
    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: default avatarJoanne Koong <joannelkoong@gmail.com>
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    c35ecb95
bind_bhash.c 2.86 KB