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/TMDSICE3359:ICSS-EMAC 问题

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/656143/linux-tmdsice3359-icss-emac-issue

器件型号:TMDSICE3359

工具/软件:Linux

您好!

我在做了一些修改后尝试运行 ICSS-EMAC。 我所做的修改不是采用环回机制、而是希望在 Wireshark 上捕获数据包。因此、每次接收到数据包时 、都会生成一个数据包从应用程序发送。 为了提高性能,我删除了应用程序中的所有打印命令。但是,我的应用程序没有按预期响应,而是出现了以下错误:-

[36.050564]  sched:RT 节流已激活                                   

[37.071561]  NOHZ:local_softirq_pending 102                                 

[37.080611]  NOHZ:local_softirq_pending 102                                 

[37.090563]  NOHZ:local_softirq_pending 102                                 

[38.050568]  NOHZ:local_softirq_pending 102                                 

[38.051798]  NOHZ:local_softirq_pending 102                                 

[38.051915]  NOHZ:local_softirq_pending 102                                 

[38.054264]  NOHZ:local_softirq_pending 102                                 

[38.060568]  NOHZ:local_softirq_pending 102                                 

[38.070561]  NOHZ:local_softirq_pending 102                                 

[38.080559]  NOHZ:local_softirq_pending 102                                 

但是,当我在发送响应数据包之前睡了一觉(1)时,我得到了我的预期行为。 我使用的是 ICEv2AM335x 和 Linux RT。 我的 PC 是 Ubuntu 16.04LTS。
我的问题是,此消息日志表示什么? 发生此事件的原因是什么? 如何纠正?


期待您的支持。

此致

