
Use the generic dynamic interrupt moderation (dim) framework to implement adaptive interrupt coalescing on Rx. With the per-packet interrupt scheme, a high interrupt rate has been noted for moderate traffic flows leading to high CPU utilization. The 'dim' scheme implemented by the current patch addresses this issue improving CPU utilization while using minimal coalescing time thresholds in order to preserve a good latency. On the Tx side use an optimal time threshold value by default. This value has been optimized for Tx TCP streams at a rate of around 85kpps on a 1G link, at which rate half of the Tx ring size (128) gets filled in 1500 usecs. Scaling this down to 2.5G links yields the current value of 600 usecs, which is conservative and gives good enough results for 1G links too (see next). Below are some measurement results for before and after this patch (and related dependencies) basically, for a 2 ARM Cortex-A72 @1.3Ghz CPUs system (32 KB L1 data cache), using 60secs log netperf TCP stream tests @ 1Gbit link (maximum throughput): 1) 1 Rx TCP flow, both Rx and Tx processed by the same NAPI thread on the same CPU: CPU utilization int rate (ints/sec) Before: 50%-60% (over 50%) 92k After: 13%-22% 3.5k-12k Comment: Major CPU utilization improvement for a single flow Rx TCP flow (i.e. netperf -t TCP_MAERTS) on a single CPU. Usually settles under 16% for longer tests. 2) 4 Rx TCP flows + 4 Tx TCP flows (+ pings to check the latency): Total CPU utilization Total int rate (ints/sec) Before: ~80% (spikes to 90%) ~100k After: 60% (more steady) ~4k Comment: Important improvement for this load test, while the ping test outcome does not show any notable difference compared to before. Signed-off-by: Claudiu Manoil <claudiu.manoil@nxp.com> Signed-off-by: David S. Miller <davem@davemloft.net>
56 lines
1.8 KiB
Plaintext
56 lines
1.8 KiB
Plaintext
# SPDX-License-Identifier: GPL-2.0
|
|
config FSL_ENETC
|
|
tristate "ENETC PF driver"
|
|
depends on PCI && PCI_MSI
|
|
select FSL_ENETC_MDIO
|
|
select PHYLIB
|
|
select DIMLIB
|
|
help
|
|
This driver supports NXP ENETC gigabit ethernet controller PCIe
|
|
physical function (PF) devices, managing ENETC Ports at a privileged
|
|
level.
|
|
|
|
If compiled as module (M), the module name is fsl-enetc.
|
|
|
|
config FSL_ENETC_VF
|
|
tristate "ENETC VF driver"
|
|
depends on PCI && PCI_MSI
|
|
select PHYLIB
|
|
select DIMLIB
|
|
help
|
|
This driver supports NXP ENETC gigabit ethernet controller PCIe
|
|
virtual function (VF) devices enabled by the ENETC PF driver.
|
|
|
|
If compiled as module (M), the module name is fsl-enetc-vf.
|
|
|
|
config FSL_ENETC_MDIO
|
|
tristate "ENETC MDIO driver"
|
|
depends on PCI
|
|
help
|
|
This driver supports NXP ENETC Central MDIO controller as a PCIe
|
|
physical function (PF) device.
|
|
|
|
If compiled as module (M), the module name is fsl-enetc-mdio.
|
|
|
|
config FSL_ENETC_PTP_CLOCK
|
|
tristate "ENETC PTP clock driver"
|
|
depends on PTP_1588_CLOCK_QORIQ && (FSL_ENETC || FSL_ENETC_VF)
|
|
default y
|
|
help
|
|
This driver adds support for using the ENETC 1588 timer
|
|
as a PTP clock. This clock is only useful if your PTP
|
|
programs are getting hardware time stamps on the PTP Ethernet
|
|
packets using the SO_TIMESTAMPING API.
|
|
|
|
If compiled as module (M), the module name is fsl-enetc-ptp.
|
|
|
|
config FSL_ENETC_QOS
|
|
bool "ENETC hardware Time-sensitive Network support"
|
|
depends on (FSL_ENETC || FSL_ENETC_VF) && (NET_SCH_TAPRIO || NET_SCH_CBS)
|
|
help
|
|
There are Time-Sensitive Network(TSN) capabilities(802.1Qbv/802.1Qci
|
|
/802.1Qbu etc.) supported by ENETC. These TSN capabilities can be set
|
|
enable/disable from user space via Qos commands(tc). In the kernel
|
|
side, it can be loaded by Qos driver. Currently, it is only support
|
|
taprio(802.1Qbv) and Credit Based Shaper(802.1Qbu).
|