• Amit Cohen's avatar
    mlxsw: pci: Use page pool for Rx buffers allocation · b5b60bb4
    Amit Cohen authored
    As part of driver init, all Rx queues are filled with buffers for
    hardware usage. Later, when a packet is received, a new buffer should be
    allocated to be used by hardware instead of the received buffer.
    Packet's processing time includes allocation time, which can be improved
    using page pool.
    
    Using page pool, DMA mapping is done only for first allocation of buffers.
    As subsequent buffers allocation avoid DMA mapping, it results in
    performance improvement. The purpose of page pool is to allocate pages fast
    from cache without locking. This lockless guarantee naturally comes from
    running under a NAPI.
    
    Use page pool to allocate the data buffer only, so hardware will use it to
    fill the packet. At completion time, attach the data buffer (now filled
    with packet payload) to new SKB which is allocated around the received
    buffer. SKB building at completion time prevents cache miss for each
    packet, as now the SKB is allocated right before packets will be handled by
    networking stack.
    
    Page pool for each Rx queue enhances Rx side performance by reclaiming
    buffers back to each queue specific pool. This change significantly
    improves driver performance, CPU can handle about 345% of the packets per
    second it previously handled.
    Signed-off-by: default avatarAmit Cohen <amcohen@nvidia.com>
    Reviewed-by: default avatarPetr Machata <petrm@nvidia.com>
    Reviewed-by: default avatarIdo Schimmel <idosch@nvidia.com>
    Signed-off-by: default avatarPetr Machata <petrm@nvidia.com>
    Reviewed-by: default avatarJiri Pirko <jiri@nvidia.com>
    Link: https://lore.kernel.org/r/1cf788a8f43c70aae6d526018ef77becb27ad6d3.1718709196.git.petrm@nvidia.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    b5b60bb4
pci.c 63.9 KB