我有一个基于ARM处理器的带有QNX的硬件,我需要在两个应用程序http_client和http_server之间传输http数据,这两个应用程序都是基于POCO C++库的。我已经创建了简单的客户端和服务器程序来流文件的内容。硬件上的http吞吐量为1.8 Gbps,而iperf的tcp吞吐量为27 Gbps。(请注意,已扣除文件读取时间以得出http吞吐量号)
我在笔记本电脑上尝试了同样的Linux程序,我也看到了http和tcp在吞吐量上的差异。
有人能建议如何通过Poco配置、编译时标志、API使用或设置来帮助我获得更接近iperf tcp吞吐量的更高吞吐量。
我的设置的其他细节:
我正在使用POCO共享版本1.10.1,它是用O2优化编译的,并使用了在poco-> Net ->示例下提供的HTTPFormServer模板。
我已经将TCPNODELAY设置为false,这有助于我在笔记本电脑上提高Linux的性能,而不是在QNX上。我想知道为什么它在硬件上没有帮助。这上面有指点吗?
发布于 2022-06-24 23:00:42
iperf是一种纯的批量传输操作。就像netperf TCP_STREAM。虽然在应用层对您来说可能是“流”,但是这个POCO软件在“流”数据时正在执行连续的请求/响应对。
理论上,您可以在数据包捕获中看到这一点。当您查看iperf测试的数据包捕获时,您将看到从发送方到接收方的大量TCP数据段,以及从接收方到发送方的TCP ACKnowledgements。如果HTTP“流”中存在一些请求/响应,您将看到至少一些数据段(HTTP请求)从接收方返回到发送方。取决于这个软件一次会有多少个请求,您可能会看到与iperf非常不同的性能。
https://stackoverflow.com/questions/72629213
复制相似问题