2 个 Linux 主机之间的延迟约为 0.23 毫秒。它们通过一个交换机连接。Ping 和 Wireshark 确认了延迟数。但是,我不知道是什么导致了这种延迟。我怎么知道延迟是由于主机 A 或 B 上的 NIC 还是交换机或电缆造成的?
更新:.23 毫秒的延迟对我现有的应用程序来说很糟糕,因为它以非常高的频率发送消息,我正在尝试看看是否可以将其降低到 .1 毫秒
答案1
一般来说,你可以使用一些高级开关来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