Linux ネットワークパフォーマンスのベンチマーク:iperf3 と mtr 実践ガイド

Networking tutorial - IT technology blog
Networking tutorial - IT technology blog

「ネットワークが遅い」というチケットの先へ

誰しも経験があるはずです。「ネットワークが遅い」という曖昧な苦情のチケットが届き、ターミナルを前に途方に暮れる。これは非常にストレスの溜まる出発点です。LANケーブルの不良か、10Gインターフェースの飽和か、それともBGPルートの設定ミスか。解決には勘ではなく、確かなデータが必要です

私がパフォーマンスのトラブルシューティングを行う際、注目するのは3つの指標です。スループット、レイテンシ、そしてジッターです。スループットは実際にパイプを流れるデータの量、レイテンシはパケットが地点AからBへ移動するのにかかる時間、ジッターはそのレイテンシの変動幅を測定します。これらの指標をマスターすることは、管理者にとって必須のサバイバルスキルです。これらがなければ、障害対応中に目隠しをして飛行しているようなものです。

重要な指標の定義

エンジニアが帯域幅(Bandwidth)とスループットを混同しているのをよく見かけます。帯域幅を高速道路の車線数、スループットを実際に1秒間に通過する車の数と考えてください。1Gbpsのリンクで、1000Mbpsのデータ転送が見られることはまずありません。TCPのオーバーヘッドやヘッダーの影響で、「クリーンな」1Gbpsリンクの限界は通常940Mbps程度になります。

レイテンシは往復時間(RTT)のことです。高帯域幅はダウンロードには最適ですが、データベースクエリやVoIPには低レイテンシが不可欠です。500msの遅延はメールなら許容範囲かもしれませんが、SSHセッションでは水中を歩いているような感覚になるでしょう。

ジッターはその遅延のばらつきです。最初のパケットが20ms、次が150msかかる場合、ジッターは高くなります。これはリアルタイムトラフィックの最大の敵です。高いジッターは通常、ネットワークの混雑やルーターでの一時的なバッファ溢れを示唆しています。

iperf3 によるスループットの測定

iperf3 は、達成可能な最大帯域幅をテストするための標準的なツールです。クライアント・サーバーモデルを使用するため、リスナー役のサーバーとトラフィックを生成するクライアントの2台のマシンにインストールする必要があります。

サーバーのセットアップ

ターゲットとなるマシン(データセンター内のサーバーなど)で、iperf3 をサーバーモードで起動します。デフォルトではポート5201で待機します。

# iperf3 をインストール
sudo apt update && sudo apt install iperf3 -y

# サーバーを起動
iperf3 -s

ファイアウォールでポート5201の通信が許可されていることを確認してください。テストを複数のセッションで継続して実行する必要がある場合は、tmuxscreen セッション内での実行をお勧めします。

クライアントテストの実行

次に、ローカルマシンからサーバーのIPを指定して実行します。1.2.3.4 を実際のサーバーのアドレスに置き換えてください。

# 標準的な10秒間のTCPテスト
iperf3 -c 1.2.3.4

単一のTCPストリームでは、10Gbpsのような高速リンクを飽和させられないことがよくあります。これは、シングルコアのCPUボトルネックやTCPウィンドウのスケーリング制限が原因です。

プロのヒント:並列ストリーム

ハードウェアの限界まで追い込むには、常に複数のストリームを並列で実行します。これにより、数十人のユーザーが同時にネットワークを利用している実環境に近い状態を再現できます。

# 10個の並列ストリームを実行
iperf3 -c 1.2.3.4 -P 10

ジッターとパケットロスのためのUDPテスト

TCPはパケットロスを再送によって隠蔽します。接続の生の健全性を確認するには、UDPを使用します。UDPには輻輳制御が組み込まれていないため、ターゲットとなる帯域幅を指定する必要があります。

# 100MbpsのUDPトラフィックでテスト
iperf3 -c 1.2.3.4 -u -b 100M

出力のパケットロスを確認してください。有線のローカルネットワークで0.5%以上のロスがある場合は、ケーブルの故障やデュプレックスの不一致が疑われます。

mtr による経路分析

iperf3 が「どれくらい」を教えてくれるのに対し、mtr (My Traceroute) は「どこで」を教えてくれます。pingtraceroute を組み合わせ、リアルタイムに更新されるダッシュボードを表示します。

なぜ mtr が優れているのか

標準的な traceroute は、各ホップに対して3つのパケットを送信して終了します。これでは断続的なスパイクを見逃しがちです。mtr は実行し続けるため、傾向を把握できます。ホップ3で20%のロスがあっても、ホップ4から10までが0%であれば、ホップ3は無視して構いません。そのルーターは単にICMPトラフィックをレート制限しているだけでしょう。しかし、ロスがホップ3から始まり、目的地まで続いているなら、そこがボトルネックです。

ライブスキャンの実行

インタラクティブな操作に最適な ncurses 版をインストールしましょう。

sudo apt install mtr -y

# ターゲットに対して mtr を実行
mtr google.com

エビデンスレポートの生成

ISPにプロバイダー側の問題を証明する必要がある場合は、レポートモードを使用します。100サイクル実行し、きれいな表を生成します。

# 100パケット送信後にレポートを生成
mtr -rw -c 100 google.com

StDev(標準偏差)列に注目してください。StDevが高い場合、レイテンシが激しく変動していることを示しており、経路が不安定である証拠です。

データセンターの現場からの教訓

常に双方向でテストしてください。インターネットのルーティングは非対称であることが多いです。トラフィックはサーバーへ直行しても、戻りは3つの異なる国を経由してくるかもしれません。iperf3 の -R フラグを使用して、逆方向のテストを行います。

# ダウンロード速度をテスト(サーバーからクライアントへ)
iperf3 -c 1.2.3.4 -R

CPU使用率に注意してください。安価なクラウドインスタンスで10Gリンクをテストすると、ネットワークの限界に達する前にCPUが100%になることがあります。1つのCPUコアが限界に達している場合、スループットの数値は正確ではありません。

最後に、MTU(最大転送単位)を考慮してください。VPNやGREトンネルを使用している場合、大きな1500バイトのパケットは断片化される可能性があります。これによりスループットが急落します。iperf3 の -M フラグを使用してMSS(最大セグメントサイズ)を下げ、パフォーマンスが安定するか確認してください。

まとめ

ネットワークのトラブルシューティングを推測で行うべきではありません。iperf3 を使えば、パイプがどれだけのデータを運べるかを正確に数値化できます。mtr を使えば、遅延の原因となっているルーターを特定できます。これら2つのツールは、曖昧な苦情を実行可能なデータへと変えてくれます。次に誰かが「ネットワークが遅い」と言ってきたら、その理由を正確に示すレポートを提示できるはずです。

Share: