如何解决 2 台 Linux 主机之间的延迟问题

Jim*_*imm 15 networking performance latency linux-networking

2 台 linux 主机之间的延迟约为 0.23 毫秒。它们由一个交换机连接。Ping 和 Wireshark 确认延迟数。但是,我对导致这种延迟的原因一无所知。我如何知道延迟是由于主机 A 或 B 上的 NIC 还是交换机或电缆造成的?

更新:0.23 毫秒的延迟对我现有的应用程序不利,它以非常高的频率发送消息,我想看看它是否可以降低到 0.1 毫秒

eww*_*ite 15

通常,您可以使用iperf 实用程序的一些高级开关来查看系统之间的网络性能,特别是延迟和抖动...

这是基于 UDP 或 TCP 的消息流吗?

我在上面评论说需要更多关于您的设置的信息。如果这是一个低延迟的消息传递应用程序,那么整个世界都有很多跨越硬件、驱动程序和操作系统调整的调整和优化技术。但实际上,我们需要更多信息。

编辑:

好的,这就是 TCP 消息传递。有没有修改/etc/sysctl.conf参数?你的发送/接收缓冲区是什么样的?单独使用实时内核不会有太大作用,但是如果您将中断绑定到 CPU,更改消息传递应用程序 ( chrt)的实时优先级并可能修改tuned-adm系统配置文件可能会有所帮助...

这听起来像是一个通用的 EL6 系统,因此设置性能调优基线的一种简单方法是将系统的性能配置文件更改为调优框架内可用的另一个配置文件。然后从那里构建。

在你的情况下:

yum install tuned tuned-utils
tuned-adm profile latency-performance
Run Code Online (Sandbox Code Playgroud)

显示差异的快速矩阵:

你能告诉我们有关硬件的信息吗?CPU、网卡、内存的类型?

所以,测试你的链接可能很有趣……试试这个 iperf 测试……

在一个系统上,启动一个 iperf UDP 侦听器。另一方面,打开与第一个的连接...快速线路质量测试。

# Server2
[root@server2 ~]# iperf -su   

# Server1
[root@server1 ~]# iperf -t 60 -u -c server2
Run Code Online (Sandbox Code Playgroud)

就我而言,低抖动和低 ping 时间:

------------------------------------------------------------
Server listening on UDP port 5001
Receiving 1470 byte datagrams
UDP buffer size:  224 KByte (default)
------------------------------------------------------------
[  3] local 192.168.15.3 port 5001 connected with 172.16.2.152 port 36312
[ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams
[  3]  0.0-20.0 sec  2.50 MBytes  1.05 Mbits/sec   0.012 ms    0/ 1785 (0%)

PING server1 (172.16.2.152) 56(84) bytes of data.
64 bytes from server1 (172.16.2.152): icmp_seq=1 ttl=63 time=0.158 ms
64 bytes from server1 (172.16.2.152): icmp_seq=2 ttl=63 time=0.144 ms
Run Code Online (Sandbox Code Playgroud)

我会检查硬件和接口是否有错误。如果需要,可以取消系统之间的切换,看看直接连接是什么样的。你不想要高抖动(方差),所以检查一下。

但老实说,即使您在当前设置中获得 ping 时间,这也不足以杀死您的应用程序。我会沿着调整发送/接收缓冲区的道路走下去。请参阅:net.core.rmem_maxnet.core.wmem_max以及它们的默认值...

类似于以下内容/etc/sysctl.conf(请调整口味):

net.core.rmem_default = 10000000
net.core.wmem_default = 10000000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
Run Code Online (Sandbox Code Playgroud)