This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/AM3354:导致 RT 节流和 WD 复位的 USB 中断

Guru**** 2589275 points
Other Parts Discussed in Thread: AM3354

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/588033/linux-am3354-usb-interrupts-causing-rt-throttling-and-wd-reset

器件型号:AM3354

工具/软件:Linux

我使用 Sitara AM3354作为 USB 器件、该器件通过 Linux USB CDC-EEM (以太网-over-USB)器件堆栈连接到 x86主机。 从 x86主机对 Sitara USB 设备端点执行 nmap 端口扫描时、Sitara 将经常报告"RT 节流已激活"、有时会重置看门狗。

我推测、nmap 端口扫描生成的 USB 中断量会阻止在 Sitara 上运行的守护程序定期更新其"脚踢"文件、并且看门狗守护程序会检测到此情况并重置 Sitara。 以下是一个示例、其中传感器监控守护程序(sensord)无法"触摸"其 sensord.kick 文件5秒钟、而看门狗守护程序让硬件看门狗过期以重置系统。

DEC 5 18:20:41:Jan 1 00:00:54 127.4.2.2错误安全装置[1247]:文件/var/run/sensord.kick 在5秒内未更改。
12月5日18:20:41:Jan 1 00:00:55 127.4.2.2警告内核:[59.967841][sched_Delayed] sched:RT 节流已激活
DEC 5 18:20:41:JAN 1 00:00:55 127.4.2.2错误安全装置[1247]:修复二进制文件/usr/sbin/capture_logs_before_shutdown.sh 返回255
DEC 5 18:20:41:JAN 1 00:00:55 127.4.2.2警报安全装置[1247]:由于错误255关闭系统
DEC 5 18:20:51:JAN 1 00:01:05 127.4.2.2注意看门狗[1247]:硬件看门狗已启用、让其过期。
DEC 5 18:20:51:JAN 1 00:01:05 127.4.2.2警报安全装置[1247]:安全装置设置为1秒

此问题似乎取决于 nmap 执行的端口扫描的速率。 将 nmap 扫描速率限制为10000个数据包/秒可以避免这一问题-但我想在 Sitara 端找到一个解决方案。 如果 x86可能导致 Sitara 重置看门狗、则这是我们系统中的一个潜在拒绝服务漏洞。

我在执行 nmap 端口扫描时运行了一个检查中断计数器的测试。

while [1];do echo "---"; date;cat /proc/interrupts;echo; 完成

--
2000 年1月1日世界协调时1:01:29时、星期六
      CPU0     
 28:      69   INTC 12 EDMA
 30:      0   INTC 14 EDMA_ERROR
 32:      0   INTC 16 TI-AM335x-ADC
 33:    1411   INTC 17 47400000 DMA 控制器
 34:    1575   INTC 18 musb-hdrc.0.auto
 35:      0   INTC 19 musb-hdrc.1.auto
 46:     638   INTC 30 4819c000.i2c
 52:    7559   INTC 36 tilcdc
 56:      0   INTC 40 4a100000以太网
 57:   13706   INTC 41 4a100000以太网
 58:    5675   INTC 42 4a100000以太网
 59:      0   INTC 43 4a100000以太网
 84:   10238   INTC 68 gp_timer
 86:    1026   INTC 70 44e0b000。i2c
 87:      78   INTC 71 4802a000 i2c
 88:    2180   INTC 72 OMAP UART0
 91:      0   INTC 75 rtc0
 92:      0   INTC 76 rtc0
 93:      0   INTC 77 wkup_m3
 94:      1   INTC 78 wkup_m3_txev
125:      0   INTC 109 53100000.sham
127:      0   INTC 111 48310010.rng
164:      2 44e07000.GPIO 20 Atmel_mxt_ts
错误:      0
[115.967766] [sched_Delayed] sched:RT 节流已激活
--
1月 1日、世界协调时为1:01:35、2000年
      CPU0     
 28:      69   INTC 12 EDMA
 30:      0   INTC 14 EDMA_ERROR
 32:      0   INTC 16 TI-AM335x-ADC
 33:   66962   INTC 17 47400000 DMA 控制器
 34:   67132   INTC 18 musb-hdrc.0.auto
 35:      0   INTC 19 musb-hdrc.1.auto
 46:     638   INTC 30 4819c000.i2c
 52:    8087   INTC 36 tilcdc
 56:      0   INTC 40 4a100000以太网
 57:   13748   INTC 41 4a100000以太网
 58:    5696   INTC 42 4a100000以太网
 59:      0   INTC 43 4a100000以太网
 84:   10887   INTC 68 gp_timer
 86:    1031   INTC 70 44e0b000。i2c
 87:      78   INTC 71 4802a000 i2c
 88:    2465   INTC 72 OMAP UART0
 91:      0   INTC 75 rtc0
 92:      0   INTC 76 rtc0
 93:      0   INTC 77 wkup_m3
 94:      1   INTC 78 wkup_m3_txev
125:      0   INTC 109 53100000.sham
127:      0   INTC 111 48310010.rng
164:      2 44e07000.GPIO 20 Atmel_mxt_ts
错误:      0

在6秒内、DMA 和 USB0中断显著增加。 所有其他中断的增加量都很小。

33:    1411   INTC 17 47400000 DMA 控制器
33:   66962   INTC 17 47400000 DMA 控制器
+65551个中断
34:    1575   INTC 18 musb-hdrc.0.auto
34:   67132   INTC 18 musb-hdrc.0.auto
+65557中断

这几乎是11、000次中断/秒、或每92 us 中断1次。

我在内核中启用了跟踪功能、以尝试确定处理 USB 中断所花费的时间。

Sitara# echo OMAP3_intc_handle_IRQ > set_ftrace_filter
Sitara#回波 nop > Current_tracer
Sitara# echo 1 > function_profile_enabled

Sitara# echo 0 > function_profile_enabled
sitara# cat trace_stat/function0
函数命中时间平均 s^2
---- ------------
OMAP3_intc_handle_IRQ 115547 9388735 us 81.254us 3963830 us

我知道我每92us 就会收到一个中断(没有内核跟踪)、平均需要81us 来处理该中断。 这样就没有太多时间去做任何有用的事情了!

这些数字是否看起来合理-每92us 中断一次、每81us 中断一次 USB 中断服务?
可以对 Sitara 执行哪些操作来降低所有这些 USB 中断的影响?
是否有办法限制 USB 接口的带宽以降低中断频率?

感谢您的任何帮助、
Gregg。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    USB 专家已收到通知。 他们将在这里作出回应。 请发布您使用的 Linux 版本。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢、Biser。

    我将 Processor SDK v1.00.00.03与内核3.14.43搭配使用。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Gregg、

    您可以在最新的 Processor SDK 中尝试 v4.4内核吗? MUSB 和 CPPI 驱动器在 v3.14至 v4.4之间有许多变化。

    您能描述测试的步骤吗? 我想复制相同的内容并对其进行调试。