• Matteo Croce's avatar
    stmmac: align RX buffers · a955318f
    Matteo Croce authored
    On RX an SKB is allocated and the received buffer is copied into it.
    But on some architectures, the memcpy() needs the source and destination
    buffers to have the same alignment to be efficient.
    
    This is not our case, because SKB data pointer is misaligned by two bytes
    to compensate the ethernet header.
    
    Align the RX buffer the same way as the SKB one, so the copy is faster.
    An iperf3 RX test gives a decent improvement on a RISC-V machine:
    
    before:
    [ ID] Interval           Transfer     Bitrate         Retr
    [  5]   0.00-10.00  sec   733 MBytes   615 Mbits/sec   88             sender
    [  5]   0.00-10.01  sec   730 MBytes   612 Mbits/sec                  receiver
    
    after:
    [ ID] Interval           Transfer     Bitrate         Retr
    [  5]   0.00-10.00  sec  1.10 GBytes   942 Mbits/sec    0             sender
    [  5]   0.00-10.00  sec  1.09 GBytes   940 Mbits/sec                  receiver
    
    And the memcpy() overhead during the RX drops dramatically.
    
    before:
    Overhead  Shared O  Symbol
      43.35%  [kernel]  [k] memcpy
      33.77%  [kernel]  [k] __asm_copy_to_user
       3.64%  [kernel]  [k] sifive_l2_flush64_range
    
    after:
    Overhead  Shared O  Symbol
      45.40%  [kernel]  [k] __asm_copy_to_user
      28.09%  [kernel]  [k] memcpy
       4.27%  [kernel]  [k] sifive_l2_flush64_range
    Signed-off-by: default avatarMatteo Croce <mcroce@microsoft.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    a955318f
stmmac.h 9.04 KB