Hi Dave, This pull request provides some updates to mlx5 ethernet driver.
For more information please see tag log below. Please pull and let me know if there's any problem. Thanks, Saeed. --- The following changes since commit 05dcc71298643256948a2e17db7dbecc748719d2: net: lan743x_ptp: make function lan743x_ptp_set_sync_ts_insert() static (2018-09-05 08:07:05 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux.git tags/mlx5e-updates-2018-09-05 for you to fetch changes up to fe1dc069990c1f290ef6b99adb46332c03258f38: net/mlx5e: don't set CHECKSUM_COMPLETE on SCTP packets (2018-09-05 21:14:57 -0700) ---------------------------------------------------------------- mlx5e-updates-2018-09-05 This series provides updates to mlx5 ethernet driver. 1) Starting with a four patches series to optimize flow counters updates, >From Vlad Buslov: ============================================== By default mlx5 driver updates cached counters each second. Update function consumes noticeable amount of CPU resources. The goal of this patch series is to optimize update function. Investigation revealed following bottlenecks in fs counters implementation: 1) Update code(scheduled each second) iterates over all counters twice. (first for finding and deleting counters that are marked for deletion, second iteration is for actually updating the counters) 2) Counters are stored in rb tree. Linear iteration over all rb tree elements(rb_next in profiling data) consumed ~65% of time spent in update function. Following optimizations were implemented: 1) Instead of just marking counters for deletion, store them in standalone list. This removes first iteration over whole counters tree. 2) Store counters in sorted list to optimize traversing them and remove calls to rb_next. First implementation of these changes caused degradation of performance, instead of improving it. Investigation revealed that there first cache line of struct mlx5_fc is full and adding anything to it causes amount of cache misses to double. To mitigate that, following refactorings were implemented: - Change 'addlist' list type from double linked to single linked. This allowes to get free space for one additional pointer that is used to store deletion list(optimization 1) - Substitute rb tree with idr. Idr is non-intrusive data structure and doesn't require adding any new members to struct mlx5_fc. Use free space that became available for double linked sorted list that is used for traversing all counters. (optimization 2) Described changes reduced CPU time spent in mlx5_fc_stats_work from 70% to 44%. (global perf profile mode) ============================================ The rest of the series are misc updates: 2) From Kamal, Move mlx5e_priv_flags into en_ethtool.c, to avoid a compilation warning. 3) From Roi Dayan, Move Q counters allocation and drop RQ to init_rx profile function to avoid allocating Q counters when not required. 4) From Shay Agroskin, Replace PTP clock lock from RW lock to seq lock. Almost double the packet rate when timestamping is active on multiple TX queues. 5) From: Natali Shechtman, set ECN for received packets using CQE indication. 6) From: Alaa Hleihel, don't set CHECKSUM_COMPLETE on SCTP packets. CHECKSUM_COMPLETE is not applicable to SCTP protocol. ---------------------------------------------------------------- Alaa Hleihel (1): net/mlx5e: don't set CHECKSUM_COMPLETE on SCTP packets Kamal Heib (1): net/mlx5e: Move mlx5e_priv_flags into en_ethtool.c Natali Shechtman (1): net/mlx5e: Set ECN for received packets using CQE indication Roi Dayan (1): net/mlx5e: Move Q counters allocation and drop RQ to init_rx Shay Agroskin (1): net/mlx5e: Replace PTP clock lock from RW lock to seq lock Vlad Buslov (4): net/mlx5: Change flow counters addlist type to single linked list net/mlx5: Add new list to store deleted flow counters net/mlx5: Store flow counters in a list net/mlx5: Add flow counters idr drivers/net/ethernet/mellanox/mlx5/core/en.h | 13 +- .../net/ethernet/mellanox/mlx5/core/en_ethtool.c | 7 + drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 45 +++-- drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 12 +- drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 47 +++++- drivers/net/ethernet/mellanox/mlx5/core/en_stats.c | 3 + drivers/net/ethernet/mellanox/mlx5/core/en_stats.h | 2 + drivers/net/ethernet/mellanox/mlx5/core/fs_core.h | 5 +- .../net/ethernet/mellanox/mlx5/core/fs_counters.c | 184 +++++++++++---------- .../net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c | 17 +- .../net/ethernet/mellanox/mlx5/core/lib/clock.c | 34 ++-- .../net/ethernet/mellanox/mlx5/core/lib/clock.h | 8 +- include/linux/mlx5/driver.h | 11 +- 13 files changed, 235 insertions(+), 153 deletions(-)