私の家にはギガビットネットワークがあり、Ubuntuベースのボックスがいくつかあります。完全な好奇心から、2つのボックス間の速度を確認したいと思います。私は速度など何の問題も抱えていません。本当に興味があるのは私の中のオタクです。加えて、改善の余地があるかどうか、または何かが間違って設定されていることを結果が知らせてくれるかもしれません。
それでは、Ubuntuボックス間のネットワーク速度をどのように適切にテストしますか?
iperf
を使用します。これは、クライアントサーバーの配置であり、一端でサーバーモードで実行し、ネットワークの反対側にある別のコンピューターから接続します。
両方のマシンが実行されます:
Sudo apt-get install iperf
いずれかのマシンでiperf
サーバーを起動します。
iperf -s
次に、他のコンピューターで、iperf
にクライアントとして接続するように指示します。
iperf -c <address of other computer>
クライアントマシンでは、次のように表示されます。
oli@bert:~$ iperf -c tim
------------------------------------------------------------
Client connecting to tim, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.0.4 port 37248 connected with 192.168.0.5 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 1.04 GBytes 893 Mbits/sec
もちろん、サーバーマシンでファイアウォールを実行している場合は、ポート5001での接続を許可するか、-p
フラグでポートを変更する必要があります。
あなたがそのように傾いているなら、普通のnc
(netcat)でほとんど同じことをすることができます。サーバーマシン上:
nc -vvlnp 12345 >/dev/null
また、クライアントはdd
トンネルを介してnc
を介してゼロのギガバイトをパイプすることができます。
dd if=/dev/zero bs=1M count=1K | nc -vvn 10.10.0.2 12345
降格として:
$ dd if=/dev/zero bs=1M count=1K | nc -vvn 10.10.0.2 12345
Connection to 10.10.0.2 12345 port [tcp/*] succeeded!
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 9.11995 s, 118 MB/s
タイミングはdd
で指定されますが、パイプが取得する速度でしか出力できないため、十分に正確である必要があります。それに不満がある場合は、time
呼び出しですべてをまとめることができます。
結果はメガバイトであるため、8を掛けるとメガビット-秒速度が得られることに注意してください。上記のデモは944mbpsで実行されています。
Oliのiperfに関する推奨事項と同じです。いくつかのポイントを追加したいだけです。
-t <seconds>
はテストの長さを変更します。 -P <n>
は、同時接続の数を変更します。たとえば、iperf -c [target IP] -P 10 -t 30
は10の接続を30秒間テストし、10の個別の接続速度とともに集計結果を提供します。wget
でダウンロードし、chmod
で実行可能にすると、バイナリを直接実行できます。完璧に機能します。デフォルトの設定を使用すると、単一の接続速度がかなり変動することがわかりました。ただし、3 +並列接続の場合、ギガバイトスイッチでの結果はより一貫しています。 (一貫して@ 910-920Mbps)
このスクリプト を使用すると、マシンとリモートホスト間の接続速度を簡単にテストできます。使用例:
$ scp-speed-test.sh user@remote_Host 80000
user@remote_Host
は宛先ホストです(このホストへのsshアクセスが必要です)80000
は、リモートホストに受信されるテストファイルのおおよそのサイズ(KB)です。これは必須の引数ではありません。イーサネットLANを低レベルでテストする場合は、無料のLinux CLIイーサネットテストツールであるEtherateを使用できます。
https://github.com/jwbensley/Etherate
IPerfのようなツール(非常に優れています!)をIPとTCPまたはUDPで動作するように混在させます。イーサネット/ OSIレイヤー2で直接テストをイーサレートします。
以下のコマンドには追加のパッケージは必要ありませんが、SSHアクセスが必要です。
ssh [email protected] 'dd if=/dev/zero bs=1GB count=3 2>/dev/null' | dd of=/dev/null status=progress
出力例:
2992238080 bytes (3.0 GB) copied, 27.010250 s, 111 MB/s
5859375+0 records in
5859375+0 records out
3000000000 bytes (3.0 GB) copied, 27.1943 s, 110 MB/s
このコマンドは、リモートサーバーの標準出力にゼロでいっぱいの3GB(1000 ^ 3バイト)のダミーファイルを出力します。これは、SSHを介してローカルサーバーの標準出力に印刷(転送)され、/dev/null
にローカルにパイプされます(つまり無視されます) )。実行中にテストの進行状況を確認することもできます。
確かに他のツールほど正確ではありませんが、私のユースケースは、追加のパッケージをインストールせずにネットワーク速度が問題かどうかをテストするバックアッププロセスをデバッグすることでした。
私のコメントで最高の答えを指摘したように、クライアント/サーバーが最適化 to ...squeeze速度のあらゆるビット
私の解決策:
両側にramdiskを作成します(したがって、ストレージ速度に制限はありません。tmpfsではなくramfsで作成することをお勧めします。したがって、スワップに入らないようにしてください。少なくとも512Mの空きメモリを残さないよう注意してください。システムの場合、ギガイーサネットを使用している場合、SSDでも速度が低下する可能性があります)サーバーにApacheをインストールし、ramdiskへのリンクを作成し、ramdisk(100M-1G、/dev/randomからddまたは手元にコピーがある場合)、クライアント側に移動し、高度なダウンロードプログラムを使用して(その側のRAMディスクにも)ダウンロードします。lftp
を使用しました
まあ、違いは大きなものでした。iperfと9.5M/sのnetcatによって報告された75Mbpsからです。
to 11.18M/s私のソリューションで:
1591129421 bytes transferred in 136 seconds (11.18M/s)