Linux上でネットワーク回線速度を計測する手段について整理してみた
ちょっとした小ネタです。
ネットワーク環境調査に於いてネットワークの『回線速度を調べたい』という局面があるかと思いますが、Windows環境ではブラウザ経由で簡単に結果が得られる一方、Linux環境では『あれ、そもそも何が出来る/どうやれば出来るんだろう?』と少々思案してしまいました。情報を幾つか漁ってみたところ、Linux環境でも回線速度状況を把握する術が幾つかある事が分かりましたので備忘録的に整理しておこうと思います。
目次
環境準備
当エントリではAmazon Linux AMIを使った環境で回線速度を調べる環境が必要になった場合、という状況を想定してみたいと思います。直近最新のAmazon Linux AMIで環境を構築し、yumコマンドでパッケージ各種を最新の状態に整えておきます。
$ sudo yum -y update
Speedtest-cli
2006年に始まったOokla社のサービス『Speedtest.net』ではブラウザ上で回線速度の試験が行えます。
- Speedtest.net - Wikipedia, the free encyclopedia
- Speedtest.net by Ookla - The Global Broadband Speed Test
- スピードメーター風の通信速度測定サイト「Speedtest.net」 - GIGAZINE
speedtestではcliも提供されています。このツールを環境に導入する事で、Linux環境でも回線速度の計測が行えるようになります。
導入方法は簡単です。easy_installで一発。
$ sudo easy_install speedtest-cli Searching for speedtest-cli Reading https://pypi.python.org/simple/speedtest-cli/ : : Installing speedtest script to /usr/local/bin Installing speedtest-cli script to /usr/local/bin Installed /usr/local/lib/python2.7/site-packages/speedtest_cli-0.3.2-py2.7.egg Processing dependencies for speedtest-cli Finished processing dependencies for speedtest-cli $ $ speedtest --version 0.3.2
speedtest --listで計測を行うサーバの一覧を表示させる事が出来ます。
$ speedtest --list
--listオプションで表示されるサーバ一覧は結構な数ありますので、日本国内のものに絞ってみます。その中から東京のものを指定してみたいと思います。
$ speedtest --list | grep Japan 5628) Too late (Ishikari, Japan) [10074.51 km] 6405) Allied Telesis Capital Corporation (Misawa, Japan) [10313.64 km] 6516) factorymark (Ofunato, Japan) [10455.71 km] 6492) denpa893 (Sumida, Japan) [10864.55 km] 6424) Cordeos Corp. (Tokyo, Japan) [10868.32 km] 6087) Allied Telesis Capital Corporation (Fussa-shi, Japan) [10881.90 km] 6467) MMS Network (Yokohama, Japan) [10897.25 km] 6508) at2wn (Yokohama, Japan) [10897.25 km] 6766) JAIST (Kanazawa, Japan) [10909.06 km] 6691) sudosan (Shizuoka, Japan) [11005.17 km] 6368) gatolabo (Maibara, Japan) [11048.44 km] 6463) j416dy (Kusatsu, Japan) [11091.00 km] 6476) rxy (individual) (Osaka, Japan) [11141.69 km] 811) GLBB Japan KK (Chatan, Japan) [12288.16 km] 6581) haza (Haebaru, Japan) [12302.57 km]
計測実行。サーバー指定の際はspeedtest --server 6424の様にサーバを示すID値を引数として渡します。以下の様な形で上がり/下り双方の数値が計測出来ました。
$ speedtest --server 6424 Retrieving speedtest.net configuration... Retrieving speedtest.net server list... Testing from Amazon Technologies (52.2.83.155)... Hosted by Cordeos Corp. (Tokyo) [10868.32 km]: 196.001 ms Testing download speed........................................ Download: 20.25 Mbit/s Testing upload speed.................................................. Upload: 14.54 Mbit/s
参考までに、実行時のオプション等の使い方を-hオプションで表示してみます。
$ speedtest -h usage: speedtest [-h] [--bytes] [--share] [--simple] [--list] [--server SERVER] [--mini MINI] [--source SOURCE] [--timeout TIMEOUT] [--version] Command line interface for testing internet bandwidth using speedtest.net. -------------------------------------------------------------------------- https://github.com/sivel/speedtest-cli optional arguments: -h, --help show this help message and exit --bytes Display values in bytes instead of bits. Does not affect the image generated by --share --share Generate and provide a URL to the speedtest.net share results image --simple Suppress verbose output, only show basic information --list Display a list of speedtest.net servers sorted by distance --server SERVER Specify a server ID to test against --mini MINI URL of the Speedtest Mini server --source SOURCE Source IP address to bind to --timeout TIMEOUT HTTP timeout in seconds. Default 10 --version Show the version number and exit $
iperf
2台の環境間でのネットワークスループットを計測したい場合は『iperf』というツールが利用出来ます。
こちらについては、以前のエントリでhiroyuki kajiさんが書いていましたので詳細は当エントリでは割愛します。下記エントリをご参照ください。
こちらも導入についてはyumコマンドで一発です。
$ sudo yum -y install iperf --enablerepo=epel $ iperf --version iperf version 2.0.5 (08 Jul 2010) pthreads
ヘルプコマンド実施内容も一応載せておきます。
$ iperf --help Usage: iperf [-s|-c host] [options] iperf [-h|--help] [-v|--version] Client/Server: -f, --format [kmKM] format to report: Kbits, Mbits, KBytes, MBytes -i, --interval # seconds between periodic bandwidth reports -l, --len #[KM] length of buffer to read or write (default 8 KB) -m, --print_mss print TCP maximum segment size (MTU - TCP/IP header) -o, --output <filename> output the report or error message to this specified file -p, --port # server port to listen on/connect to -u, --udp use UDP rather than TCP -w, --window #[KM] TCP window size (socket buffer size) -B, --bind <host> bind to <host>, an interface or multicast address -C, --compatibility for use with older versions does not sent extra msgs -M, --mss # set TCP maximum segment size (MTU - 40 bytes) -N, --nodelay set TCP no delay, disabling Nagle's Algorithm -V, --IPv6Version Set the domain to IPv6 Server specific: -s, --server run in server mode -U, --single_udp run in single threaded UDP mode -D, --daemon run the server as a daemon Client specific: -b, --bandwidth #[KM] for UDP, bandwidth to send at in bits/sec (default 1 Mbit/sec, implies -u) -c, --client <host> run in client mode, connecting to <host> -d, --dualtest Do a bidirectional test simultaneously -n, --num #[KM] number of bytes to transmit (instead of -t) -r, --tradeoff Do a bidirectional test individually -t, --time # time in seconds to transmit for (default 10 secs) -F, --fileinput <name> input the data to be transmitted from a file -I, --stdin input the data to be transmitted from stdin -L, --listenport # port to receive bidirectional tests back on -P, --parallel # number of parallel client threads to run -T, --ttl # time-to-live, for multicast (default 1) -Z, --linux-congestion <algo> set TCP congestion control algorithm (Linux only) Miscellaneous: -x, --reportexclude [CDMSV] exclude C(connection) D(data) M(multicast) S(settings) V(server) reports -y, --reportstyle C report as a Comma-Separated Values -h, --help print this message and quit -v, --version print version information and quit [KM] Indicates options that support a K or M suffix for kilo- or mega- The TCP window size option can be set by the environment variable TCP_WINDOW_SIZE. Most other options can be set by an environment variable IPERF_<long option name>, such as IPERF_BANDWIDTH. Report bugs to <iperf-users@lists.sourceforge.net> $
dstat
dstatを使うと、ネットワーク回線速度を含めたサーバのリソース各種を監視する事が出来ます。
- そして、ロイド。:Linuxの通信速度測定
- dstatの便利なオプションまとめ - Qiita
- dstatの万能感がハンパない - (ひ)メモ
- サーバリソースをリアルタイムに監視するdstatのインストールと使い方 | OXY NOTES
- dstat - 気ままなつぶやき
導入は以下のようにyumコマンドで一発。
$ sudo yum -y install dstat
オプション無しだと以下の様に情報が一通り表示されます。
$ dstat ----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system-- usr sys idl wai hiq siq| read writ| recv send| in out | int csw 11 2 83 4 0 0| 579k 6283k| 0 0 | 0 0 | 242 341 0 0 100 0 0 0| 0 0 | 156B 940B| 0 0 | 19 26 0 1 99 0 0 0| 0 0 | 104B 460B| 0 0 | 11 10 0 0 100 0 0 0| 0 0 | 104B 460B| 0 0 | 9 12
-n 数字オプションを付与すると指定の秒数毎の表示が可能となります。
$ dstat -n 1 -net/total- recv send 0 0 104B 316B 104B 358B 180B 268B
そこそこボリュームのあるCSVをダウンロードした時の状況を計測してみたいと思います。dstat -n 1コマンドを事前に実行しておいて、別ウインドウでターミナルを開き、下記wgetコマンドを実行してみます。
$ wget https://s3-ap-northeast-1.amazonaws.com/xxxxxx/xxxxxxxx.csv
実行時の数値は以下の様になりました。ダウンロード処理が進むに連れてrecv(データの受信)の数値が上がり、最大で10MBにまで上昇しました。
$ dstat -n 1 -net/total- recv send 104B 268B 238B 626B 57k 4372B 195k 2026B 443k 3550B 755k 4240B 1392k 7272B : 6699k 37k 6172k 55k 4898k 60k : 6289k 29k 8324k 52k 8148k 44k 10M 47k 9587k 41k 4797k 56k 2336k 16k 4789k 74k
今度は逆に、サーバからファイルをアップロードした際の回線速度状況について見てみたいと思います。以下aws s3コマンドでS3バケットへのアップロードを実施してみました。
aws s3 cp xxxxxxxxxxx.csv 's3://xxxxxxxxxxx/xxxxxxxxxxx.csv'
dstatの数値遷移を見てみます。send(データ送信)の数値が50MB近くまで上昇している事が確認出来ました。
$ dstat -n 1 -net/total- recv send 52B 268B 156B 332B 104B 268B 104B 268B 104B 268B 104B 268B 104B 268B 104B 268B 260B 370B 1016B 2619B 904B 1504B 1488B 1237B : 31k 4536k 162k 30M -net/total- recv send 330k 53M 607k 47M 382k 39M 373k 45M 544k 47M 374k 45M 399k 39M 417k 36M 338k 44M 287k 41M 247k 24M 84k 9135k 25k 1702k 3019B 9313B 52B 166B 52B 166B 128B 256B
ping
pingコマンドを使って回線速度の状況を計測する事も出来るようです。ただ、状況を整えたり色々手元で計算したりしないといけないようで、あまり便利に使いこなせるという感じでは無さそうです...。
まとめ
Linux環境における回線速度の実施方法に関するまとめエントリでした。今回調べた内容では、Speedtest-cliの実行結果が個人的には一番しっくり来るものでしたが、その他の内容も状況によって使い分けて行きたいところですね。こちらからは以上です。