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.

[参考译文] TDA4AL-Q1:有时 eth0无法传输数据、内核日志会显示"am65-cpsw-nuss c200000.ethernet:无法分配描述符"

Guru**** 2557310 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1267587/tda4al-q1-sometimes-eth0-fail-to-transfer-data-kernel-log-shows-am65-cpsw-nuss-c200000-ethernet-failed-to-allocate-descriptor

器件型号:TDA4AL-Q1

尊敬的专家:

在 TDA4 A 内核上、大多数情况下、eth0正常、PC ping TDA4正常、PC 和 TDA4通过 eth0传输数据也正常。

但有时 eth0无法传输数据、PC ping TDA4失败、内核日志 显示"am65-cpsw-nuss c200000.Ethernet: failed to allocation descriptor "、如下所示:

失败时、如果键入 cmd "ifconfig eth0 down"和"ifconfig eth0 up"、则  PC ping TDA4 ok、PC 和 TDA4通过 eth0传输数据 ok。

那么, 如何解决这个问题"有时 eth0传输数据失败,内核日志显示"am65-cpsw-nuss c200000.以太网:无法分配描述符"?  

顺便说一下、传输数据速率有点大、大于40MBps

谢谢!

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

    您好!

    您是否对 am65 Linux 驱动程序进行了任何更改?

    我们尚未发现 此类 问题、使用 Tx 和 Rx 的默认描述符数量(500)。
    (请参阅 am65-cpsw-nus.c 文件中的 AM65_CPSW_MAX_TX_DESC、AM65_CPSW_MAX_RX_DESC 宏命令)

    如果您认为描述符不够、可以增加并检查一次。

    此致、
    苏德黑尔

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

    尊敬的  Sudheer

      我们使用 J721S2 8.5 SDK Linux 并且未更改任何 am65驱动程序代码。

      我们尝试通过 ethtool 设置更多 TX 通道:"ethtool -L eth0 tx 8"、但我们得到 eth 驱动器的段故障。

      登录:e2e.ti.com/.../eth_5F00_dumplog.txt

      您能帮助检查这个故障吗?

    此致、

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

    您好!

    从上面的日志来看、似乎您要在接口完全关闭之前设置 TX 通道。
    因此、可能需要运行一些并行过程来建立链路并将 TX 通道设置为8个。

    请参阅您在上面共享的日志中的以下捕获日志。

    root@adc615:~# ifconfig eth0 down
    root@adc615:~# ethtool -L eth0 tx 8
    [    7.005503] am65-cpsw-nuss c200000.ethernet: down msc_sl e0000000 tmo 0
    [    7.033647] am65-cpsw-nuss c200000.ethernet: set new flow-id-base 82
    [    7.042461] am65-cpsw-nuss c200000.ethernet eth0: configuring for fixed/rgmii-rxid link mode
    [    7.043007] am65-cpsw-nuss c200000.ethernet eth0: Link is Up - 1Gbps/Full - flow control off
    [    7.043105] 8021q: adding VLAN 0 to HW filter on device eth0
    [   45.536908] am65-cpsw-nuss c200000.ethernet eth0: Link is Down


    我运行了"ethtool -L eth0 tx 8"、在我的系统中未发现任何问题。
    请在我旁边找到日志。



    您能否在观察到以下链接关闭消息后运行 ethtool 命令。
    "[71.240563]  am65-cpsw-nuss 46000000.Ethernet eth0:链路断开"  

    此致、
    苏德黑尔

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

    对于此补丁、我有几个问题:

    此补丁可解决什么问题?   

    2.该补丁似乎是关于 DMA,它是如何影响以太网的?

    3. 该补丁是否应用于 TI 新的 SDK?

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

    您好!

    1.此修补程序有什么问题?   [/报价]

    它可以通过为以太网流量分配高优先级 DMA 通道(UHC)来提高网络吞吐量。

    2. 该补丁似乎与 DMA 有关,它如何影响以太网?

    以太网将 DMA 用于 Tx 以及以太网数据包的 Rx。

    3.  此补丁是否应用于 TI 新 SDK?

    这些代码可用于"Linux-5.10.162" Linux 版本。

    请告诉我们、我们有什么可以为您提供帮助。

    此致、
    苏德黑尔

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

    尊敬的  Sudheer:

    我们的目的是解决 TCP 传输数据负载过大导致的 eth0崩溃问题、因此我们尝试了在 J721S2 8.5 SDK 上应用上述补丁。

    但在应用该补丁后、eth0初始化失败了。

    我们的更改:

    e2e.ti.com/.../dma_5F00_patch.txt

    内核日志:

    e2e.ti.com/.../3060.kernellog.txt

    此致。

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

    您好、Rong、

    可以针对特定用例自定义补丁。
    我从日志中看到 SPI 驱动器本身发生了故障。

    我们没有发现 此类 问题,其中包含 Tx & Rx 的默认描述符数(500)。
    (请参阅 am65-cpsw-nus.c 文件中的 AM65_CPSW_MAX_TX_DESC、AM65_CPSW_MAX_RX_DESC 宏命令)

    如果您认为描述符不够,可以增加和检查一次。

    您是否尝试过以上方法? 如果不能、请检查一次。

    我们的目的是解决 TCP 传输数据过多导致的 eth0崩溃问题,

    如果要控制过多的数据负载、可以使用 tc 命令并从软件本身对 Tx 队列应用速率限制。

    有关速率限制的更多详细信息、请参阅 SDK 文档。

    此致、
    苏德黑尔

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

    尊敬的  Sudheer:

    补丁可针对特定用例进行自定义。
    我从日志 SPI 驱动程序本身看到故障。

    SPI 只是一个警告、它在应用补丁之前存在、不影响网络。

    但当我应用 DMA 补丁时、网络初始化失败。

    我们没有发现 此类 问题,Tx & Rx 的默认描述符数为500。
    (请参阅 am65-cpsw-nus.c 文件中的 AM65_CPSW_MAX_TX_DESC、AM65_CPSW_MAX_RX_DESC 宏命令)

    如果您认为描述符不够,可以增加和检查一次。

    实际上、在我们将 TX 更改为8后、没有错误警报。

    但是、在高负载下、eth0在运行一段时间后仍然会停止工作。

    如果要控制过多的数据负载,可以使用 tc 命令并从软件本身对 Tx 队列应用速率限制。

    有关比率限制的更多详细信息,请参阅 SDK 文档。

    谢谢您提出了另一个思路、我们也会尝试它。

    此致、

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

    您好!

    我们尚未发现 此类 问题、使用 Tx 和 Rx 的默认描述符数量(500)。
    (请参阅 am65-cpsw-nus.c 文件中的 AM65_CPSW_MAX_TX_DESC、AM65_CPSW_MAX_RX_DESC 宏命令)

    如果您认为描述符不够、可以增加并检查一次。

    实际上、在我们将 TX 更改为8后、没有错误警报。

    [/报价]

    感谢您的更新。

    但是,在高负载情况下,eth0在运行一段时间后仍然会停止工作。

    您是否观察到与"am65-cpsw-nuss c200000.ethernet: failed to allocation descriptor "相同的错误。
    如果是这样、你可以按照上面提到的那样尝试增加 no.of 描述符。

    您还可以尝试减小中断速度、以便在我们接收或传输数据时、以快得多的速度触发中断。
    有关相同内容、请参阅 SDK 文档。

    如果要控制过多的数据负载、可以使用 tc 命令并从软件本身对 Tx 队列应用速率限制。

    有关速率限制的更多详细信息、请参阅 SDK 文档。

    谢谢您提出了另一个思路、我们也会尝试它。

    [/报价]

    请同时查看以上内容、以使用 tc CBS 限制交通速率。

    如果您遇到任何问题、请在日志中分享问题和详细信息。

    此致、
    苏德黑尔

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

    我已经将这两个值  AM65_CPSW_MAX_TX_DESC、 AM65_CPSW_MAX_RX_DESC 宏修改 为1000、但我也可以从 dmesg 中获取错误信息:  am65-cpsw-nuss c200000。以太网:无法分配描述符

    TI 从 China Local 的支持向我们提供了一种方法:在补丁中更新 DMA 配置。 我想、这可以提高从内存池到 TDA4网卡传输数据的效率。  修补程序版本是:linux-5.10.162+gitAUTOINC+76b3e88d56-g76b3e88d56

    但我们的 Yacto 内核编译版本是 :5.10.153+gitAUTOINC+cdc701a66d-r0b.arago5_psdkra_91

    该补丁不适用于我们的内核。

    您能给我们提供可以与我们内核版本匹配的 DMA 补丁吗? 或者、您对此问题还有其他想法吗?

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

    e2e.ti.com/.../0001_2D00_change_2D00_cpsw9g_2D00_udma_2D00_channel_2D00_id-_2D00_-.txt

    TI 中国本地补丁的编码是:

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

    您好!

    您能否共享整个 Linux 日志( TCP 负载较高时发生故障转储)、而无需对以太网驱动程序进行任何更改(与 TI SDK 一样、但电路板特定的自定义更改除外)。

    此致、
    苏德黑尔