>-----Original Message----- >From: Intel-wired-lan <intel-wired-lan-bounces@xxxxxxxxxx> On Behalf Of >kerneljasonxing@xxxxxxxxx >Sent: Wednesday, September 1, 2021 3:42 PM >To: Brandeburg, Jesse <jesse.brandeburg@xxxxxxxxx>; Nguyen, Anthony L ><anthony.l.nguyen@xxxxxxxxx>; davem@xxxxxxxxxxxxx; kuba@xxxxxxxxxx; >ast@xxxxxxxxxx; daniel@xxxxxxxxxxxxx; hawk@xxxxxxxxxx; >john.fastabend@xxxxxxxxx; andrii@xxxxxxxxxx; kafai@xxxxxx; >songliubraving@xxxxxx; yhs@xxxxxx; kpsingh@xxxxxxxxxx >Cc: Shujin Li <lishujin@xxxxxxxxxxxx>; Jason Xing ><xingwanli@xxxxxxxxxxxx>; kerneljasonxing@xxxxxxxxx; >netdev@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; intel-wired- >lan@xxxxxxxxxxxxxxxx; bpf@xxxxxxxxxxxxxxx >Subject: [Intel-wired-lan] [PATCH v7] ixgbe: let the xdpdrv work with more >than 64 cpus > >From: Jason Xing <xingwanli@xxxxxxxxxxxx> > >Originally, ixgbe driver doesn't allow the mounting of xdpdrv if the server is >equipped with more than 64 cpus online. So it turns out that the loading of >xdpdrv causes the "NOMEM" failure. > >Actually, we can adjust the algorithm and then make it work through mapping >the current cpu to some xdp ring with the protect of @tx_lock. > >Here're some numbers before/after applying this patch with xdp-example >loaded on the eth0X: > >As client (tx path): > Before After >TCP_STREAM send-64 734.14 714.20 >TCP_STREAM send-128 1401.91 1395.05 >TCP_STREAM send-512 5311.67 5292.84 >TCP_STREAM send-1k 9277.40 9356.22 (not stable) >TCP_RR send-1 22559.75 21844.22 >TCP_RR send-128 23169.54 22725.13 >TCP_RR send-512 21670.91 21412.56 > >As server (rx path): > Before After >TCP_STREAM send-64 1416.49 1383.12 >TCP_STREAM send-128 3141.49 3055.50 >TCP_STREAM send-512 9488.73 9487.44 >TCP_STREAM send-1k 9491.17 9356.22 (not stable) >TCP_RR send-1 23617.74 23601.60 >... > >Notice: the TCP_RR mode is unstable as the official document explaines. > >I tested many times with different parameters combined through netperf. >Though the result is not that accurate, I cannot see much influence on this >patch. The static key is places on the hot path, but it actually shouldn't cause a >huge regression theoretically. > >Fixes: 33fdc82f08 ("ixgbe: add support for XDP_TX action") >Reported-by: kernel test robot <lkp@xxxxxxxxx> >Co-developed-by: Shujin Li <lishujin@xxxxxxxxxxxx> >Signed-off-by: Shujin Li <lishujin@xxxxxxxxxxxx> >Signed-off-by: Jason Xing <xingwanli@xxxxxxxxxxxx> >--- >v7: >- Factorized to a single spin_lock/unlock in ixgbe_xdp_xmit() (Eric) >- Handle other parts of lock/unlock in ixgbe_run_xdp()/_zc() (Jason) > >v6: >- Move the declaration of static-key to the proper position (Test Robot) >- Add reported-by tag (Jason) >- Add more detailed performance test results (Jason) > >v5: >- Change back to nr_cpu_ids (Eric) > >v4: >- Update the wrong commit messages. (Jason) > >v3: >- Change nr_cpu_ids to num_online_cpus() (Maciej) >- Rename MAX_XDP_QUEUES to IXGBE_MAX_XDP_QS (Maciej) >- Rename ixgbe_determine_xdp_cpu() to ixgbe_determine_xdp_q_idx() >(Maciej) >- Wrap ixgbe_xdp_ring_update_tail() with lock into one function (Maciej) > >v2: >- Adjust cpu id in ixgbe_xdp_xmit(). (Jesper) >- Add a fallback path. (Maciej) >- Adjust other parts related to xdp ring. >--- > drivers/net/ethernet/intel/ixgbe/ixgbe.h | 23 +++++++++- > drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c | 9 +++- > drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 50 ++++++++++++++++----- >- > .../net/ethernet/intel/ixgbe/ixgbe_txrx_common.h | 3 +- > drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c | 16 ++++--- > 5 files changed, 77 insertions(+), 24 deletions(-) > Tested-by: Sandeep Penigalapati <sandeep.penigalapati@xxxxxxxxx>