mirror of
https://git.openwrt.org/openwrt/openwrt.git
synced 2026-03-14 23:09:45 +01:00
The receive path of the RTL93xx SoCs is currently discarding packets in software. Analysis gives the following explanation: - RX ring size registers are setup with the full software ring size - When packets are received the packet counter registers are increased - After RX processing the counter registers are changed the wrong way - From then SOC is allowed to receive more packets than software allows - Overflow interrupts are fired - As a reaction to that the software drops packets Change the processing as follows: - Setup ring size registers with a headroom of 2 buffers - Decrease the counter registers with the real work done With this change no more overflow interrupts occur because the SoC disables the queues before they can overflow or hit a buffer that is still owned by the CPU. Benchmark from single stream iperf3 run, with server process running on ZyXEL XGS1210 (RTL930x). iperf3 run before ----------------------------------------------------------- Server listening on 5201 (test #1) ----------------------------------------------------------- Accepted connection from 192.168.2.86, port 54412 [ 5] local 192.168.2.71 port 5201 connected to 192.168.2.86 port 54418 [ ID] Interval Transfer Bitrate [ 5] 0.00-1.00 sec 384 KBytes 3.14 Mbits/sec [ 5] 1.00-2.00 sec 0.00 Bytes 0.00 bits/sec [ 5] 2.00-3.00 sec 0.00 Bytes 0.00 bits/sec [ 5] 3.00-4.01 sec 5.12 MBytes 42.8 Mbits/sec [ 5] 4.01-5.00 sec 11.4 MBytes 95.8 Mbits/sec [ 5] 5.00-6.00 sec 0.00 Bytes 0.00 bits/sec [ 5] 6.00-7.00 sec 0.00 Bytes 0.00 bits/sec [ 5] 7.00-8.00 sec 0.00 Bytes 0.00 bits/sec [ 5] 8.00-9.00 sec 0.00 Bytes 0.00 bits/sec [ 5] 9.00-10.00 sec 0.00 Bytes 0.00 bits/sec iperf3 run after ----------------------------------------------------------- Server listening on 5201 (test #1) ----------------------------------------------------------- Accepted connection from 192.168.2.86, port 55228 [ 5] local 192.168.2.71 port 5201 connected to 192.168.2.86 port 55232 [ ID] Interval Transfer Bitrate [ 5] 0.00-1.00 sec 22.8 MBytes 191 Mbits/sec [ 5] 1.00-2.01 sec 25.4 MBytes 211 Mbits/sec [ 5] 2.01-3.00 sec 25.4 MBytes 215 Mbits/sec [ 5] 3.00-4.01 sec 26.5 MBytes 220 Mbits/sec [ 5] 4.01-5.00 sec 26.2 MBytes 222 Mbits/sec [ 5] 5.00-6.00 sec 26.9 MBytes 225 Mbits/sec [ 5] 6.00-7.00 sec 27.0 MBytes 226 Mbits/sec [ 5] 7.00-8.01 sec 26.9 MBytes 224 Mbits/sec [ 5] 8.01-9.00 sec 26.5 MBytes 223 Mbits/sec [ 5] 9.00-10.00 sec 26.8 MBytes 225 Mbits/sec [ 5] 10.00-10.02 sec 640 KBytes 224 Mbits/sec Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de> Link: https://github.com/openwrt/openwrt/pull/19960 Signed-off-by: Robert Marko <robimarko@gmail.com> |
||
|---|---|---|
| .. | ||
| airoha | ||
| apm821xx | ||
| armsr | ||
| at91 | ||
| ath79 | ||
| bcm27xx | ||
| bcm47xx | ||
| bcm53xx | ||
| bcm4908 | ||
| bmips | ||
| d1 | ||
| gemini | ||
| generic | ||
| imx | ||
| ipq40xx | ||
| ipq806x | ||
| ixp4xx | ||
| kirkwood | ||
| lantiq | ||
| layerscape | ||
| loongarch64 | ||
| malta | ||
| mediatek | ||
| mpc85xx | ||
| mvebu | ||
| mxs | ||
| octeon | ||
| omap | ||
| pistachio | ||
| qoriq | ||
| qualcommax | ||
| qualcommbe | ||
| ramips | ||
| realtek | ||
| rockchip | ||
| sifiveu | ||
| siflower | ||
| starfive | ||
| stm32 | ||
| sunxi | ||
| tegra | ||
| uml | ||
| x86 | ||
| zynq | ||
| Makefile | ||