2个Linux主机之间的延迟约为0.23毫秒。它们通过一个开关连接。Ping&Wireshark确认等待时间数。但是,我对导致此延迟的原因没有任何了解。我如何知道延迟是否是由于主机A或B上的NIC或交换机或电缆引起的?
更新:0.23毫秒的延迟对我现有的应用程序不利,该应用程序以很高的频率发送消息,我正在尝试查看是否可以将其降低到0.1毫秒。
2个Linux主机之间的延迟约为0.23毫秒。它们通过一个开关连接。Ping&Wireshark确认等待时间数。但是,我对导致此延迟的原因没有任何了解。我如何知道延迟是否是由于主机A或B上的NIC或交换机或电缆引起的?
更新:0.23毫秒的延迟对我现有的应用程序不利,该应用程序以很高的频率发送消息,我正在尝试查看是否可以将其降低到0.1毫秒。
Answers:
通常,您可以使用一些高级开关来访问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_max
,net.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
tuned-adm
配置文件。