paramesh

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

    您好!

    期待您尽早回复。

    谢谢

    paramesh

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

    您使用的是哪个 TI SDK 版本?
    您突出显示的两条消息表示内核正在检测 PID 或 PID、在系统中花费了太多时间。

    您能否总结一下您正在使用的应用以及预期的行为是什么?

    如果我正确理解您在帖子中提到的是、在您在应用程序中睡眠后消息消失、这是正确的吗? 如果是这样、睡眠模式允许应用程序放弃、并允许运行其他任务。

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

    您好!

    我的 SDK 版本是 ti-processor-sdk-linux-rt-am335x-evm-04.00.04。

    ICSS-EMAC 具有环回机制、其中数据包从同一端口发送和接收到该端口。 如果我理解正确、有一个变量 ICSS_EMAC_testPacketRcvdPort0用作标志、用于指示已接收到数据包、因此将从同一端口发送数据包、此过程将继续10个数据包。

    另一方面,我的要求是捕获在 Wireshark (网络分析器工具)上发送和接收的数据包。 因此我修改了流程,这样回路机制就不存在了,而是发送一个数据包来响应接收到的数据包,我能够在 Wireshark 上捕获数据包。代码修改后,我成功地在 Wireshark 上捕获数据包, 我认为这表明我的应用程序按照我希望的方式工作正常。

    我的问题是、当我从应用程序中删除打印命令时、我无法获得任何响应、并且我找到了日志(如上一帖子中所述)。 因此,我尝试添加延迟,SLEE(1),我能够在 Wireshark 上获取数据包,我的应用程序工作正常。

    我担心这种日志表示什么? 如何解决此问题?

    期待您的支持。

    操作系统- Ubuntu 16.04 LTS

    此致

    paramesh

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

    您提到的变量我不熟悉、我认为可能是 PRU 固件内部的变量。 您是否编写了在 PRU 或 ARM 上运行的代码? 您是否计划通过 ARM 的 Linux 网络接口使用 ICSS-EMAC?

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

    您好!

    我正在编写在 ARM 上运行的代码。 我附加了 ICSS-EMAC 代码、以便清除我在上一帖子中提到的变量。

    此致

    Parameshe2e.ti.com/.../icss_2D00_emac.tar.gz

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

    您好!

    我看到的另一个观察结果是在 Wireshark 中接收到的数据包存在延迟。

    我已经制作了这样的代码,每当收到 ARP 数据包时,它都会发送一个数据包以响应源01:bb:cc:dd:e:ff。

    我观察 到 Wireshark 捕获中几乎有几毫秒(0.9ms)范围内的延迟。 此延迟的原因是什么?

    我在 ICSS_EMAC_testCallbackRxPack()和 ICSS_EmacTxPacketEnqueue ()中获取了时间戳,以找到在应用程序中处理数据包所需的时间。 我将我的调查结果附在这篇帖子中。

    UIO 映射的处理时间是否造成延迟?

    此致

    Parameshe2e.ti.com/.../icssemac.tar.gz

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

    在调查结果中、应用所花费的时间与 Wireshark 所花费的时间之间存在几乎0.2ms 的时间差。 根据我的理解,不应存在0.2ms 的时间差。 我的理解是否正确?

    此致

    paramesh

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

    Paramesh 您好!

    您的延迟结果接近 ICSS-EMAC wiki 中的"AM572x IDK"中显示的已编程周期,因此 ICSS_EMAC_testCallbackRxPack()和 ICSS_EmacTxPacketEnqueue ()之间的延迟看起来就像在预期的 Ballpark 中。 我无法评论 Wireshark 延迟、但我不希望 Wireshark 具有完全完美的计时、因为它是一个独立的程序、与被测器件在单独的机器上运行。

    我仍在研究在代码中没有打印或延迟时程序停止响应的问题。

    此致、  

    Nick

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

    1) 1)您能告诉我您修改了哪些文件来运行测试吗?
    2)如何为 ICSS_EMAC_testCallbackRxPack()和 ICSS_EmacTxPacketEnqueue ()计时? (Linux 定时器、prussIepRegs 等)

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

    您好!

    1) 1)我已修改 MAIN_A8.c 和 TEST_common_utils.c 文件。

    2) 2)我使用了 get clock_gettime (clock_realtime、&variable) API 来获取接收时的时间戳、然后发送并减去、以获取处理数据所花费的时间。  

    期待您的支持和 guidance.e2e.ti.com/.../6675.main_5F00_a8.ce2e.ti.com/.../test_5F00_common_5F00_utils.c

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Paramesh 您好!
    感谢你的答复。 我们将深入了解代码。

    此致、
    Nick
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我期待您的支持。 此问题是否有更新? 您曾提到、我报告的延迟是预期的。 优化 UIO 驱动程序是否有任何需要做的事情?


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

    对于 if 语句、它看起来像是已修改的逻辑:
    if (1)//(!(memcmp (&ICSS_EMAC_testPacketArrayInstance1[0]、&ICSS_EMAC_testPkt[0]、ICSS_EMAC_TEST_PKT_SIZE))))

    如果您将其改回、会有什么变化吗?
    if (!(memcmp (&ICSS_EMAC_testPacketArrayInstance1[0]、&ICSS_EMAC_testPkt[0]、ICSS_EMAC_TEST_PKT_SIZE)))

    我仍在研究延迟问题。

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

    您好!

    我将您提到的 IF 条件更改为已实现的旧逻辑。 根据我的理解、这是一个逻辑写入、因此器件以接收到的相同数据包进行响应。

    观察结果:-

    1)正如我已经提到的。如果没有 SLEEP (1),我会得到错误代码

    [31.050497]  sched:RT 节流已激活                                   
    [34.065405]  NOHZ:local_softirq_pending 102                                
    [34.070536]  NOHZ:local_softirq_pending 102                                  
    [34.080494]  NOHZ:local_softirq_pending 102                                  
    [34.090494]  NOHZ:local_softirq_pending 102                                  
    [35.05097]  NOHZ:local_softirq_pending 102                                  
    [35.054519]  NOHZ:local_softirq_pending 102                                  
    [35.054530]  NOHZ:local_softirq_pending 102                                  
    [35.056778]  NOHZ:local_softirq_pending 102                                  
    [35.060516]  NOHZ:local_softirq_pending 102                                  
    [35.070495]  NOHZ:local_softirq_pending 102          

    2) 2)当我引入延迟时,SLEEP (1),它响应正常。 但是、即使这样、我也可以看到在接收到的数据包和响应数据包发送之间存在几毫秒的延迟。 根据我的理解,这不是由于我引入的延迟,因为我获得的某些延迟值小于1ms (我引入的延迟), 这意味着有一个来自其他地方的延迟、是由 UIO 映射导致的延迟大约为几毫秒。

    我将此帖子附加 Wireshark 文件。由于接收到的数据包和响应数据包是相同的,因此您可以使用数据包编号。 模式是每个偶数数据包都是对前一个奇数数据包的响应。

    (例如:-

    数据包编号2是数据包编号1的响应。

    数据包4是数据包3的响应。

    Wireshark 文件

    数据包3的时间为28.239887秒

    数据包4的时间为28.240825秒

    差值= 28.240825-28.2239887 =0.000938秒= 0.938毫秒

    为什么会发生这种差异?

    e2e.ti.com/.../test.tar.gzLooking期待您的支持。 还附加了 test_common_utils.c 文件、其中我用旧逻辑替换了 if 条件。

    此致

    paramesh

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

    我希望确保我了解您的用例。

    1) 1)您的用例是否涉及使用 TTS 以设置的时间间隔传输数据包? 或者、您是否仅希望在 ICE 板收到 ARP 数据包后传输数据包?

    2) 2)什么是物理设置? 例如、AM335x ICE 板上是否有两个以太网端口连接到运行 Wireshark 的计算机上的两个端口、并且计算机正在发送和接收数据?

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

    您好!

    我希望在 ICE 板接收到 ARP 数据包后传输一个数据包、并且我不使用 TTS。 我所遵循的程序如下:

    我有一个 AM335xicev2板。 我希望电路板在收到 ARP 数据包后发回一个数据包。

    我使用的 ARP 数据包具有以下数据。

       0xFF、0xff、0xff、0xff、0xff、 0xFF、
       0x01、0xbb、0xcc、0xdd、0xee、 0xFF、
       0x08、0x06、0x00、0x01、
       0x08、0x00、0x06、0x04、0x00、0x01、
       0x01、0xbb、0xcc、0xdd、0xee、 0xFF、
       0xc0、0xa8、0x01、0x16、
       0x00、0x00、0x00、0x00、0x00、 0x00、
       0xC0、0xa8、0x01、0x02

    当接收到该数据包时,电路板将以相同的数据包进行响应。 我从 Colasoft 数据包构建器发送上述数据包。 我可以看到电路板使用相同的数据包进行响应。 我在上一篇文章中共享了 Wireshark 文件。 ICE v2板的一个端口连接到 PC 的以太网端口之一。 我在 PC 和电路板中一次只使用一个端口。

    我正在附加一个图像以显示我正在使用的物理设置。

     我使用 Linux Ubuntu 16.04LTS PC 运行我的板(minicom)的控制台、使用 Windows10 PC 运行 Wireshark 和 colasoft 数据包构建器软件。

    期待您的支持。

    谢谢、此致

    paramesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我相信您能够重现我报告的数据包之间的延迟。
    期待您的支持。


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

    很抱歉耽误你的时间。 我明天会为您提供答复。
    此致、
    Nick
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Paramesh 您好!
    我正在修改 TI 示例代码以测试您的用例。
    此致、
    Nick
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Paramesh 您好!  

    1) 1)您会获得这些输出、因为您的代码不允许其他线程在 ARM 内核上运行。 请注意 、在 ICSS-EMAC LLD 的 TEST/src/test_common_utils.c 中、它们在每个轮询传入以太网数据包的循环中都包含一个 SLEEP (100)函数。

    2) 2)通常、您可以通过更改线程或调度程序的优先级来尝试加快应用程序的速度。 由于我们无法控制 Linux 操作系统的所有功能、因此我们无法保证特定的程序需要一定的时间才能运行。 查看 ICSS-EMAC LLD 开发人员指南的数据路径部分 、了解如何将数据包从 PRU 硬件传输到应用程序。 理论上、您可以通过在 PRU 固件中执行所有操作来消除将信息从 PRU 移至用户空间应用的延迟、但这需要大量开发、我认为 TI 没有任何有用的样片。

    此致、  

    Nick