• Wei Fang's avatar
    net: fec: add XDP_TX feature support · f601899e
    Wei Fang authored
    The XDP_TX feature is not supported before, and all the frames
    which are deemed to do XDP_TX action actually do the XDP_DROP
    action. So this patch adds the XDP_TX support to FEC driver.
    
    I tested the performance of XDP_TX in XDP_DRV mode and XDP_SKB
    mode respectively on i.MX8MP-EVK platform, and as suggested by
    Jesper, I also tested the performance of XDP_REDIRECT on the
    same platform. And the test steps and results are as follows.
    
    XDP_TX test:
    Step 1: One board is used as generator and connects to switch,and
    the FEC port of DUT also connects to the switch. Both boards with
    flow control off. Then the generator runs the
    pktgen_sample03_burst_single_flow.sh script to generate and send
    burst traffic to DUT. Note that the size of packet was set to 64
    bytes and the procotol of packet was UDP in my test scenario. In
    addition, the SMAC of the packet need to be different from the MAC
    of the generator, because the xdp2 program will swap the DMAC and
    SMAC of the packet and send it back to the generator. If the SMAC
    of the generated packet is the MAC of the generator, the generator
    will receive the returned traffic which increase the CPU loading
    and significantly degrade the transmit speed of the generator, and
    finally it affects the test of XDP_TX performance.
    
    Step 2: The DUT runs the xdp2 program to transmit received UDP
    packets back out on the same port where they were received.
    
    root@imx8mpevk:~# ./xdp2 eth0
    proto 17:     353918 pkt/s
    proto 17:     352923 pkt/s
    proto 17:     353900 pkt/s
    proto 17:     352672 pkt/s
    proto 17:     353912 pkt/s
    proto 17:     354219 pkt/s
    
    root@imx8mpevk:~# ./xdp2 -S eth0
    proto 17:     160604 pkt/s
    proto 17:     160708 pkt/s
    proto 17:     160564 pkt/s
    proto 17:     160684 pkt/s
    proto 17:     160640 pkt/s
    proto 17:     160720 pkt/s
    
    The above results show that the XDP_TX performance of XDP_DRV mode
    is much better than XDP_SKB mode, more than twice that of XDP_SKB
    mode, which is in line with our expectation.
    
    XDP_REDIRECT test:
    Step1: Both the generator and the FEC port of the DUT connet to the
    switch port. All the ports with flow control off, then the generator
    runs the pktgen script to generate and send burst traffic to DUT.
    Note that the size of packet was set to 64 bytes and the procotol of
    packet was UDP in my test scenario.
    
    Step2: The DUT runs the xdp_redirect program to redirect the traffic
    from the FEC port to the FEC port itself.
    
    root@imx8mpevk:~# ./xdp_redirect eth0 eth0
    Redirecting from eth0 (ifindex 2; driver fec) to eth0
    (ifindex 2; driver fec)
    Summary        232,302 rx/s        0 err,drop/s      232,344 xmit/s
    Summary        234,579 rx/s        0 err,drop/s      234,577 xmit/s
    Summary        235,548 rx/s        0 err,drop/s      235,549 xmit/s
    Summary        234,704 rx/s        0 err,drop/s      234,703 xmit/s
    Summary        235,504 rx/s        0 err,drop/s      235,504 xmit/s
    Summary        235,223 rx/s        0 err,drop/s      235,224 xmit/s
    Summary        234,509 rx/s        0 err,drop/s      234,507 xmit/s
    Summary        235,481 rx/s        0 err,drop/s      235,482 xmit/s
    Summary        234,684 rx/s        0 err,drop/s      234,683 xmit/s
    Summary        235,520 rx/s        0 err,drop/s      235,520 xmit/s
    Summary        235,461 rx/s        0 err,drop/s      235,461 xmit/s
    Summary        234,627 rx/s        0 err,drop/s      234,627 xmit/s
    Summary        235,611 rx/s        0 err,drop/s      235,611 xmit/s
      Packets received    : 3,053,753
      Average packets/s   : 234,904
      Packets transmitted : 3,053,792
      Average transmit/s  : 234,907
    
    Compared the performance of XDP_TX with XDP_REDIRECT, XDP_TX is also
    much better than XDP_REDIRECT. It's also in line with our expectation.
    Signed-off-by: default avatarWei Fang <wei.fang@nxp.com>
    Suggested-by: default avatarJesper Dangaard Brouer <hawk@kernel.org>
    Suggested-by: default avatarJakub Kicinski <kuba@kernel.org>
    Reviewed-by: default avatarLarysa Zaremba <larysa.zaremba@intel.com>
    Acked-by: default avatarJesper Dangaard Brouer <hawk@kernel.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    f601899e
fec_main.c 124 KB