CUL verursacht ca. 3500 Interrupts/sec am RPI3

Begonnen von didi-fritz, 03 August 2018, 20:21:19

Vorheriges Thema - Nächstes Thema

didi-fritz

Hallo,

ich hab meine FHEM-Hardware von einem Raspberry Pi 2 auf Raspberry Pi 3 Model B Rev 1.2 upgegradet.
Seit her geht die CPU kaum in den Powersave-mode (governor ondemand; arm_freq 1200; arm_freq_min 300) und läuft fast immer mit 1200Mhz und die cpu-Temperatur liegt bei 55C.
#  cpufreq-info -s -m
300 MHz:24.21%, 1.20 GHz:76.79%  (1097334)

Laut top war der Verursacher immer ein  kworker/*:*
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
30424 root      20   0       0      0      0 R  59.8  0.0   6:56.65 kworker/0:3

mit vmstat habe ich gesehen, dass die interrupts und contextswiches auffällig hoch sind:
# vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
0  0      0  65472  70968 670996    0    0     0    16 4241 74037  1  4 96  0  0
1  0      0  65472  70968 670996    0    0     0     0 4165 124189  1  3 97  0  0
1  0      0  65696  70968 670996    0    0     0     0 4201 94195  1  3 95  0  0

die Interrups (Nummer-62) werden vom USB-Modul dwc_otg generiert:
cat  /proc/interrupts
           CPU0       CPU1       CPU2       CPU3
16:          0          0          0          0  bcm2836-timer   0 Edge      arch_timer
17:   10717775   15824327   18386341   12953704  bcm2836-timer   1 Edge      arch_timer
21:          0          0          0          0  bcm2836-pmu   9 Edge      arm-pmu
23:    1145260          0          0          0  ARMCTRL-level   1 Edge      3f00b880.mailbox
24:      18191          0          0          0  ARMCTRL-level   2 Edge      VCHIQ doorbell
46:          0          0          0          0  ARMCTRL-level  48 Edge      bcm2708_fb dma
48:          0          0          0          0  ARMCTRL-level  50 Edge      DMA IRQ
50:          0          0          0          0  ARMCTRL-level  52 Edge      DMA IRQ
51:        198          0          0          0  ARMCTRL-level  53 Edge      DMA IRQ
54:      62934          0          0          0  ARMCTRL-level  56 Edge      DMA IRQ
59:          0          0          0          0  ARMCTRL-level  61 Edge      bcm2835-auxirq
62:   270129688         0          0          0  ARMCTRL-level  64 Edge      dwc_otg, dwc_otg_pcd, dwc_otg_hcd:usb1
83:       2854          0          0          0  ARMCTRL-level  85 Edge      3f804000.i2c
86:      46969          0          0          0  ARMCTRL-level  88 Edge      mmc0
92:       4757          0          0          0  ARMCTRL-level  94 Edge      mmc1
169:          2          0          0          0  pinctrl-bcm2835   4 Edge      gpiolib
170:          0          0          0          0  pinctrl-bcm2835   5 Edge      gpiolib
FIQ:              usb_fiq
IPI0:          0          0          0          0  CPU wakeup interrupts
IPI1:          0          0          0          0  Timer broadcast interrupts
IPI2:      44003     437362     243619     454199  Rescheduling interrupts
IPI3:         10         35         26         30  Function call interrupts
IPI4:          0          0          0          0  CPU stop interrupts
IPI5:    3786480      99339     105364      87609  IRQ work interrupts
IPI6:          0          0          0          0  completion interrupts
Err:          0


Nach dem Abstecken aller USB-Devices (CUL, GSM-Modem, CO2-Messgerät) viel die Interruprate auf ca. 450/s. Nach Wiederanstecken des CUL stieg die Interruptrate wieder auf 4000/s (wenn man über den CUL sendet waren sogar 9500Int/s).

Nach langem Testen und diversen Versuchen hab ich nun den boot-parameter "dwc_otg.speed=1" (=USB v1.0) in die /boot/cmdline.txt geschrieben und habe einen Teilerfolg!

die Interruprate liegt nun bei 1200/s und mein RP3 geht wieder in den Powersave (300 MHz:80.79%, 1.20 GHz:19.21% , Temp 46C)
leider wird nun mein CO2-Messgerät (Holtek USB-zyTemp idVendor=04d9, idProduct=a052) nun nicht mehr erkannt
# dmesg -T
....
[Thu Aug  2 19:58:30 2018] usb 1-1.4: new low-speed USB device number 5 using dwc_otg
[Thu Aug  2 19:58:30 2018] random: systemd: uninitialized urandom read (16 bytes read)
[Thu Aug  2 19:58:30 2018] systemd[1]: Found ordering cycle on basic.target/start
[Thu Aug  2 19:58:30 2018] systemd[1]: Found dependency on sockets.target/start
[Thu Aug  2 19:58:30 2018] systemd[1]: Found dependency on dbus.socket/start
[Thu Aug  2 19:58:30 2018] systemd[1]: Found dependency on sysinit.target/start
[Thu Aug  2 19:58:30 2018] systemd[1]: Found dependency on raspi-config.service/start
[Thu Aug  2 19:58:30 2018] systemd[1]: Found dependency on remote-fs.target/start
[Thu Aug  2 19:58:30 2018] usb 1-1-port4: attempt power cycle
[Thu Aug  2 19:58:31 2018] fuse init (API version 7.26)
[Thu Aug  2 19:58:31 2018] snd_bcm2835: module is from the staging directory, the quality is unknown, you have been warned.
[Thu Aug  2 19:58:31 2018] i2c /dev entries driver
[Thu Aug  2 19:58:31 2018] usb 1-1.4: new low-speed USB device number 6 using dwc_otg
[Thu Aug  2 19:58:31 2018] usb 1-1.4: new low-speed USB device number 7 using dwc_otg
...

ohne dwc_otg.speed=1 wurde es erkannt:
Jul 29 22:08:06 raspi-fhem kernel: [    2.412279] usb 1-1.4: new low-speed USB device number 4 using dwc_otg
Jul 29 22:08:06 raspi-fhem kernel: [    2.540089] random: systemd-sysv-ge: uninitialized urandom read (16 bytes read)
Jul 29 22:08:06 raspi-fhem kernel: [    2.627505] usb 1-1.4: New USB device found, idVendor=04d9, idProduct=a052
Jul 29 22:08:06 raspi-fhem kernel: [    2.640352] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Jul 29 22:08:06 raspi-fhem kernel: [    2.653169] usb 1-1.4: Product: USB-zyTemp
Jul 29 22:08:06 raspi-fhem kernel: [    2.665717] usb 1-1.4: Manufacturer: Holtek
Jul 29 22:08:06 raspi-fhem kernel: [    2.678137] usb 1-1.4: SerialNumber: 1.40
Jul 29 22:08:06 raspi-fhem kernel: [    2.733107] hid-generic 0003:04D9:A052.0001: hiddev96,hidraw0: USB HID v1.10 Device [Holtek USB-zyTemp] on usb-3f980000.usb-1.4/input0


Wie ist die Interruprate bei euren CULs? (vmstat 1)
Hat wer eine Idee, wie ich die Interrupts verringere ohne das USB auf Speed 1 zu Schalten?
Gibt es einen Trick, mein CO2-Device unter USB-V1 zu betreiben?

Danke
Didi