• Magnus Karlsson's avatar
    xsk: Batched buffer allocation for the pool · 47e4075d
    Magnus Karlsson authored
    Add a new driver interface xsk_buff_alloc_batch() offering batched
    buffer allocations to improve performance. The new interface takes
    three arguments: the buffer pool to allocated from, a pointer to an
    array of struct xdp_buff pointers which will contain pointers to the
    allocated xdp_buffs, and an unsigned integer specifying the max number
    of buffers to allocate. The return value is the actual number of
    buffers that the allocator managed to allocate and it will be in the
    range 0 <= N <= max, where max is the third parameter to the function.
    
    u32 xsk_buff_alloc_batch(struct xsk_buff_pool *pool, struct xdp_buff **xdp,
                             u32 max);
    
    A second driver interface is also introduced that need to be used in
    conjunction with xsk_buff_alloc_batch(). It is a helper that sets the
    size of struct xdp_buff and is used by the NIC Rx irq routine when
    receiving a packet. This helper sets the three struct members data,
    data_meta, and data_end. The two first ones is in the xsk_buff_alloc()
    case set in the allocation routine and data_end is set when a packet
    is received in the receive irq function. This unfortunately leads to
    worse performance since the xdp_buff is touched twice with a long time
    period in between leading to an extra cache miss. Instead, we fill out
    the xdp_buff with all 3 fields at one single point in time in the
    driver, when the size of the packet is known. Hence this helper. Note
    that the driver has to use this helper (or set all three fields
    itself) when using xsk_buff_alloc_batch(). xsk_buff_alloc() works as
    before and does not require this.
    
    void xsk_buff_set_size(struct xdp_buff *xdp, u32 size);
    Signed-off-by: default avatarMagnus Karlsson <magnus.karlsson@intel.com>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/20210922075613.12186-3-magnus.karlsson@gmail.com
    47e4075d
xsk_buff_pool.c 14.2 KB