web-dev-qa-db-ja.com

2つのLinuxホスト間のレイテンシをトラブルシューティングする方法

2つのLinuxホスト間の遅延は約.23msです。それらは1つのスイッチで接続されます。 PingとWiresharkがレイテンシ数を確認します。しかし、私はこの遅延の原因を特定することができません。待ち時間がホストAまたはB、スイッチまたはケーブルのNIC=によるものかどうかをどのようにして知ることができますか?

更新:非常に高い頻度でメッセージを送信する既存のアプリケーションでは、.23ミリ秒のレイテンシは悪く、0.1ミリ秒に下げることができるかどうかを確認しようとしています。

15
Jimm

一般に、 iperfユーティリティ への高度なスイッチのいくつかを使用して、システム間のネットワークパフォーマンス、特に遅延とジッターのビューを取得できます...

これはUDPまたはTCPベースのメッセージストリームですか?

私はあなたのセットアップについてより多くの情報が必要であることについて上記でコメントしました。これが低レイテンシメッセージングアプリケーションである場合、ハードウェア、ドライバー、OSの微調整にまたがる チューニングおよび最適化手法 の世界が広がっています。しかし、本当に、もっと情報が必要です。

編集:

さて、これはTCPメッセージです。/etc/sysctl.confパラメータを変更しましたか?送信/受信バッファはどのように見えますか?リアルタイムカーネルだけを使用してもあまり効果はありませんが、割り込みをCPUにバインドするポイントに移動した場合、メッセージングアプリ(chrt)のリアルタイムの優先度を変更し、システムのtuned-admプロファイルを変更すると役立つ場合があります...

これは一般的なEL6システムのように聞こえるので、パフォーマンス調整ベースラインを設定する簡単な方法は、システムのパフォーマンスプロファイルを tuned framework 内で使用可能な別のプロファイルに変更することです。次に、そこからビルドします。

あなたの場合:

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

違いを示す簡単なマトリックス:

ハードウェアについて教えてください。 CPU、NIC、メモリの種類は?

リンクをテストするのは興味深いかもしれません...このiperfテストを試してください...

1つのシステムで、iperf UDPリスナーを起動します。もう1つは、最初の接続を開きます...簡単な回線品質テスト。

# 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
15
ewwhite