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.

[参考译文] DRA821U:在 CPSW2g 通信期间、如果您在 CPSWng 中插入和拔下电缆、则可能不会获得中断。

Guru**** 2392495 points
Other Parts Discussed in Thread: J7200XSOMXEVM

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1482658/dra821u-during-cpsw2g-communication-if-you-plug-and-unplug-the-cable-in-cpswng-the-interrupt-may-not-be-obtained

器件型号:DRA821U

工具/软件:

尊敬的团队:

我们 设计了基于 J7200XSOMXEVM 参考设计的定制电路板。

我们将使用 PROCESSOR-SDK-LINUX-RT J7200 (10.00.07.03)、为定制电路板开发软件。

定制板使用三个以太网端口:CPSW2g (MCU-RMII1)和 CPSWng (RGMII2、RGMII3)。

CPSW2g 用于 EtherCAT 通信、CPSWng 执行通用 IP 通信。

在 CPSW2g 通信期间、如果您在 CPSWng 中断开并连接电缆、EtherCAT 通信中可能会发生帧丢失。

当我们使用 ftrace 获取帧丢失时的跟踪数据、以及当帧丢失时的数据没有丢失时、我们发现了以下差异。

*图像(左:发生帧丢失,右:未发生帧丢失)

帧丢失不会一直发生、但每隔几次发生一次。

我插入并拔下电缆五次、并在第五次尝试时发生帧丢失时连接跟踪数据。

e2e.ti.com/.../err_5F00_sched_5F00_switch.dat

这可能是因为 CPSW2g 和 CPSWng 使用同一个驱动程序(am65-cpsw-nuss.c)吗?
是否有办法解决这一问题?

此致、

