linux_dsm_epyc7002/drivers/net/ethernet
David S. Miller ddc9cc0131 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.
 -----BEGIN PGP SIGNATURE-----
 
 iQEcBAABAgAGBQJbkKzcAAoJEEg/ir3gV/o+4bsIAKu61DsZZhJAXfwZ4JXI9fN7
 iZ9wOPbPovTrkfRfqatcCa3CBwxM1zZ6WzbVTGGieMsUnxjp4G+LAs7m8J+cmWB2
 GsxhO3lsF5iGTcEB5Q5a/TlWlUP0CiPcdNZZe6FvT2Vzil+mLAb3BZgIPKPgoyJW
 CmDhIOslfolBJC0s4fc+zVcWrShmKnUwHmVLhkOXpz8cfYBB1fBVGebRTZiYsvbf
 8CV4buiYx0Fuq9MSnOwaMuPrUP1IB6DweNbFpg9gRd0k4mmWnoNu3l+g1Flgmd88
 RtU4+5PEtZF2kNhH/LeiHRqkZ5f2cmOsIKbDZoX6xwzfYesws8jlDJpL5dIhxZA=
 =nxDw
 -----END PGP SIGNATURE-----

Merge tag 'mlx5e-updates-2018-09-05' of git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux

Saeed Mahameed says:

====================
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.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>
2018-09-06 15:42:04 -07:00
..
3com
8390 8390/etherh: convert to ethtool_{get, set}_link_ksettings 2018-08-29 19:46:10 -07:00
adaptec net: adaptec: Replace mdelay() with msleep() in starfire_init_one() 2018-07-26 21:24:23 -07:00
aeroflex
agere
alacritech
allwinner
alteon alteon: acenic: mark expected switch fall-through 2018-08-07 17:54:19 -07:00
altera
amazon Merge ra.kernel.org:/pub/scm/linux/kernel/git/davem/net 2018-08-02 10:55:32 -07:00
amd Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 2018-08-15 16:01:47 -07:00
apm
apple net: ethernet: Use existing define with polynomial 2018-07-27 19:16:37 +08:00
aquantia Merge ra.kernel.org:/pub/scm/linux/kernel/git/davem/net 2018-08-09 11:52:36 -07:00
arc
atheros Merge ra.kernel.org:/pub/scm/linux/kernel/git/davem/net 2018-07-24 19:21:58 -07:00
aurora
broadcom Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2018-09-04 21:33:03 -07:00
brocade
cadence net: cadence: Fix a sleep-in-atomic-context bug in macb_halt_tx() 2018-09-02 16:05:25 -07:00
calxeda
cavium liquidio: Added delayed work for periodically updating the link statistics. 2018-09-03 19:08:07 -07:00
chelsio cxgb4: collect hardware queue descriptors 2018-09-03 22:10:37 -07:00
cirrus
cisco net: cisco: enic: Replace GFP_ATOMIC with GFP_KERNEL 2018-08-04 13:08:06 -07:00
cortina
davicom
dec net: tulip: de4x5: mark expected switch fall-throughs 2018-08-07 17:54:19 -07:00
dlink
emulex be2net: Use Kconfig flag to support for enabling/disabling adapters 2018-08-09 14:08:59 -07:00
ezchip
faraday
freescale dpaa2-eth: Move DPAA2 Ethernet driver from staging to drivers/net 2018-09-01 17:16:59 -07:00
fujitsu
hisilicon Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2018-09-04 21:33:03 -07:00
hp
huawei net-next: hinic: fix a problem in free_tx_poll() 2018-08-08 09:46:08 -07:00
i825xx
ibm net/ibm/emac: wrong emac_calc_base call was used by typo 2018-09-03 21:50:52 -07:00
intel Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next 2018-08-31 17:41:08 -07:00
marvell Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2018-09-04 21:33:03 -07:00
mediatek net: ethernet: Convert to using %pOFn instead of device_node.name 2018-08-29 19:41:30 -07:00
mellanox net/mlx5e: don't set CHECKSUM_COMPLETE on SCTP packets 2018-09-05 21:14:57 -07:00
micrel Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 2018-08-15 16:01:47 -07:00
microchip net: lan743x_ptp: make function lan743x_ptp_set_sync_ts_insert() static 2018-09-05 08:07:05 -07:00
moxa
mscc
myricom
natsemi
neterion vxge: remove set but not used variable 'req_out', 'status' and 'ret' 2018-08-11 12:05:19 -07:00
netronome nfp: separate VXLAN and GRE feature handling 2018-09-05 22:18:11 -07:00
ni net: nixge: Fix Kconfig warning with OF_MDIO 2018-09-02 16:10:15 -07:00
nuvoton
nvidia net: nvidia: forcedeth: Replace GFP_ATOMIC with GFP_KERNEL in nv_probe() 2018-07-27 13:45:14 -07:00
nxp
oki-semi
packetengines
pasemi
qlogic qed*: Utilize FW 8.37.7.0 2018-09-06 07:44:35 -07:00
qualcomm
rdc
realtek r8169: add support for NCube 8168 network card 2018-09-03 19:05:13 -07:00
renesas sh_eth: Add R7S9210 support 2018-08-29 18:10:28 -07:00
rocker
samsung net: ethernet: sxgbe: mark expected switch fall-throughs 2018-08-07 17:54:20 -07:00
seeq
sfc net: sfc: falcon: mark expected switch fall-through 2018-08-07 17:54:21 -07:00
sgi
silan
sis
smsc ARM: 32-bit SoC platform updates 2018-08-23 13:44:43 -07:00
socionext net: socionext: Increase descriptors to 256 2018-08-11 12:11:36 -07:00
stmicro Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2018-09-04 21:33:03 -07:00
sun net: ethernet: Convert to using %pOFn instead of device_node.name 2018-08-29 19:41:30 -07:00
synopsys net: ethernet: Use existing define with polynomial 2018-07-27 19:16:37 +08:00
tehuti
ti Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2018-09-04 21:33:03 -07:00
toshiba
tundra
via
wiznet
xilinx Merge ra.kernel.org:/pub/scm/linux/kernel/git/davem/net 2018-07-24 19:21:58 -07:00
xircom
xscale
dnet.c
dnet.h
ec_bhf.c
ethoc.c
fealnx.c
jme.c net: jme: Replace mdelay() with msleep() and usleep_range() in jme_wait_link() 2018-07-27 13:45:14 -07:00
jme.h
Kconfig net: change Exar/Neterion menu items to be alphabetical 2018-08-01 09:49:02 -07:00
korina.c
lantiq_etop.c
Makefile net: change Exar/Neterion menu items to be alphabetical 2018-08-01 09:49:02 -07:00
netx-eth.c