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


16

2个Linux主机之间的延迟约为0.23毫秒。它们通过一个开关连接。Ping&Wireshark确认等待时间数。但是,我对导致此延迟的原因没有任何了解。我如何知道延迟是否是由于主机A或B上的NIC或交换机或电缆引起的?

更新:0.23毫秒的延迟对我现有的应用程序不利,该应用程序以很高的频率发送消息,我正在尝试查看是否可以将其降低到0.1毫秒。


2
您为什么认为0.23毫秒延迟不好?那真是太棒了。
SpacemanSpiff 2012年

6
用交叉电缆直接连接它们。如果您具有相同的延迟,则原因是主机之一。如果您没有相同的延迟,则原因是交换机或电缆。
joeqwerty 2012年

1
同意,怎么了?0.23ms的延迟比两台并排放置的机器要少。
迈克尔·汉普顿

@joeqwerty如果两个系统通过交叉电缆连接,它们如何相互定位?ARP仍然有效吗?TCP仍然有效吗?
吉姆(Jimm)2012年

1
它们的工作原理就像它们都连接到同一交换机一样。电缆仅仅是它们进行通信的物理介质。OSI模型的所有7层(如果需要,也可以使用DARPA模型的4层)可以像现在一样正常工作。
joeqwerty,2012年

Answers:


15

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

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

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

编辑:

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

这听起来像是一个通用的EL6系统,所以设置性能调整基准的一种简便方法是将系统的性能配置文件更改为已调整框架中的另一个性能配置文件。然后从那里开始。

在您的情况下:

yum install tuned tuned-utils
tuned-adm profile latency-performance

显示差异的快速矩阵:

您能告诉我们有关硬件的信息吗?CPU,NIC,内存的类型?

因此,测试您的链接可能很有趣...试试这个iperf测试...

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

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

# Server1
[root@server1 ~]# iperf -t 60 -u -c server2

就我而言,低抖动和低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

我会检查硬件和接口是否有错误。如果需要,请消除系统之间的切换,然后查看直接连接的外观。您不需要高抖动(方差),因此请检查一下。

但老实说,即使您在使用当前设置进行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

它是对延迟敏感的消息传递应用程序。典型的操作系统为kernel-2.6.32-279.11.1.el6.x86_64,尽管我将内核3.2.23-rt37.56.el6rt.x86_64加载到主机中,以查看是否会有任何不同。但这几乎是相同的。消息大小在1KB至3KB之间。所有通信均通过TCP进行。
吉姆(Jimm)2012年

是OS Red Hat MRG吗?
ewwhite 2012年

现在,它可以使用普通的Redhat 6.3,但是也可能使用MRG。正如我上面提到的,我都尝试过,但是延迟是相同的。我应该关注哪种可调参数?
吉姆(Jimm)2012年

我想知道硬件和NIC设置。切换模型有帮助。对于可调参数,在6.3上最明显的区域是您的tuned-adm配置文件。
ewwhite 2012年

双以太网控制器:Emulex Corporation OneConnect 10Gb NIC(rev 02)和16个核心AMD系列10h处理器,每个2400 MHz。
吉姆
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.