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/TDA2EVM5777:TI NDK 的 TX 吞吐量问题

Guru**** 2551110 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/605983/rtos-tda2evm5777-tx-throughput-issue-with-ti-ndk

器件型号:TDA2EVM5777

工具/软件:TI-RTOS

大家好、

我正在使用 TI NDK 在 TDA2xx 器件上运行带 TCP/IP 的网络传输

我看到我的吞吐量没有超过16Mbps、即使我的 CPU 负载仅为7%(Cortex A15以1GHz 运行)。

下面是我的 NDK 配置:

NdkConfigGlobal. lowTaskStackSize = 8192;
NdkConfigGlobal.normTaskStackSize = 8192;
NdkConfigGlobal. highTaskStackSize = 8192;
NdkConfigGlobal. ndkThreadStackSize = 8192;
NdkConfigGlobal. pktSizeFrameBuf = 1536;
NdkConfigGlobal. pktNumFrameBufs=192*8;
NdkConfigGlobal. memRawPageCount = 16*8;
tcp.transmitBufSize = 256*1024;
tcp.receiveBufSize = 256*1024;
tcp.receiveBufLimit=256*1024;

此外、我不会通过 setsockopt 为 recv 和发送窗口大小设置任何选项。

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

    您的测试案例是什么? 您是否在隔离网络上运行它以排除其他流量?

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

    我使用的是 NDK_2_24_02_31。

    我的用例是捕获1280x720 @30fps ->通过 TCP/IP 发送到 PC。 我看到传输不是实时发生的、会发生很多帧丢失。
    我尝试在没有运行任何其他函数的情况下运行用例。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Prasad、您好!

    PC 端的 TCP RX 缓冲器有多大?

    限制可能来自这一侧。 很抱歉、我还没有机会查看 W/S 捕获。

    send()调用的外观是什么? 您在每次调用中传递了多少数据 send()?

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

    您好 Steve、

    用于 PC 和 EVM 插座配置和 EVM 发送功能的 PFA 代码片段。 我正在发送呼叫中发送一个完整帧(1.8MB)。

    还连接了 Wireshark 转储

    /cfs-file/__key/communityserver-discussions-components-files/791/6663.network_5F00_freeze_5F00_issue_5F00_wiredump.pcapng.gz

    /cfs-file/__key/communityserver-discussions-components-files/791/1462.network_5F00_throughput_5F00_issue_5F00_code_5F00_snippets.txt

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

    快速问题-捕获中的 IP 地址是哪个?

    谢谢、

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

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

    Prasad、

    数据包似乎在以某种方式丢失。

     

    NDK 很明显地认为它已被发送,因为 TCP 序列号增加(在 NDK -> PC TX 数据包中),反映了发送到 PC 的字节数。

     

    但 PC 停止应答新数据,卡在旧的丢失数据包上。 NDK 最终达到重发送计时器过期并重新传输(在屏幕快照正下方的数据包中可见)。

     

    一旦重新发送发生、性能就会下降。

     

    该循环在整个捕获文件中重复。

     我们需要弄清楚丢包的原因。

    Steve

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

    是否可以尝试启用选择性确认(SACK)?

    它通过套接字选项 IPPROTO_TCP + tcp_SACKPERMITTED 进行设置。  请注意、首次创建套接字时需要执行此操作。

    非常确定这正是此处所示的情况(第一个图)。 背包应帮助解决以下问题:

    packetlife.net/.../

    Steve