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.

[参考译文] RTOS/TDA2SX:如何在 SYSBIOS 上将 MTU 大小设置为低于1500?

Guru**** 2931100 points

Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/663250/rtos-tda2sx-how-to-set-mtu-size-below-1500-on-sysbios

器件型号:TDA2Sx
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

大家好、

我们希望将网络数据包的 MTU 大小设置为小于1500。

目前 、除其他数据包外、我们还有 Jambo 数据包(7K、32K)、如果它们失败、则尝试使用1500 (非 Jambo) MTU 重新传输。

如何禁用 jambo 数据包并将 MTU 大小设置为小于1500?

我们正在 TDA2x 上处理 VisionSDK 2.12.01.00、SYSBIOS。

提前感谢、

Milena

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

    在默认配置中、VSDK 中禁用了大型数据包。 您是否明确启用了它们?
    您能否就您的应用和故障场景发表更多评论? 我不确定降低 MTU 是否有助于避免帧重新传输。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Prasad、

    我们尚未明确启用大型数据包。

    我们正在流式传输视频数据、并将一些命令(小数据包)从 A 点传输到 B 点。当 A 点和 B 点通过 LAN 电缆直接连接时、一切都正常。 但在最终情况下、其他网络拓扑位于这两个点之间(也是来自 TDA2x 的 LAN 电缆)。 只有 MTU 1400和更小的 MTU 才能通过此网络。

    因此、重传不是主要问题。

    我们的优先事项是使用较小的 MTU、而避免重新传输最好具有功能、但不需要。

    谢谢、

    Milena

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

    如果我理解正确、问题是网络拓扑在 A 到 B 之间、而不是 TDA 应用、对吧?

    您可以使用下面的 NDK 在 VSDK BIOS 中更改以太网的 MTU 大小
    更改文件 ti_component-networking/nsp_x_xx_xx/packages/ti\nsp\drv\nk2nsp

    //#define ETH_FRAME_SIZE (ETH_MAX_PAYLOAD + VLAN_TAG_SIZE)
    #define ETH_FRAME_SIZE 1400 U
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Prasad、您好!

    更改 MTU 大小即可。 大多数数据包现在都低于 MTU。

    我想知道 TDA2x 中仍然存在哪些类型的数据包、因为我们尚未启用大型数据包。

    附件是以 pcap-ng 格式保存的捕获。 您可以通过 Wireshark 打开它。

    使用旧 MTU 保存捕获。

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

    + filee2e.ti.com/.../tx_5F00_side_5F00_tunnel_5F00_entry.zip

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

    这些不是大型数据包。 大多数现代 PC NIC 都具有处理 NIC 中第3层的 TCP/UDP 卸载引擎。 Wireshark 会将其视为单个数据包。
    大多数情况下、数据包仅为1500字节。

    en.wikipedia.org/.../TCP_offload_engine

    您可以禁用此功能、然后重试以查看数据包大小。 检查如何在 NIC 中禁用 TSO/LSO。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Prasad。

    另 一个问题:

    我们要设置 TCP 窗口、但在该名称下没有找到任何 TDA2x 的内容。

    当我们使用 TCP 通过网络隧道以更大的延迟发送视频流时、在 Rx 端、我们有时会有斩波视频(视频变为实时、视频延迟开始增加、然后视频冻结几帧、然后继续实时)。

    当我们通过网络通道将视频从一个 TDA2x 流式传输到另一个 TDA2x 时、会发生这种情况。

    当我们通过同一通道从一台 Linux PC 流式传输到另一台 PC 时、这种情况不会发生。  

    我们的同事建议 这可能是 TCP 的振荡行为、也可能可以通过增加 TCP 窗口来解决。

    此致、

    Milena

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

    米莱纳

    您可以在 vision_sdk\links_fw\src\rtos\BIOS_app_common\tda2xx\cfg\NDK_config.cfg 中更改不同的缓冲区大小和窗口大小。

    请查看以下内容以更改尺寸。  

    tcp.transmitBufSize =64*1024;
    tcp.receiveBufSize =64*1024;
    tcp.receiveBufLimit=64*1024;
    udp.receiveBufSize =64*1024;

    有关更多详细信息、请查看  

    http://processors.wiki.ti.com/index.php/NDK_Static_Internal_Memory_Manager

    http://processors.wiki.ti.com/index.php/NDK_Static_Network_Buffers 

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

    Prasad、您好!

    这些缓冲区的值设置为256*1024,但网络测量结果显示它是64KB。

    TCP 实现是否支持 窗口扩展? 如果是、如何将其打开?

    此致、

    Milena

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

    米莱纳

    256x1024是 NDK 套接字的最大窗口大小。 对于单个套接字、您需要使用套接字选项设置窗口大小。

    sendbuff = 128K;
    res = setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &sendbuff, sizeof(sendbuff));

     https://stackoverflow.com/questions/14381303/increasing-tcp-window-size

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

    有两个术语:"TCP 传输缓冲区大小"和"TCP 窗口大小"、这两个术语并不意味着相同、因此我们不确定彼此是否理解。

    如果我们使用如下所示的"setsockopt"函数:

    sendbuff = 128K;
    RES = setsockopt (sockff、SOL_socket、SO_SNDBUF、sendbuff、sizeof (sendbuff));

    我们将修改与单个套接字相对应的传输缓冲区大小,默认设置为256*1024 (如果我不对,请更正我)。

    我们对启用 TCP 窗口缩放选项感兴趣。 在 TCP 报头内、有一个16位字段、称为窗口大小(位112至127)、用于存储 TCP 窗口的大小、即发送端期望接收端收到 ACK 消息的已发送字节数。 启用窗口缩放选项后、窗口大小字段在 TX 和 RX 侧均包含32位(而不是16位)。 在 TCP 报头内、保留16位字段宽度、但还有一个称为窗口比例选项(WSopt)的附加字段、用于从16位值重建初始32位值。

    参考文献: tools.ietf.org/.../rfc1323
    第2节:TCP 窗口比例选项


    我们如何在 Vision SDK 02.12.01.00中启用窗口缩放选项并设置自定义 TCP 窗口大小(全局/套接字)?

    TCP 窗口大小值是否取决于传输缓冲区大小?


    此致、

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

    您好、Milena、

    [引用用户="Milena Milosilosilet"]

    这些缓冲区的值设置为256*1024,但网络测量结果显示它是64KB。

    TCP 实现是否支持 窗口扩展? 如果是、如何将其打开?

    [/报价]

    遗憾的是、NDK 不支持窗口缩放。

    您可以尝试编辑堆栈代码以增加以下宏的值(在 ti/ndk/stack/tcp_tcp.h 中)。 此宏将窗口大小限制为64K:

    #define tcp_MAXWIN             65535  /*最大窗口大小*/

    请注意、更改上述值尚未经过测试-如果您选择执行此操作、请自行承担风险。

    Steve

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

    您好、Marko、

    NDK 是开源的、可完全重建。 如果要添加此功能,您可以自由地修改代码以实现该 RFC 的规范。

    [引用 user="Marko Gostovic"] TCP 窗口大小值是否取决于传输缓冲区大小?[/quot]

    假设 TX 缓冲区大小大于窗口大小、否

    窗口大小由 TCP 连接的接收端控制。 接收者告诉发送者窗口大小(即,它告诉发送者允许发送多少未确认的数据。)

    Steve

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

    大家好、Steven!

    Thaks 请你答复,尽管我忘记提到我在同一个环境中与米利纳·米洛舍维奇合作。

    由于现在很明显可用的 NDK 中没有提供窗口缩放、我还有另一个问题。

    我已经审议了以下位置的文档:VISION_SDK_02_12_01_00/VISION_SDK/docs/Architecture/VisionSDK_SW_Architecture_Overview.pdf、并且发现在使用 Linux 的情况下、上述 NDK 不会在 A15内核上运行。 我还发现窗口扩展是由 Linux 提供的。

    如果我们在 A15内核而不是 SYSBIOS 上使用 Linux、是否可以启用窗口扩展?

    此致、

    Marko

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

    您好、Marko、

    我实际上不知道答案、但我的同事可能会这样做。 我已经联系过他、但他似乎在周一之前就不在办公室了、所以这个问题的回答可能会延迟到那时。 感谢您的耐心等待。

    Steve

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

    Marko、您好!

    在 VSDK Linux 中、如果您使用 A15进行联网、它将使用 Linux 网络堆栈。 如果该堆栈支持缩放(很可能也支持)、则可以启用窗口缩放、

    实际上、如果使用 ethtool 进行 Linux 操作、启用(并设置许多其他选项)将非常容易。

    如果您在 Linux 中启用选项时需要任何帮助、请启动新的 e2e 线程。