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/AM3352:TCP 数据丢失问题

Guru**** 2609945 points
Other Parts Discussed in Thread: AM3352

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/651405/linux-am3352-tcp-data-loss-issue

器件型号:AM3352

工具/软件:Linux

尊敬的专家:

通过 AM3352上的以太网端口传输数据时出现封装丢失问题:

基本方框图为吹扫:

描述:

PC1充当客户端、PC2充当服务器、 AM3352重新配置为桥接模式、分别在2台 PC 上使用"iperf -s "和"iperf -c "传输数据并使用  Wireshark 监视数据包、  并在传输过程中观察到大量数据丢失。  

测试条件:

TI-processor-SDK-Linux-AM335x-EVM-03.02.00.05  

2. AM3352重新配置为桥接模式

3. CPSW 内核配置

AM335x-EVM.dts   

5. am33xx.dtsi 配置:

您能给我一些关于如何消除数据丢失问题的指导吗、非常感谢。

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

    感谢您发布有关配置和拓扑的信息。 不过、我需要一些其他信息。 首先、我需要您提供此链接中要求的信息。

    processors.wiki.ti.com/.../5x_CPSW

    在上面的链接中询问了这个问题、但是电路板是使用定制板还是 TI EVM? 您有 TI AM335x EVM-SK 电路板吗?

    由于您正在经历数据丢失和使用 Wireshark、您还能发布线路捕获吗? 在进行 iperf 测试时、捕获的大小仅需20-30秒的行数据。

    此外,请提供用于设置网桥以及客户端和服务器 iperf 命令的确切命令行。

    请注意、我将在2018年1月的第一周之前离开办公室、然后我将对发布的以下数据做出回复。

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

    Schuyler、您好、

    非常感谢 您的回答。 快乐的假期和快乐的新年!

    下面是对我的问题:的附加说明

    1.内核版本和源代码。

    root@AM335x-EVM:~# uname -a

    Linux AM335x-EVM 4.4.4.20-M脏#29抢先于2015年12月14日15:56:51 CST 2017 armv7l GNU/Linux

    2.文件系统、TI SDK 或基于 Arago/Yocto 的文件系统

    基于 TI SDK 的文件系统: TI-processor-SDK-Linux-AM335x-EVM-03.02.00.05

    3.定制板还是 TI 板? 请包含器件树源文件。

    我们使用客户电路板、并随附 am33xx.dtsi+am335x-evm.dts 文件。

    4.网络视图:在 Linux PC 上使用 Wireshark 捕获数据包。

    请查找随附的捕获数据。  

    5. Linux 引导日志

    作为 控制台 log.txt 附加

    对于以下问题、我在随附的 question.doc 文件中进行了总结。

    6. ifconfig eth0

    7.在系统引导后查看基本链路元素,以确保有一个链路伙伴以及以太网 PHY 是否报告链路检测。

    8.包含 U-Boot 和内核的引导过程的控制台日志。

    9. ethtool -S

    10. ethtool

    e2e.ti.com/.../question-summary.7z

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

    感谢您发布鉴别分类汇总。 在查找丢包时、首先要查看未在 Rx CRC、对齐上显示任何错误的端口统计数据。 存在一些 Rx DMA 溢出、但这是由于 Rx 描述符耗尽所致。 由于您使用 TCP 运行 iperf、因此可靠的协议不会丢失任何数据包。 查看 Wireshark 捕获、可以看到正在发生一些 TCP 重复 ACK、但这些 ACK 可能与 PC 中尝试实施 TCP 分段卸载的 NIC 卡有关。 AM335x 设置为仅处理大小为1514字节的数据包。 由于我没有在任何 RX 帧中间溢出中看到、因此 PCS 没有发送任何巨型帧。

    总体而言、接口的性能与预期的一样。 Iperf 显示的速率接近150Mbps、因为您使用的是网桥、一个端口的接收速率为150Mbps、另一个端口的发送速率为150Mbps。 这两个端口的组合速率约为300Mbps 的网络带宽、接近于基准测试页面中此处所述的吞吐量。 我假设 iperf 上的默认窗口大小为64K、wiki 页面显示在测试期间测量了大约330Mbps。

    processors.wiki.ti.com/.../Processor_SDK_Linux_Kernel_Performance_Guide

    您是否还在查看其他内容、或者我可能会忽略这些内容、这表示数据包丢失?

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

    Schuyler、您好、

    非常感谢您 的回答。我请肯特发布此问题。

    我发现降低  iperf 的 TCP 窗口大小可以减少数据丢失。

    Wireshark 图显示为 Blow

    我想增加 skbuffer .am33xx.dtsi 配置的大小:

    davinci_cpdma.c (linux\drivers\net\ethernet/ti\davinci_cpdma.c)保留错误的函数 desc = cpdma_desc_alloc (ctlr->pool、1、is_rx_chan (chan))。

    如何使用 TCP 分段卸载?

    您能  给我一些关于如何更改驱动程序以消除 TCP 重新传输问题的指导吗、非常感谢。

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

    我之前的错误是、我应该指定我的 TSO 卸载问题是有关主机 PC 配置的问题、而不是 TI 处理器的问题。 AM33x 没有任何数据包加速或卸载功能、这正是发布的 ethtool 结果所显示的。

    如果值不等于0、那么您询问的关于 DTSI 文件中 Rx 描述符数量的问题将在这里应用于数据包丢弃方面。 这些值来自 ethtool -S 的结果、是在先前发布的 Wireshark 捕获之后从问题文档中获取的。

    帧溢出的 RX 起始:0
    RX DMA 超限:0

    因此、MAC/交换机没有显示任何丢包。 如果 AM3352上发生数据丢失、则网络堆栈中的数据丢失可能会进一步增加。
    请从 AM3352的控制台上发布"cat /proc/net/snmp "的结果。

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

    Schuyler、您好、

    非常感谢 您的回答。

    传输前的位置

    传输后

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

    我最初要求看到这种想法、我们在 TCP 上看到了一些东西、然后我还记得、当作为桥接器运行时、内核只转发数据包、而不是堆栈的 TCP 部分。 我正在寻找一种方法来确定 AM335x 将数据包丢弃到何处或是否丢弃。

    您能否使用此命令查看默认的 rmem 缓冲区大小?

    sysctl net.core.rmem_default

    当我在4.2 SDK 上运行它时、我会得到默认值163840。 您可以尝试使用这些命令增大缓冲区大小

    sysctl -w net.core.rmem_max=50331648
    sysctl -w net.core.rmem_default=50331648
    sysctl -w net.ipv1.route.flush=1

    这些缓冲区大小可能大于所需大小、但这可能会提供网络堆栈是否丢弃数据包的线索。

    您是否曾尝试直接连接两台 Linux Ubuntu 计算机以查看问题是否与 AM335x 无关?

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

    Schuyler、您好、

    非常感谢 您的回答。

    按照说明进行吹气测试:

    结果为吹气:

    您能给我一些关于如何消除数据丢失问题的指导吗、非常感谢。

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

    感谢您调整缓冲区大小并重新测试。 我想问您尝试在两台 PC 之间直接连接并重新运行测试、我想消除这两台 PC 不会带来问题。

    此致、
    Schuyler