在我的研究小组中,我们最近将我们机器上的操作系统从 Red Hat 6.2 升级到 Debian 8.3,并观察到我们机器之间通过集成 Intel 1G NIC 的 TCP 往返时间从大约 110µs 增加到 220µs。
起初,我以为是配置问题,所以我将所有tcp_low_latency=1未升级的Red Hat机器的sysctl配置(例如)复制到Debian机器上,但并没有解决问题。接下来,我认为这可能是 Linux 发行版的问题,并在机器上安装了 Red Hat 7.2,但往返时间仍然在 220µs 左右。
最后,我认为问题可能出在 Linux 内核版本上,因为 Debian 8.3 和 Red Hat 7.2 都使用了内核 3.x,而 Red Hat 6.2 使用了内核 2.6。所以为了测试这一点,我安装了带有 Linux 内核 2.6 和宾果游戏的 Debian 6.0!时间再次加快,为 110µs。
其他人在最新版本的 Linux 中是否也遇到过这些更高的延迟,是否有已知的解决方法?
下面是一个 C++ 应用程序,可用于对延迟进行基准测试。它通过发送消息、等待响应,然后发送下一条消息来测量延迟。它使用 100 字节的消息执行 100,000 次此操作。因此,我们可以将客户端的执行时间除以 100,000 以获得往返延迟。要使用它首先编译程序:
g++ -o socketpingpong -O3 -std=c++0x Server.cpp
Run Code Online (Sandbox Code Playgroud)
接下来在主机(比如 192.168.0.101)上运行应用程序的服务器端版本。我们指定 IP 以确保我们托管在众所周知的接口上。
socketpingpong 192.168.0.101
Run Code Online (Sandbox Code Playgroud)
然后使用 Unix 实用程序time来测量客户端的执行时间。 …