我有一个从 Windows 移植到 Linux 的应用程序。现在相同的代码在 VS C++ 和 g++ 上编译,但是在 Win 上运行和在 Linux 上运行时在性能上存在差异。此应用程序的范围是缓存。它是服务器和客户端之间的一个节点,它在一个列表中缓存客户端请求和服务器响应,这样任何其他客户端发出的请求已经被服务器处理过,这个节点将响应而不是将其转发到服务器。
当此节点在 Windows 上运行时,客户端会在大约 7 秒内获得所需的一切。但是当同一节点在 Linux (Ubuntu 9.04) 上运行时,客户端会在 35 秒内启动。每个测试都是从头开始的。我试图理解为什么会出现这种时间差异。一个奇怪的场景是当节点在 Linux 上运行但在由 Win 托管的虚拟机中时。在这种情况下,加载时间约为 7 秒,就像在 native 运行 Win 一样。所以,我的印象是网络存在问题。
该节点使用 UDP 协议(protocol)发送和接收网络数据,并使用 boost::asio 作为实现。我尝试更改所有受支持的套接字标志,更改缓冲区大小,但没有任何效果。
有人知道为什么会发生这种情况,或者任何与 UDP 相关的网络设置可能会影响性能吗?
谢谢。
最佳答案
如果您怀疑存在网络问题,请进行网络捕获(Wireshark 非常适合此类问题)并查看流量。
根据网络捕获或分析器的输出找出时间花在了哪里。 一旦您知道您已经完成了解决方案的一半。
关于Linux 与 Win 运行时计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1565918/