Mizutani

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

    您好、

    Unknown 说:
    这可能是因为 CPSW2g 和 CPSWng 使用相同的驱动程序(am65-cpsw-nuss.c)吗?

    不应该是因为为 CPSW2G 和 CPSWnG 使用了相同的驱动程序。

    您是否可以检查 CPSW 统计信息、查看电缆拔出和插头期间的任何错误。

    此致、
    Sudheer

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

    你(们)好

    进一步调查发现 CPSW2g 是 EtherCAT 主器件、问题似乎是由帧传输过程未运行引起的。 但是、当 CPSWng 电缆被拔出并重新插入时、过程停止运行的原因仍不清楚。

    跟踪 PREMITtirq 事件的结果如下所示。

    *图像(左:未发生帧丢失,右:发生帧丢失)

    这些结果告诉我们什么吗? 如果是的话、我们应如何进行进一步的调查?

    此致、

    Mizutani

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

    您好、

    您是否观察到 CPSW2G 有任何链路断开? 如果是、它可能会停止传输。
    否则、停止 CPSW2G 传输过程没有含义。

    您能在上面的观察期间与我们分享 Linux 日志吗?

    此致、
    Sudheer

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

    您好、

    从日志中、它看起来像是为以太网接口创建的 systemd 服务、

    什么是以太网、是 CPSWnG 吗?
    networkd-639?
    12月26日11:44:59设备内核:am65-cpsw-nuss c000000.Ethernet:链路断开
    Dec 26 11:44:59 Device systemd-networkd[639]:以太网:丢失的载波
    Dec 26 11:44:59 Device systemd-networkd[639]:以太网:DHCP 租用丢失

    如果您有相同的文件服务文件 CPSW2G 和 CPSWnG、您可以为每个文件创建不同的文件。

    上面看起来它与链路问题的驱动程序无关、某些服务可能会阻止 CPSW2G 上的传输。

    此致、
    Sudheer

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

    你(们)好

    此处的以太网是什么、是 CPSWnG?

    没错。

    如果您有相同的文件服务文件 CPSW2G 和 CPSWnG、您可以为每个文件创建不同的文件。

    这是否意味着"/etc/systemd/network /*。network"?
    如果是、则在不同的文件中定义了不同的接口。

    上面看起来它与链接问题的驱动程序无关、某些服务可能会阻止 CPSW2G 上的传输。

    在我们的系统中、设置以下内核的命令行参数、以便 EtherCAT 应用程序占用 CPU1。

    "nohz full=1 isolcpus=1 rcu_nocbs=1 rcu_nocb_poll irqaminity=0 nosoftlocking"
    CPSW2G 中断也由 SMP_Affinity 分配给 CPU1。
    通过这些配置、我们相信 EtherCAT 应用程序能够避免来自 CPSW2G 以外接口的潜在干扰。 我们的理解是否准确?

    此致、

    Mizutani

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

    您好、

    如果您有相同的文件服务文件 CPSW2G 和 CPSWnG、您可以为每个文件创建不同的文件。

    这是否意味着"/etc/systemd/network /*。network"?
    如果是、则在不同的文件中定义了不同的接口。

    [/报价]

    是的、我是针对 CPSW2G 和 CPSWnG 保持不同。

    上面看起来它与链路问题的驱动程序无关、某些服务可能会阻止 CPSW2G 上的传输。

    在我们的系统中、设置以下内核的命令行参数、以便 EtherCAT 应用程序占用 CPU1。

    "nohz full=1 isolcpus=1 rcu_nocbs=1 rcu_nocb_poll irqaminity=0 nosoftlocking"
    CPSW2G 中断也由 SMP_Affinity 分配给 CPU1。
    通过这些配置、我们相信 EtherCAT 应用程序能够避免来自 CPSW2G 以外接口的潜在干扰。 我们的理解是否准确?
    [/报价]

    您能否分享所有。 systemd 和 journalctl 日志使用的网络和.netdev 文件(在问题案例和非问题案例中)。

    此致、
    Sudheer

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

    你(们)好

    下面是 systemd 使用的所有.network 文件。

    e2e.ti.com/.../7870 src.zip

    问题发生时的日志已得到解决。

    我记录了该现象期间的内核日志。 CPSW2G 的链路似乎未发生。

    另外、这种现象似乎同时在 CPSWng 的链路建立和链路断开期间发生。

    每个时序的日志如下所示。

    [/报价]

    这些日志表示从'~# journalctl -f'启动到 EtherCAT 通信在反复拔下并重新插入电缆后发生故障的时间段。

    此外、启动时的 CPSW2G 和 CPSWnG 日志如下所示。

    CPSW2G *  

    [    0.895145] davinci_mdio 46000f00.mdio: Configuring MDIO in manual mode
    [    1.039804] davinci_mdio 46000f00.mdio: davinci mdio revision 9.7, bus freq 1000000
    [    1.249449] davinci_mdio 46000f00.mdio: phy[0]: device 46000f00.mdio:00, driver TI DP83822
    [    1.249491] am65-cpsw-nuss 46000000.ethernet: initializing am65 cpsw nuss version 0x6BA02102, cpsw version 0x6BA82102 Ports: 2 quirks:00000000
    [    1.249676] am65-cpsw-nuss 46000000.ethernet: initialized cpsw ale version 1.4
    [    1.249679] am65-cpsw-nuss 46000000.ethernet: ALE Table size 64
    [    2.231653] davinci_mdio 46000f00.mdio: Configuring MDIO in manual mode
    [    2.265800] davinci_mdio 46000f00.mdio: davinci mdio revision 9.7, bus freq 1000000
    [    2.276619] davinci_mdio 46000f00.mdio: phy[0]: device 46000f00.mdio:00, driver TI DP83822
    [    2.284935] am65-cpsw-nuss 46000000.ethernet: initializing am65 cpsw nuss version 0x6BA02102, cpsw version 0x6BA82102 Ports: 2 quirks:00000000
    [    2.287967] am65-cpsw-nuss 46000000.ethernet: initialized cpsw ale version 1.4
    [    2.287972] am65-cpsw-nuss 46000000.ethernet: ALE Table size 64
    [    2.320505] am65-cpsw-nuss 46000000.ethernet: set new flow-id-base 48
    [    7.069612] am65-cpsw-nuss 46000000.ethernet ethercat: renamed from eth0
    [   11.832200] am65-cpsw-nuss 46000000.ethernet ethercat: PHY [46000f00.mdio:00] driver [TI DP83822] (irq=POLL)
    [   11.841805] am65-cpsw-nuss 46000000.ethernet ethercat: configuring for phy/rmii link mode
    [   13.920388] am65-cpsw-nuss 46000000.ethernet ethercat: Link is Up - 100Mbps/Full - flow control off
    [   14.883914] am65-cpsw-nuss 46000000.ethernet ethercat: entered promiscuous mode

    CPSWnG  *

    [    1.534356] davinci_mdio c000f00.mdio: Configuring MDIO in manual mode
    [    1.695804] davinci_mdio c000f00.mdio: davinci mdio revision 9.7, bus freq 1000000
    [    1.883913] davinci_mdio c000f00.mdio: phy[0]: device c000f00.mdio:00, driver TI DP83867
    [    1.883948] am65-cpsw-nuss c000000.ethernet: initializing am65 cpsw nuss version 0x6BA02102, cpsw version 0x6BA82102 Ports: 5 quirks:00000000
    [    1.912011] am65-cpsw-nuss c000000.ethernet: initialized cpsw ale version 1.4
    [    1.912016] am65-cpsw-nuss c000000.ethernet: ALE Table size 512
    [    2.332718] davinci_mdio c000f00.mdio: Configuring MDIO in manual mode
    [    2.368804] davinci_mdio c000f00.mdio: davinci mdio revision 9.7, bus freq 1000000
    [    2.378959] davinci_mdio c000f00.mdio: phy[0]: device c000f00.mdio:00, driver TI DP83867
    [    2.387081] am65-cpsw-nuss c000000.ethernet: initializing am65 cpsw nuss version 0x6BA02102, cpsw version 0x6BA82102 Ports: 5 quirks:00000000
    [    2.400189] am65-cpsw-nuss c000000.ethernet: initialized cpsw ale version 1.4
    [    2.404802] am65-cpsw-nuss c000000.ethernet: ALE Table size 512
    [    2.423088] am65-cpsw-nuss c000000.ethernet: set new flow-id-base 60
    [    6.961344] am65-cpsw-nuss c000000.ethernet PC: renamed from eth2
    [    7.025114] am65-cpsw-nuss c000000.ethernet ethernet: renamed from eth1
    [   11.926422] am65-cpsw-nuss c000000.ethernet ethernet: PHY [c000f00.mdio:00] driver [TI DP83867] (irq=POLL)
    [   11.939825] am65-cpsw-nuss c000000.ethernet ethernet: configuring for phy/rgmii-rxid link mode
    [   11.974333] am65-cpsw-nuss c000000.ethernet PC: configuring for fixed/rgmii link mode
    [   11.983472] am65-cpsw-nuss c000000.ethernet PC: Link is Up - 1Gbps/Full - flow control off
    [   16.033311] am65-cpsw-nuss c000000.ethernet ethernet: Link is Up - 1Gbps/Full - flow control rx/tx

    此致、

    Mizutani

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

    您好、

    让我检查配置文件和日志并尽快回复您。

    此致、
    Sudheer

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

    您好、

    systemd 文件对于每个网络接口都非常简单且独立。

    让我们来看看一下 Linux-RT、并在下周初为您提供更新。

    此致、
    Sudheer

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

    您好、

    您对此问题有任何更新吗?

    此致、

    Mizutani

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

    您好、  

    很抱歉、由于其他高优先级活动、我无法检查此问题。  

    我们将在本周尽快为您提供最新信息。

    此致、  

    Sudherr

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

    您好、

    我对重复的跟进表示歉意、但请您就此提供最新信息?

    此致、

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

    您好、

    很抱歉耽误你的时间。

    我已通过从 Linux 启用 CPSW2G 和 CPSW9G 来测试 RT-Link SDK。 在测试过程中、当断开电缆并将其重新连接到 CPSW9G 时、我没有在 CPSW2G 上观察到任何流量中断。

    我正在 CPSW2G 接口上运行 Iperf、在此过程中、我要拔下并重新连接 CPSW9G 端口连接。

    此致、
    Sudheer

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

    你(们)好

    在我们的评估环境中、EtherCAT 通信在1ms 内执行、电缆断开或重新连接时会发生帧丢失。

    观察内核跟踪、阻断时间仅为3ms 至5ms、然后通信恢复。

    我已通过从 Linux 同时启用 CPSW2G 和 CPSW9G 来测试 RT-Link SDK。 在测试过程中、断开电缆并将其重新连接到 CPSW9G 时、我没有在 CPSW2G 上观察到任何流量中断。

    当你说没有交通中断,这是否意味着即使这轻微的堵塞不会发生?

    此致、

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

    你(们)好

    我已通过从 Linux 启用 CPSW2G 和 CPSW9G 来测试 RT-Link SDK。 在测试过程中、当断开电缆并将其重新连接到 CPSW9G 时、我没有在 CPSW2G 上观察到任何流量中断。

    当你说没有交通中断,这是否意味着即使这轻微的堵塞不会发生?

    [/报价]

    我没有观察到 iperf 数据有任何下降。

    查看内核跟踪、阻止时间仅为3ms 到5ms、然后通信恢复。

    由于延迟可能非常小、因此可能无法在我的 iperf 数据中捕获。
    您能分享跟踪是如何完成的吗、我们会介绍一下。

    此致、
    Sudheer

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

    你(们)好

    执行以下命令后、我拔下并插入 LAN 电缆。

    ~# trace-cmd record --file-version 6 -e sched_switch -o /tmp/sched_switch.dat

    如前所述、拔下或插入电缆时、并不总是会出现这种现象。 它每隔几次发生一次。
    我们通过 EtherCAT 通信错误确定该现象的发生、并停止内核跟踪。

    拔出电缆和插入电缆之间的间隔如下。
    1.拔下电缆
    2、输出"kernel: am65-cpsw-nuss c00000000.ethernet:link is down"(内核:am65-cpsw-nuss c000000.ethernet:链路断开)
    3.插入电缆
    4、输出"kernel: am65-cpsw-nuss c000000.ethernet:link is up"(内核:am65-cpsw-nuss c000000.ethernet:链路接通)

    此致、
    Mizutani

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

    您好、

    正如前面所述、当拔下或插入电缆时、这种现象并不总是会出现。 它每隔几次发生一次。
    我们通过 EtherCAT 通信错误确定此现象的发生、并停止内核跟踪。

    您认为问题是 EtherCAT 通信错误导致的、而不是电缆拔下并重新连接导致的?

    此致、
    Sudheer

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

    你(们)好

    问题在于、拔下并重新插接电缆时会发生 EtherCAT 通信错误。

    [引述 userid="540868" url="~/support/processors-group/processors/f/processors-forum/1482658/dra821u-during-cpsw2g-communication-if-you-plug-and-unplug-the-cable-in-cpswng-the-interrupt-may-not-be-obtained/5737020 #5737020"]
    如前所述、拔下或插入电缆时、并不总是会出现这种现象。 它每隔几次发生一次。
    我们通过 EtherCAT 通信错误确定该现象的发生、并停止内核跟踪。

    您认为问题是 EtherCAT 通信错误导致的、而不是电缆拔下并重新连接导致的?

    [/报价]

    这意味着何时使用"Ctrl+C"停止内核跟踪。

    此致、
    Mizutani

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

    您好、

    问题在于、当电缆拔下并重新插入时会发生 EtherCAT 通信错误。

    这是应用吗、您是否尝试连接 CPSW9G 接口?
    用于 CPSW2G 和 CPSW9G 的 PHY 是否不同? 它们是否通过独立的 MDIO 接口进行处理?  

    此致、
    Sudheer

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

    你(们)好

    它是否是正确的应用程序、您是否尝试连接 CPSW9G 接口?

    CPSW2g 用于 EtherCAT 通信、CPSWng 执行通用 IP 通信。

    在 CPSW2g 通信期间、如果您在 CPSWng 中断开并连接电缆、EtherCAT 通信中可能会发生帧丢失。

    EtherCAT 通信的过程和以太网通信的过程是相互独立的。

    用于 CPSW2G 和 CPSW9G 的 PHY 是否不同? 它们是否通过独立的 MDIO 接口进行处理?  [/报价]

    CPSW2g 使用 DP83822作为 PHY、CPSWng 使用 DP83867作为 PHY。

    CPSW2g 使用 MCU_MDIO0、CPSWng 使用 MDIO0。

    此致、
    Mizutani

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

    您好、

    感谢您分享详细信息、我们了解 CPSW2G 和 CPSWnG 都在运行独立用例、PHY 使用的 MDIO 也不同。

    让我在内部检查一下这一点。

    此致、
    Sudheer

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

    你好、Mizutani、

    您可以尝试添加:
    RequiredForOnline=no
    [Link] section of:
    20-eth1.link
    30-eth2.link

    systemd-networkd 可能会认为网络暂时无法连接、因此会阻止来自 eth0的通信。

    此致、
    Siddharth。

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

    您好、

    我添加了您给我的参数、但问题仍然存在。

    还有什么我可以尝试的吗?

    此致、
    Mizutani

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

    是否已确保所有其他中断的关联设置为 CPU0? 另外、Effective_Affinity 的值是多少? 您能否分享以下输出:
    对于$(ls /proc/irq)中的 j;执行回显"${j}:$(cat /proc/irq /${j}/effective_affinity)";完成;

    此致、
    Siddharth。

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

    您好、

    下面给出了中断信息。

    ~# cat /proc/interrupts
               CPU0       CPU1
     11:      95965     290886     GICv3  30 Level     arch_timer
     14:       2032          0     GICv3  69 Level     32c00000.mailbox thr_011
     19:      10990          0     GICv3  35 Level     mmc0
     33:        297          0     GICv3 928 Level     42120000.i2c
     34:     312441          0     GICv3 232 Level     2000000.i2c
     35:          0      75104  MSI-INTA 15401056 Level     46000000.ethernet-tx0
     44:          0     144746  MSI-INTA 15401065 Level     46000000.ethernet
     45:          0          0  MSI-INTA 15401066 Level     285c0000.dma-controller chan0
     46:          0          0  MSI-INTA 15401067 Level     285c0000.dma-controller chan1
     47:          0          0  MSI-INTA 15401068 Level     285c0000.dma-controller chan2
     67:       1024          0  MSI-INTA 13828216 Level     31150000.dma-controller chan0
     68:          2          0  MSI-INTA 13828217 Level     c000000.ethernet-tx0
     69:          6          0  MSI-INTA 13828218 Level     c000000.ethernet-tx1
     70:          2          0  MSI-INTA 13828219 Level     c000000.ethernet-tx2
     71:          5          0  MSI-INTA 13828220 Level     c000000.ethernet-tx3
     72:         11          0  MSI-INTA 13828221 Level     c000000.ethernet-tx4
     73:          0          0  MSI-INTA 13828222 Level     c000000.ethernet-tx5
     74:          9          0  MSI-INTA 13828223 Level     c000000.ethernet-tx6
     75:         32          0  MSI-INTA 13828224 Level     c000000.ethernet-tx7
     77:        171          0  MSI-INTA 13828226 Level     c000000.ethernet
     78:          0          0  MSI-INTA 13828227 Level     31150000.dma-controller chan1
    267:          0          0     GICv3 878 Level     40a00000.serial
    268:        747          0     GICv3 224 Level     2800000.serial
    269:          0          0     GICv3 225 Level     2810000.serial
    270:          0          0     GICv3 872 Level     47040000.spi
    361:          0          0      GPIO  84 Edge    -davinci_gpio  tps6594-0-0x48, tps6594-2-0x4c
    368:          0          0      GPIO   1 Edge    -davinci_gpio  powersignal
    369:          0          0      GPIO   2 Edge    -davinci_gpio  powersignal
    370:         39          0      GPIO   3 Edge    -davinci_gpio  degitalinput
    371:         38          0      GPIO   4 Edge    -davinci_gpio  degitalinput
    425:          0          0      GPIO  58 Edge    -davinci_gpio  pwm-fan
    522:          0          0  tps6594-0-0x48  88 Edge      alarm
    662:          0          0  MSI-INTA 13893765 Edge      31150000.dma-controller chan1
    704:          0          0     GICv3  36 Level     mmc1
    705:          0          0     GICv3 892 Level     TI-am335x-adc.10.auto
    709:          0          0     GICv3 128 Level     xhci-hcd:usb1
    711:          0          0     GICv3 152 Level     6000000.usb
    IPI0:       439     156065       Rescheduling interrupts
    IPI1:         0        726       Function call interrupts
    IPI2:         0          0       CPU stop interrupts
    IPI3:         0          0       CPU stop (for crash dump) interrupts
    IPI4:         0          0       Timer broadcast interrupts
    IPI5:       137     135316       IRQ work interrupts
    IPI6:         0

    您是否已确保所有其他中断的关联设置为 CPU0? 另外、Effective_Affinity 的值是多少? 您能否分享以下输出:
    对于$(ls /proc/irq)中的 j;执行回显"${j}:$(cat /proc/irq /${j}/effective_affinity)";完成; [/报价]


    ~# for j in $(ls /proc/irq); do echo "${j}: $(cat /proc/irq/${j}/effective_affinity)"; done;
    1: 0
    10: 0
    11: 0
    12: 0
    13: 0
    14: 1
    19: 1
    2: 0
    267: 0
    268: 1
    269: 0
    270: 1
    3: 0
    33: 1
    34: 1
    35: 2
    36: 2
    361: 0
    368: 0
    369: 0
    37: 1
    370: 0
    371: 0
    38: 2
    39: 1
    4: 0
    40: 2
    41: 1
    42: 2
    425: 0
    44: 2
    45: 1
    46: 1
    47: 1
    5: 0
    522: 0
    6: 0
    662: 1
    67: 1
    68: 1
    69: 1
    7: 0
    70: 1
    704: 1
    705: 1
    709: 1
    71: 1
    711: 1
    72: 1
    73: 1
    74: 1
    75: 1
    77: 1
    78: 1
    8: 0
    9: 0

    此致、
    Mizutani

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

    当问题发生时、EtherCAT 任务未在 CPU1上运行、但似乎还有另一个进程(可能是 systemd-networkd)在 CPU1上运行。

    将 systemd-networkd 的关联性设置为 CPU0:
    1.运行以下命令:
    systemctl 编辑 systemd-networkd
    2.在文件末尾添加以下内容:
    CPUAffinity=0
    3.保存文件,然后运行:
    systemctl 重新启动 networkd-dispatcher.service
    4.尝试重新创建问题

    此致、
    Siddharth。

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

    您好、

    我在[Service]部分中添加了"CPUAffinity=0"、如下所示:

    ~# systemctl cat systemd-networkd
    # /usr/lib/systemd/system/systemd-networkd.service
    #  SPDX-License-Identifier: LGPL-2.1-or-later
    #
    #  This file is part of systemd.
    #
    #  systemd is free software; you can redistribute it and/or modify it
    #  under the terms of the GNU Lesser General Public License as published by
    #  the Free Software Foundation; either version 2.1 of the License, or
    #  (at your option) any later version.
    
    [Unit]
    Description=Network Configuration
    Documentation=man:systemd-networkd.service(8)
    Documentation=man:org.freedesktop.network1(5)
    ConditionCapability=CAP_NET_ADMIN
    DefaultDependencies=no
    # systemd-udevd.service can be dropped once tuntap is moved to netlink
    After=systemd-networkd.socket systemd-udevd.service network-pre.target systemd-sysusers.service systemd-sysctl.service
    Before=network.target multi-user.target shutdown.target initrd-switch-root.target
    Conflicts=shutdown.target initrd-switch-root.target
    Wants=systemd-networkd.socket network.target
    
    [Service]
    AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_BROADCAST CAP_NET_RAW
    BusName=org.freedesktop.network1
    CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_BROADCAST CAP_NET_RAW
    DeviceAllow=char-* rw
    ExecStart=!!/usr/lib/systemd/systemd-networkd
    FileDescriptorStoreMax=512
    LockPersonality=yes
    MemoryDenyWriteExecute=yes
    NoNewPrivileges=yes
    ProtectProc=invisible
    ProtectClock=yes
    ProtectControlGroups=yes
    ProtectHome=yes
    ProtectKernelLogs=yes
    ProtectKernelModules=yes
    ProtectSystem=strict
    Restart=on-failure
    RestartKillSignal=SIGUSR2
    RestartSec=0
    RestrictAddressFamilies=AF_UNIX AF_NETLINK AF_INET AF_INET6 AF_PACKET
    RestrictNamespaces=yes
    RestrictRealtime=yes
    RestrictSUIDSGID=yes
    RuntimeDirectory=systemd/netif
    RuntimeDirectoryPreserve=yes
    SystemCallArchitectures=native
    SystemCallErrorNumber=EPERM
    SystemCallFilter=@system-service
    Type=notify-reload
    User=systemd-network
    WatchdogSec=3min
    CPUAffinity=0
    
    [Install]
    WantedBy=multi-user.target
    Also=systemd-networkd.socket
    Alias=dbus-org.freedesktop.network1.service
    
    # The output from this generator is used by udevd and networkd. Enable it by
    # default when enabling systemd-networkd.service.
    Also=systemd-network-generator.service
    
    # We want to enable systemd-networkd-wait-online.service whenever this service
    # is enabled. systemd-networkd-wait-online.service has
    # WantedBy=network-online.target, so enabling it only has an effect if
    # network-online.target itself is enabled or pulled in by some other unit.
    Also=systemd-networkd-wait-online.service

    运行"systemctl restart networkd-dispatcher.service"时、我收到一条错误消息、指出该服务不存在。

    ~# systemctl restart networkd-dispatcher.service
    Failed to restart networkd-dispatcher.service: Unit networkd-dispatcher.service not found.

    因此、添加上述参数后、重新启动系统。

    但问题仍然存在。

    我已附上问题发生时的内核跟踪数据、因此请进行检查。

    e2e.ti.com/.../sched_5F00_switch_5F00_edit_5F00_systemd_2D00_networkd.dat

    此致、
    Mizutani

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

    您好:

    当我运行"systemctl restart networkd-dispatcher.service"时、我收到一条错误消息、指出该服务不存在。

    您能否共享以下输出:
    systemctl
    要识别设备上运行的整个服务列表? networkd-dispatcher.service 可能不是正确的服务、我们需要修改其等效服务的 service-file、才能使 CPUAffinity 参数生效。

    此致、
    Siddharth。

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

    您好:

    正确的服务似乎是:
    systemd-networkd.service
    所以 更新对应于以下内容的文件后要运行的命令:
    systemctl 编辑 systemd-networkd

    systemctl 重新启动 systemd-networkd.service

    您是否可以测试上述内容、如果问题仍然存在、请分享之前共享的以下可视化效果:

    您还能告诉我您正在使用哪个工具从生成上述内容吗 .dat 在您之前的回复中共享的文件?

    此致、
    Siddharth。

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

    您好、

    编辑 systemd-networkd 未解决问题。

    我使用 KernelShark 作为可视化内核跟踪的工具。

    此致、
    Mizutani

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

    在我们的系统中、设置以下内核的命令行参数、以便 EtherCAT 应用程序占用 CPU1。

    "nohz full=1 isolcpus=1 rcu_nocbs=1 rcu_nocb_poll irqaminity=0 nosoftlocking"
    CPSW2G 中断也由 SMP_Affinity 分配给 CPU1。
    通过这些配置、我们相信 EtherCAT 应用程序能够避免来自 CPSW2G 以外接口的潜在干扰。 我们的理解是否准确?
    [/报价]

    当 EtherCAT 应用程序通过隔离在 CPU1上运行时、CPSW2G 驱动程序仍在 CPU0上运行(除了您已经阐明要分配给 CPU1的 TX 完成中断处理之外)。 因此、CPU0上发生的事件(包括 CPSW5G 链路断开/链路建立事件和其他 systemd 服务)将影响 Linux 网络堆栈和 CPSW2G 驱动程序 ndo_xmit 除非它们绑定到 CPU1、否则进行回调。

    我安装了 KernelShark 并能够查看您在之前回复中共享的.dat 文件。 您能否告诉我、确定跟踪中对应于3ms 延迟的部分的过程?

    此致、
    Siddharth。

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

    您好、

    因此、CPU0上发生的事件(包括 CPSW5G 链路断开/链路建立事件和其他 systemd 服务)将影响 Linux 网络堆栈和 CPSW2G 驱动程序 ndo_xmit 除非它们绑定到 CPU1、否则回调。

    关于以上内容、您能告诉我、是否有办法让 CPSW5G 和 CPSW2G 由自己的 CPU 处理?

    i 安装了 KernelShark、并且能够查看您在之前回复中分享的.dat 文件。 您能告诉我确定跟踪中对应于3ms 延迟的部分的过程吗?

    处理 systemd-networkd 时会出现这种现象。

    从菜单栏中选择"Plots"->"Tasks"、选择"631 systemd-network"和"715 EtherCAT_Task"、然后点击"Apply"以显示这两个任务的处理时序。

    在我发送的.dat 文件中、该问题是第五次拔下 LAN 电缆时发生的、因此您将使用光标放大最后一个条目 systemd-network。 使用光标时、您可以放大左键单击和松开之间的区域。

    此致、
    Mizutani

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

    您好:

    感谢您分享识别观察到3ms 延迟的部分的步骤。 在之前共享的.dat 文件中:
    e2e.ti.com/.../8883.sched_5F00_switch_5F00_edit_5F00_systemd_2D00_networkd.dat
    即使在可视化工具中选择了所有进程、似乎仍然存在差距、即在 CPU1上看到因正在调度 EtherCAT_Task 而出现长延迟的持续时间中不会出现任何进程。 我不清楚是否有某些进程在 CPU1上运行但未在跟踪中捕获、或者是否与未在截止日期内调度 EtherCAT_Task 的调度器相关。 您能否在 EtherCAT_Task 应用程序中分享代码部分、该应用程序负责每1ms 进行一次自身调度?

    此致、
    Siddharth。

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

    您好、

    EtherCAT 控制单元是第三方软件、因此我无法共享源代码。

    但我发现了一些困扰我的东西。

    我们发现、在插入和拔下电缆时、每1usec 执行一次与地址查找引擎(ALE)相关的函数。

    我想确认禁用地址查找引擎(ALE)是否可以防止此问题。 您能告诉我如何禁用它吗?

    此致、
    Mizutani

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    发现与地址查找引擎(ALE)相关的函数在插入和拔下电缆时每1usec 执行一次。

    跟踪显示它们在上执行 CPU0 而 EtherCAT_Task 的运行时间 CPU1 。 我不知道它们是如何关联的。

    EtherCAT 控制单元是第三方软件、因此我无法共享源代码。

    是否有办法排除 EtherCAT 软件存在错误? 我们如何才能确定其安排方式与本软件无关? 如果不是整个源代码、您是否至少能够以1ms 的间隔共享用于调度任务的 API?

    此致、
    Siddharth。

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

    你(们)好

    我之前收到了以下答复:

    当 EtherCAT 应用程序通过隔离在 CPU1上运行时、CPSW2G 驱动程序仍在 CPU0上运行(除了您已经阐明是分配给 CPU1的 TX 完成中断处理)。

    因此、是否可以认为 CPU0侧的高负载会影响 CPSW2G 驱动程序的处理、从而导致 EtherCAT 任务被阻止?

    这是一个有点强迫,这个问题消失后,我评论了 am65-cpsw-nuss 驱动程序的 ALE 处理部分.

    static void am65_cpsw_nuss_ndo_slave_set_rx_mode(struct net_device *ndev)
    {
    	struct am65_cpsw_common *common = am65_ndev_to_common(ndev);
    	struct am65_cpsw_port *port = am65_ndev_to_port(ndev);
    	u32 port_mask;
    	bool promisc;
    
    	promisc = !!(ndev->flags & IFF_PROMISC);
    	am65_cpsw_slave_set_promisc(port, promisc);
    
    	if (promisc)
    		return;
    
    	// /* Restore allmulti on vlans if necessary */
    	// cpsw_ale_set_allmulti(common->ale,
    	// 		      ndev->flags & IFF_ALLMULTI, port->port_id);
    
    	// port_mask = ALE_PORT_HOST;
    	// /* Clear all mcast from ALE */
    	// cpsw_ale_flush_multicast(common->ale, port_mask, -1);
    
    	// if (!netdev_mc_empty(ndev)) {
    	// 	struct netdev_hw_addr *ha;
    
    	// 	/* program multicast address list into ALE register */
    	// 	netdev_for_each_mc_addr(ha, ndev) {
    	// 		cpsw_ale_add_mcast(common->ale, ha->addr,
    	// 				   port_mask, 0, 0, 0);
    	// 	}
    	// }
    }

    我理解这是错误的方法来解决它。 那么、您能告诉我如何优化 ALE 吗?

    此致、
    Mizutani

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我知道这是错误的解决方法。 那么、您能告诉我如何优化 ALE 吗?

    您可以尝试使用以下方法人为地减少 ALE 条目数:

    diff --git a/drivers/net/ethernet/ti/cpsw_ale.c b/drivers/net/ethernet/ti/cpsw_ale.c
    index dc5e247ca5d1..4f85d59a8263 100644
    --- a/drivers/net/ethernet/ti/cpsw_ale.c
    +++ b/drivers/net/ethernet/ti/cpsw_ale.c
    @@ -1509,7 +1509,7 @@ struct cpsw_ale *cpsw_ale_create(struct cpsw_ale_params *params)
            if (!ale_dev_id)
                    return ERR_PTR(-EINVAL);
     
    -       params->ale_entries = ale_dev_id->tbl_entries;
    +       params->ale_entries = 64; //ale_dev_id->tbl_entries;
            params->nu_switch_ale = ale_dev_id->nu_switch_ale;
            params->reg_fields = ale_dev_id->reg_fields;
            params->num_fields = ale_dev_id->num_fields;

    这应该会减少执行您在答复中指向的部分所需的时间。

    此致、
    Siddharth。

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

    您好、

    使用减少条目数量后、问题停止。

    非常感谢您的合作。

    此致、
    Mizutani