Hi Sander,

thanks for the patch!

I tested on my Panasonic Switch-M48eG PN28480K (RTL8393M) and all issues are solved :)

- top page loading of LuCI (WebUI) at login: 2.64 s
- ethtool lanX (10x times): avg 0.00 s, max 0.01 s
- /proc/interrupts (per (about) 1s):
  root@OpenWrt:/# while :; do grep "timer" /proc/interrupts; echo "---"; sleep 1; done
   28:          0     388182  realtek-rtl-intc  28  timer@3100
   29:    1179094          0  realtek-rtl-intc  29  timer@3100
  ---
   28:          0     388632  realtek-rtl-intc  28  timer@3100
   29:    1181698          0  realtek-rtl-intc  29  timer@3100
  ---
   28:          0     389094  realtek-rtl-intc  28  timer@3100
   29:    1184276          0  realtek-rtl-intc  29  timer@3100
  ---
   28:          0     389350  realtek-rtl-intc  28  timer@3100
   29:    1185182          0  realtek-rtl-intc  29  timer@3100
  ---
   28:          0     389651  realtek-rtl-intc  28  timer@3100
   29:    1186753          0  realtek-rtl-intc  29  timer@3100
  ---
- bootlog:
https://gist.github.com/musashino205/2aa32ff858d863de9790c75c3a0b5bf8

  (without the patch):
https://gist.github.com/musashino205/0db98d9f99fbacc8a311f65739b72eb7

Thanks,
Hiroshi

On 2022/10/31 18:11, Sander Vanheule wrote:
After replacing the R4K event timer and clock source with the new
Realtek Otto timer, performance for RTL839x devices was severely
impacted, as reported by Hiroshi.

Research by Markus showed that after commit 4657a5301eb5 (realtek: avoid
busy waiting for RTL839x PHY read/write, 2022-10-14), the ethernet
driver could only update a phy once per timer interval, which also
heavily impacted boot time. On e.g. a Zyxel GS1900-48, this added around
a minute to the time to fully initialise the switch.

By marking the otto clocksource as continuous, the kernel enables it to
be used for high resolution timers. This allows readx_poll_timeout() to
sleep for less than one system timer interval, reducing system dead
time.

Link: https://github.com/openwrt/openwrt/issues/11117
Reported-by: INAGAKI Hiroshi <musashino.o...@gmail.com>
Cc: Markus Stockhausen <markus.stockhau...@gmx.de>
Signed-off-by: Sander Vanheule <san...@svanheule.net>
---
With this patch, initialisation time for my GS1900-48 drops from 110
seconds to 50 seconds. Please check if you can reproduce this. The 'why
this works' from the commit message is from a quick look at the places
where this CLOCK_SOURCE flag is checked, so I hope it actually makes sense.

Best,
Sander

  .../realtek/files-5.10/drivers/clocksource/timer-rtl-otto.c      | 1 +
  1 file changed, 1 insertion(+)

diff --git 
a/target/linux/realtek/files-5.10/drivers/clocksource/timer-rtl-otto.c 
b/target/linux/realtek/files-5.10/drivers/clocksource/timer-rtl-otto.c
index 12eed78653d0..14e28e50f40e 100644
--- a/target/linux/realtek/files-5.10/drivers/clocksource/timer-rtl-otto.c
+++ b/target/linux/realtek/files-5.10/drivers/clocksource/timer-rtl-otto.c
@@ -227,6 +227,7 @@ struct rttm_cs rttm_cs = {
                .name   = "realtek_otto_timer",
                .rating = 400,
                .mask   = CLOCKSOURCE_MASK(RTTM_BIT_COUNT),
+               .flags  = CLOCK_SOURCE_IS_CONTINUOUS,
                .read   = rttm_read_clocksource,
                .enable = rttm_enable_clocksource
        }

_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to