如何解決 2 個 linux 主機之間的延遲問題
2 台 linux 主機之間的延遲約為 0.23 毫秒。它們由一個開關連接。Ping & Wireshark 確認延遲數。但是,我對導致這種延遲的原因一無所知。我如何知道延遲是由於主機 A 或 B 上的 NIC 還是交換機或電纜造成的?
更新:0.23 毫秒的延遲對我現有的應用程序來說是不利的,它以非常高的頻率發送消息,我試圖看看它是否可以降低到 0.1 毫秒
通常,您可以使用iperf 實用程序的一些高級開關來查看系統之間的網路性能,特別是延遲和抖動……
這是基於 UDP 還是基於 TCP 的消息流?
我在上面評論過需要有關您的設置的更多資訊。如果這是一個低延遲消息傳遞應用程序,那麼整個世界的調整和優化技術涵蓋硬體、驅動程序和作業系統調整。但實際上,我們需要更多資訊。
編輯:
好的,這就是 TCP 消息傳遞。你有沒有修改任何
/etc/sysctl.conf
參數?您的發送/接收緩衝區是什麼樣的?單獨使用實時核心不會有太大作用,但是如果您將中斷綁定到 CPU,更改消息傳遞應用程序 (chrt
) 的實時優先級並可能修改tuned-adm
系統配置文件可能會有所幫助…這聽起來像是一個通用的 EL6 系統,因此設置性能調整基線的一種簡單方法是將系統的性能配置文件更改為調整框架內可用的另一個性能配置文件。然後從那裡建構。
在你的情況下:
yum install tuned tuned-utils tuned-adm profile latency-performance
顯示差異的快速矩陣:
能介紹一下硬體嗎?CPU、網卡、記憶體的類型?
所以,測試你的連結可能會很有趣……試試這個 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