• David Howells's avatar
    rxrpc: Use the UDP encap_rcv hook · 5271953c
    David Howells authored
    Use the UDP encap_rcv hook to cut the bit out of the rxrpc packet reception
    in which a packet is placed onto the UDP receive queue and then immediately
    removed again by rxrpc.  Going via the queue in this manner seems like it
    should be unnecessary.
    
    This does, however, require the invention of a value to place in encap_type
    as that's one of the conditions to switch packets out to the encap_rcv
    hook.  Possibly the value doesn't actually matter for anything other than
    sockopts on the UDP socket, which aren't accessible outside of rxrpc
    anyway.
    
    This seems to cut a bit of time out of the time elapsed between each
    sk_buff being timestamped and turning up in rxrpc (the final number in the
    following trace excerpts).  I measured this by making the rxrpc_rx_packet
    trace point print the time elapsed between the skb being timestamped and
    the current time (in ns), e.g.:
    
    	... 424.278721: rxrpc_rx_packet: ...  ACK 25026
    
    So doing a 512MiB DIO read from my test server, with an unmodified kernel:
    
    	N       min     max     sum		mean    stddev
    	27605   2626    7581    7.83992e+07     2840.04 181.029
    
    and with the patch applied:
    
    	N       min     max     sum		mean    stddev
    	27547   1895    12165   6.77461e+07     2459.29 255.02
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    5271953c
ar-internal.h 41.2 KB