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/AM5728:CPSW 问题

Guru**** 2933740 points

Other Parts Discussed in Thread: AM5728

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/658869/linux-am5728-cpsw-issues

器件型号:AM5728

工具/软件:Linux

大家好

只需知道我们使用 am5728进行网络分配、我们有两个以太网:eth0和 eth1。

但我们解决了一个问题。

eth0可以300Mb/s 的速率接收或发送网络包、而 Linux 系统可以正常工作。

eth1还可以以300Mb/s 的速率接收或发送网络包、并且 Linux 系统可以正常工作。

但是、如果我们同时使用 eth0和 eth1、并且两个以太网卡以200Mb/s 的速率发送或接收

eth1将损毁和压降软件包、Linux 系统将打印看门狗超时错误、如下所示:

root@am57xx-EVM:~号[22.078811]  --- [在此处剪切]-----

[22.083590]  警告:CPU:0 PID:3 at net/sched/sch_generic.c:316 DEV_watchdog+0x258/0x25c

[22.091967]   NETDEV 看门狗:eth1 (cpsw):发送队列0超时

[22.098347]  模块链接于: bc_example (O) sha512_generic sha512_arm sha256_generic sha1_arm_neon sha1_arm md5 xfrm_user xfrm4_tunnel cc ipcomp xfrm_ipcomp 4 ahf_key xfrm_algo bluetoothci_proms_promsgc xhci_plat_mp_ip_pr_mas clus_ip_ip_ip_pru_mas ip_ip_pr_mas ip_ip_pr_mas ip_ip_mas ip_ip_pr_mc_tcp_ip_pr_pr_pr_mas ip_ip_mcot_ip_ip_ip_pr_ip_ip_pr_mas ip_mas ip_ip_ip_ip_pr_pr_pr_ms_p_mc_tcp_pru_pr_mcot_pr_pr_pr_pru_pru_tcp_mas ip_pr_pr_pr_pr_pru_pru_pru_pru_pr_ extCON_CORE RTC_ds1307 OMAP-DES SND_SoC_tlv320aic3x DES_generic crypto_engine OMA_remote_proc virtio_rpmsg_bus rpmsg_core remoteproc ssch_FQ_codel uio_module_drv (O) uio gdbserverproxy (O) memtodev (O) ck (O)

[22.167354]  CPU:0 PID:3 Comm:ksoftirqd/0被污染:G          O   4.9.59-ga75d8e9305 #1

[22.175739]  硬件名称:通用 DRA74X (平展器件树)

[22.181856]  回溯:

[22.184331][   ](dump_backtrace)从[ ](show_stack+0x18/0x1c)

[22.191919191933]   r7:00000009 R6:600f0013 R5:00000000 R4:c1022668

[22.197619][   ](show_stack)从[ ](dump_stack+0x8c/0xa0)

[22.204875]  [ ](dump_stack)从[ ](_warn+0xec/0x104)

[22.211865]   r7:00000009 r6:c0c0fddc r5:00000000 r4:ee8a5dc8

[22.217548][   ](__warn)从[ ](WARN_RASPH_FMt+0x40/0x48)

[22.225063]   R9:ffff R8:c1002d00 r7:ee05e294 R6:ee05e800 R5:ee05e000 R4:c0c0fda0

[22.232843][   ](warn_slowpath_fmt)、来自[ ](DEV_WATCHDOT+0x258/0x25c)

[22.241052]   r3:ee05e000 r2:c0c0fda0

[22.244639]   R4:00000000

[22.247185][   ](DEV_Watchdog)从[ ](call_timer_fn.constprop.2+0x30/0xa0)

[22.255920]   R10:40000001 R9:ee05e000 R8:c07db498 r7:00000000 R6:c07db498 R5:00000100

[22.263779]   R4:ffe000

[22.266323]  [ ](call_timer_fn.constprop.2)、来自[ ](EXPIRE_TIMER+0xa0/0xac)

[22.275143]   R6:00000200 R5:ee8a5e78 R4:eed38480

[22.279779][   ](EXPIRE_TIMERS)从[ ](run_timer_softirq+0xa0/0x18c)

[22.287992]   R9:00000001 R8:c1002080 r7:eed38480 R6:c1002d00 R5:ee8a5e74 R4:00000001

[22.295769][   ](run_timer_softirq)、来自[ ](__do_softirq+0xf8/0x234)

[22.303892]   r7:00000100 R6:ee8a4000 R5:c1002084 R4:00000022

[22.309576]  [ ](__do_softirq)、从[ ](run_ksoftirqd+0x40/0x4c)

