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.

[参考译文] CCS/CC3120BOOST:quot 上的性能缓慢;接受-recv"

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/885876/ccs-cc3120boost-slow-performance-on-accept--recv

器件型号:CC3120BOOST

工具/软件:Code Composer Studio

您好!

我已将 Simple Link 驱动程序移植到 AM335x 系列、并使其按预期工作。

创建自己的服务器时、我看到性能非常慢。  具体而言、第一次读取需要大约250ms、以便在接受连接后获得大约500字节的数据。

服务器正在使用针对 sl_Create、sl_Bind、sl_Listen、sl_Accept 和 sl_Read 的定期阻塞调用。  基本代码设计为:

char * ptr = buffer;
执行{
recv (m_socket、ptr、1...) /*一次一个字节*/
如果(* ptr ==定界符)中断;
PTR++;
} while ((ptr - buffer)< MAX_buffer);
//对块进行摘要以确定有效载荷,然后... */
recv (m_socket、有效载荷、PAYLOAD_SIZE、... );

启动服务器并返回 Accept (接受)呼叫后,大约250ms 后,完全读取完成。

(竞争对手的设备使用中断来发出何时执行"recv"的信号,并且可以在1/10的时间内读取相同的数据块。)

该器件似乎通过 SPI 发送请求、块发送到器件、直至收到中断、然后读取请求的数据量。  这是正确的评估吗?  有哪些改进性能的推荐方法?

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

    尊敬的 Chris:

    使 sl_Recv ()发送 SPI 请求、在套接字处于非阻塞状态时阻止等待中断、然后再发送另一个 SPI 请求以读回接收到的数据的一般过程是正确的。

    在我们支持的 RTOS 平台上、例如 TIRTOS 和 FreeRTOS、这些 SPI 事务处理速度很快、不会妨碍程序的运行、但在 AM335x 上、SPI 驱动程序执行传输所需的时间可能会更长。

    为了澄清这一点,250ms 包括从 sl_Accept()返回到被读取的前500字节数据包所需的时间吗? 或者、代码到达该接收循环后所需的时间是多少?那么、从第一次接收开始到所有500个字节都被读取所需的时间是多少?

    此致、

    Michael

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

    Michael、

    具体而言、代码(与 NDK 和以太网接口配合使用)是一次对一个字节进行"recv"、以查找定界符。 这种方法很好、因为数据包缓冲区在内存中、并且 DMA 被访问。

    在这种情况下、单个字节的请求将生成往返 :SPI - INT - SPI。  我已经确认,这是拖延的原因。

    以每秒1/3的速度读取几百个字节。

    找到分隔符后、将解析数据包。  则可以请求有效载荷的大小。  通过单个 SPI 请求读取几个字节到数千个字节的有效载荷。  第二次读取实际上比单字节读取的累积集合更快。

    解决方法是移动更大的请求并在内部断开数据、将定界符位于(这是不可预测的)之后的部分移动到有效载荷缓冲器。

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

    尊敬的 Chris:

    感谢您报告延迟的原因。 实际上、一个字节接收的往返时间可能需要大量时间。

    如果您遇到任何其他延迟问题或使用主机驱动程序时有其他问题、请告诉我。

    此致、
    Michael

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

    Michael、

    谢谢。 本主题已按照理解结束。  我现在正在开发使用旁路模式并将数据包直接注入我们在目标器件中运行的 TI NDK。  几年前、我已经使用 USB/RNDIS 完成了这项工作、应该是直接的。

    现在我又在努力解决文档不足的问题,这场斗争就是使用802.1X 和基数服务器连接到企业管理的 WiFi 网络。  这些帖子位于论坛的另一个主题中。