私の家にはギガビットネットワークがあり、Ubuntuベースのボックスがいくつかあります。完全な好奇心から、2つのボックス間の速度を確認したいと思います。私は速度など何の問題も抱えていません。本当に興味を持っているのは私の中のオタクだけです。加えて、改善の余地があるかどうか、または何かが間違って設定されていることを結果が知らせてくれるかもしれません。
それでは、Ubuntuボックス間のネットワーク速度をどのように適切にテストしますか?
私の家にはギガビットネットワークがあり、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を掛けビット -per-2速を。上記のデモは944mbpsで実行されています。
Oliのiperfに関する推奨事項と同じです。いくつかのポイントを追加したいだけです。
-t <seconds>
テストの長さを変更します。同時接続の数を変更します。たとえば、 10の接続を30秒間テストし、10の個別の接続速度とともに集計結果を提供します。-P <n>
iperf -c [target IP] -P 10 -t 30
wget
、で実行可能にするとchmod
、バイナリを直接実行できます。完璧に機能します。デフォルトの設定を使用すると、単一の接続速度がかなり変動することがわかりました。ただし、3 +並列接続の場合、ギガバイトスイッチでの結果はより一貫しています。(一貫して@ 910-920Mbps)
このスクリプトを使用すると、マシンとリモートホスト間の接続速度を簡単にテストできます。使用例:
$ scp-speed-test.sh user@remote_host 80000
user@remote_host
宛先ホストです(このホストへのsshアクセスが必要です)80000
リモートホストに受信されるテストファイルのおおよそのサイズ(KB単位)です。これは必須の引数ではありません。/dev/random
(それはブロックすることができます)、またはurandom
代わりに、DM-暗号を使用して、彼らはあまりにも非常に遅くなることがあります(リンクコメントがあることを示唆)(のcryptsetupのよくある質問を参照してくださいどのように私はクリプトでデバイスをワイプすることができ2.19ランダム性を等級分けしますか?)多分ラムのファイルと。
イーサネットLANを低レベルでテストする場合は、無料のLinux CLIイーサネットテストツールであるEtherateを使用できます。
https://github.com/jwbensley/Etherate
iPerfのようなツール(非常に優れています!)をIPとTCPまたはUDPで動作するように組み合わせて使用します。イーサネット/ OSIレイヤー2で直接テストをイーサレートします。
以下のコマンドには追加のパッケージは必要ありませんが、SSHアクセスが必要です。
ssh username@myserver.example.com '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
このコマンドは、リモートサーバーのstdoutにゼロでいっぱいの3GB(1000 ^ 3バイト)のダミーファイルを出力します。これは、SSHを介してローカルサーバーのstdoutに印刷(転送)され、ローカルにパイプ/dev/null
(つまり無視)されます。実行中にテストの進行状況を確認することもできます。
確かに他のツールほど正確ではありませんが、私のユースケースは、追加のパッケージをインストールせずにネットワーク速度が問題であるかどうかをテストするバックアッププロセスをデバッグすることでした。
2つのホスト間で帯域幅のベンチマークを行うための他の便利なコマンドラインツールもあります。
server$ nuttcp -S
client$ nuttcp -v -v -i1 1.1.1.1 ;# 1.1.1.1 is server's address
server$ nepim
client$ nepim -d -c 1.1.1.1 ;# 1.1.1.1 is server's address
server$ goben
client$ goben -hosts 1.1.1.1 ;# 1.1.1.1 is server's address
私のコメントで最高の答えを指摘したように、クライアント/サーバーが最適化されていないため、その解決策は十分ではありません... あらゆる速度を絞る
私の解決策:
両側にRAMディスクを作成します(したがって、ストレージ速度に制限はありません。tmpfsではなくramfsで作成することをお勧めします。したがって、スワップに入らないようにしてください。少なくとも512Mの空きメモリを残さないように注意してください。システムの場合、ギガイーサネットを使用している場合、SSDでも速度が低下する場合があります)サーバーにApacheをインストールし、ramdiskへのリンクを作成し、ramdisk(100M-1G、で作成できます) / dev / randomからddまたは手元にコピーがある場合)、クライアント側に移動し、高度なダウンロードプログラムを使用して(その側のRAMディスクにも)ダウンロードします。 lftp
まあ、違いは大きく、iperfによって報告された75mbpsと9.5M / sのnetcatからでした。
11.18M / sの私の解決策と:
1591129421 bytes transferred in 136 seconds (11.18M/s)
最初のボックスにコンピューターを接続し、他のボックスを最初のボックスに接続するのは簡単です。次に、コンピューターから最初のボックスにpingを実行して結果を保存し、他のボックスにpingを実行して減算を実行します。