[22.317265]   R10:00000000 R9:00000000 R8:ffe000 r7:c1013ff0 R6:00000001 R5:ee861540

[22.325123]   R4:ee8a4000

[22.327669][   ](run_ksoftirqd)、来自[ ](smpboot_thread_fn+0x154/0x268)

[22.335970][   ](smpboot_thread_fn)、来自[ ](kthread+0x100/0x118)

[22.343746]   R10:00000000 R9:00000000 R8:c024eb20 r7:ee861540 R6:ee8a4000 R5:ee861580

[22.351606]   R4:00000000 R3:ee898c80

[22.355197]  [ ](kthread)、来自[ ](RET_FANK_F叉+0x14/0x2C)

[22.362448]   R8:00000000 r7:00000000 R6:00000000 R5:c024acb0 R4:ee861580

[22.369202]  -->末尾线迹175f3c4f1129894a ]-->

您是否遇到过此问题?

我的硬件是定制板、am5728芯片版本是 ES2.0

我的软件是 Processor SDK 4.2版本。

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

    大家好:

    我们还参考以下文档

    processors.wiki.ti.com/.../Linux_Core_CPSW_User's_Guide

    我的定制板是双独立 EMAC 模式、它们 的 CPDMA 和 skb 缓冲器对于两个 eth 接口是通用的

    因此我们怀疑它是否会产生效果

    谢谢  

    此致

     

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


    您能否告诉您的应用程序尝试使用的网络拓扑? 两个端口是否桥接? 这两个端口是否位于独立的子网上? 您是否正在使用 iperf 或正在使用自定义应用程序发送接收流量?

    对于 Linux 内核、请发布 uname -a 的结果? 我想知道您使用的内核。 您是否正在使用自定义内核配置? 此问题是在定制板上还是在 TI EVM 上发生? 我正在使用定制板、但我想确定。

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

    Schuyler 您好:

    感谢您的回复;

    1我们的应用程序尝试进行流转发、因此需要高网络带宽。

    两个端口是否桥接?  

      我认为这两个端口没有桥接、因为我 的定制板是双独立 EMAC 模式。

    3  这两个端口是否位于独立的子网上?

    是的、不同的子网中有、eth0为192.168.0.200、 eth1为192.168.1.200

    4 您是否正在使用 iperf 或正在使用自定义应用程序发送接收流量?  

    我们使用自定义应用程序测试 eth0、并使用 iperf 测试 eth1。

    5 对于 Linux 内核、请发布 uname -a 的结果?

    我的软件是 Processor SDK 4.2发行版,uname -a 是:

    Linux am57xx-EVM 4.9.59-ga75d8e9305 #5 SMP 抢先于1月26日11:07:32 CST 2018 armv7l GNU/Linux 星期五

    6 我想知道您使用的内核。 您是否正在使用自定义内核配置?

    我们正在使用配置文件 arch/arm/configs/tisdk_am57xx-evm_defconfig、 该参数尚未修改

    7 此问题是在定制板还是 TI EVM 上发生的?  

    该问题发生在我的定制板上、我们不知道是否会发生 TI EVM。

    我的硬件是定制板、 am5728 芯片版本是 ES2.0。

    最近几天,我们已经做了一些测试。

    我们参考以下文档

    processors.wiki.ti.com/.../Linux_Core_CPSW_User's_Guide

    我们更改 了 ti_cpsw.descs_pool_size=4096并获得了一些新的测试结果:

    我们使用 eth0进行流转发、并使用 eth1 (TCP methord)进行 iperf 测试

    通常,当 eth0达到400Mb/s 时,eth1的 bindwidth 将减少到320Mb/s

    当 eth0达到300Mb/s 时,eth1的信宽将增加到420Mb/s

    也就是说,eth0加上 eth1的总信德宽度为720Mb/s,如果一个人的信德宽度增加,那么另一个人将减小信德宽度。

    那么、我的问题是如何将总信宽增加到900Mb/s?

    谢谢

    此致

     

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

    如何在两个端口之间转发流量? 您是否正在设置路由表? 还是您的应用?

    您是否正在运行 TI SDK rootfs? 您的最终应用是否需要 systemd 类型的用户空间?

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

    你(们)好 、Schuyler

    感谢您的回复;

    1 如何在两个端口之间转发流量?

    我们使用自定义应用程序测试 eth0、并使用 iperf 测试 eth1。

    我的自定义应用程序用于 进行流转发。

    我的自定义应用 程序接收 Web 摄像头流(8Mb/s)、然后将其复制 到大量流、最后将这些流发送到 PC。

    我们使用 iperf 测试 eth1、我的 iperf 是一个 TCP 客户端、它将向 iperf 服务器发送流。

    通常,当 eth0的发送 bindwidth 达到400Mb/s 时,eth1的 bindwidth 将减少到320Mb/s

    当 Eth0的端点宽度达到300Mb/秒时,eth1的端点宽度将增加到420Mb/秒

    也就是说,eth0加 eth1的总发送信德宽度为720Mb/s,如果一个人的信德宽度增加,那么另一个人将减小信德宽度。

    2 您是否正在设置路由表?

    否、我们不设置路由表。

    3您是否正在运行 TI SDK rootfs?  

    是的、我们使用了 TI SDK rootfs、 并且文件系统尚未修改

    4您的最终应用程序是否需要 systemd 类型的用户空间?  

    我们只需使用 systemd 来设置引导模式

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

    在 eth0上运行的自定义应用程序是否始终只是流应用程序、是否使用 TCP? 您可以尝试使用 ethtool 启用中断起搏、这允许对发送到批量处理的数据包的 ACK 响应、而不是在它们到达时。

    您知道引导到 shell 吗? 这将绕过 systemd 设置的所有服务,包括一些网络守护程序。 这可能是一个很好的实验、可以查看系统服务是否占用处理器带宽。

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

    你(们)好 、Schuyler

    感谢您的回复;

    1在 eth0上运行的自定义应用程序是否始终只是流应用程序、是否使用 TCP?

    是的、我的自定义应用程序使用 TCP 进行流式传输、它始终是 eth0上的流式应用程序;

    我们已经通过 ethtool 启用了中断起搏、但没有使用。

    2你知道要引导到 shell 吗?  

    现在、我们 在 Linux 启动后手动启动流应用程序和 iperf。

    稍后、我们将使用 systemd 来设置流应用。

    3我们对 CPSW 感到非常困惑。

    我的定制板是双独立 EMAC 模式、它们 的 CPDMA 和 skb 缓冲器对于两个 eth 接口是通用的

    因此我们怀疑它是否会产生效果。

    谢谢

    此致

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

    我们随附了一个建议的补丁、它可以解决看门狗超时问题、您会发现您可以应用到内核并重新构建看门狗超时问题。

    关于正在考虑的应用的另一个问题。 我想确保我了解您的 TCP 应用程序在 eth0上运行的是什么、这是接收还是发送? eth1正在 PC 上运行带有 iperf 服务器的 iperf 客户端。 是这样吗?

    设置中断起搏的 ethtool -C 使用了什么设置?
    能否提供您正在使用的 iperf 命令的设置?

    在测量两个应用之间的带宽时、您使用什么来检测两个以太网端口的带宽?

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

    您好!

    我忘记附加补丁:

    此致、

    Schuyler

    e2e.ti.com/.../0001_2D00_debug_2D00_net_2D00_watchdog_2D00_timeout_2D00_fix_5F00_2_5F00_2.txt

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

    你(们)好 、Schuyler

    请您回复;

    现在 eth0和 eth1的总 bindwidth 为720Mb/s、我们已经在100小时内进行了测试、稳定性 为 OK。

    我们将测试补丁、然后告诉您库尔特。

    我的自定义 TCP 应用 程序接收 Web 摄像机流(8Mb/s)、然后将其复制 到大量流(所有流都可以高达400Mb/s)、 最后将这些流发送到(Windows) PC

    我们使用 iperf 测试 eth1、我的 iperf 是向 iperf 服务器发送数据流的 TCP 客户端、iperf 服务器是 AM5728板。

    因此、我们主要测试 eth0和 eth1的发送性能。

    设置 中断起搏的 ethtool -C 如下所示:

    ethtool -C eth0 rx-usecs 500

     我们使用的 iperf 命令如下所示:

    Iperf 客户端:

    Iperf -B 192.168.0.27 -c 192.168.0.77 -i 10 -t 999999 &

    Iperf 服务器:

    Iperf -B 192.168.0.77 -s -i 1 &

     检测两个以太网端口的带宽?  

    正如您所知、iperf 可以检测 eth1的 bindwidth、因为它将实时打印 bindwidth

    我的自定义发送流至 Windows PC 和 Windows PC 可以实时打印接收 bindwidth

    谢谢

    此致

    西溪

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

    请尝试使用150或100的 Rx-usecs 值进行中断起搏。
    很抱歉、我仍然不明白您是如何使用 eth0的。 您是否在 eth0上接收到8Mbps 网络摄像头流、然后将该流复制到连接到 eth0子网的多个其他设备? 这些设备是否位于多播地址上,或者这些设备是否有多个单播地址?

    现在、两个端口上的流量已解耦。 您是否计划在将来同步它们? 另一个需要注意的问题是、当前流量负载的可用处理器带宽。 请运行此程序几秒钟并附上结果。 这将提供内核负载。

    mpstat -P 全部2.

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

    尊敬的 Schuyler

    非常感谢!

    1 对于中断起搏、请尝试使用150或100的 Rx-usecs 值

    我们已经尝试过此参数、结果与之前相同。

     有关我的定制应用的更多信息

    我的自定义使用 eth0并接收8Mb/s 网络摄像头流、然后处理该流。 最后发送到连接到 eth0子网的 Windows PC。

    现在只有一台 Windows PC 接收这些数据流。

    在功能中、这些流将发送到多  个 设备、即单播地址。

    3 目前、两个端口上的流量已解耦。 您是否计划在将来同步它们?

    不会、我们 将来不会同步它们。

    4下图是我的系统负载:

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

    尊敬的 Schuyler

    您对我有其他关于此问题的建议吗?

    谢谢

    此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    再次回顾此主题后、我认为解决方案很可能是一种应用设计、涉及如何平衡两个端口之间的流量、因为内核将不会按照我的知识进行。 这里有许多可能的限制、您必须确定的原因和影响。 其中一个原因是有多个单播目标将以各自的速率独立运行、并会影响您的应用程序性能。 这将是一个网络交互问题、超出了此主题的范围。

    在线程的前面、有人说这两个端口是去耦合的。 在这种情况下、平衡端口之间的网络负载或实现更重要的900 Mbps。

    如果我正确理解、您感兴趣的是900Mbps 总发送带宽? 如果是、可能尝试使用不同端口号将 iperf 运行为2个不同的实例、以便可以同时在 eth0和 eth1上发送。 请报告两个端口的带宽。

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

    你(们)好 、Schuyler

    我很抱歉,因为 春节假期,我很晚才回复你。

    我们对900Mbps 总发送带宽感兴趣。

    我们使用一个 iperf 来测试 eth0性能。

    结果如下所示:

     

    我的服务器命令是:

    Iperf -B 192.168.0.77 -s -i 1.

    我们还使用两个 iperf 过程来测试 eth0和 eth1。

    结果如下所示:

    我的服务器命令是:

    Iperf -B 192.168.0.77 -s -i 1 &

    Iperf -B 192.168.1.77 -s -i 1 &

    根据上述测试、eth0约为400Mb/s、eth1约为400Mb/s eth0和 eth1的总 bindwidth 为800Mb/s

    那么、我们如何将 bindwidth 提高到900Mb/s

    谢谢

    此致  

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

    您好 Schuyler:

    您能给我们其他有关 此问题的建议。

    谢谢

    此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    根据开机自检之前的单个线程测试、可能无法达到900Mbps。 在运行测试时、运行 TOP 以查看在此位速率下运行时是否有任何额外的可用处理器带宽。 iperf 的限制通常表示从带宽角度来看、处理器正在进行最大大小优化。 如果是这种情况、则探索真正需要的选项、可能会关闭这些选项、例如其他用户服务或守护程序。

    要尝试的另一个测试是在单个 shell 上下文中运行测试。 下面是一个链接、显示了如何引导至 shell。

    processors.wiki.ti.com/.../5x

    这是一种测试技术、并不意味着它是最终产品、它仅用于显示在删除任何桌面(如用户空间)时的负担会带来什么。 在这种类型的环境中,您必须设置和获取 IP 地址,因为 systemd 网络管理器将不会运行。

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

    尊敬的 Schuyler

    感谢您的回复

    根据以下网站、以太网 eth0 TCP 性能可达到 1108.8 Mb/s、但为什么我的主板无法达到此比特率

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

    此页面用于说明测试的执行方式、但测试是在双模式下使用 iperf 同时发送和接收的。 EVM 上的以太网设置为在全双工模式下运行。 该表是发送和接收的总和。 测试仅使用单个发送线程和单个接收线程完成、二者相结合可实现1109bps 的总和。

    您的实验仅在我正确的情况下执行 SEND、如果您将-d 添加到 iperf 命令行、您可能会看到这些数字。 但是、由于您使用两个端口、数字可能会稍小一些。

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

    你(们)好 、Schuyler

    好的、 我们已经知道了

     谢谢

    此致