ネットワーク/ストレージの処理能力をチェックするためのベンチマークツール 2ページ
Network Diagnostic Tool(NDT)
nuttcpは非常に多機能なツールであり、ほぼこのツールだけでネットワーク関連の測定は完結するのだが、ネットワークの両端のマシンでnuttcpを実行する必要があるという制限がある。そのため、何らかの事情でネットワークの片側でしかツールを実行できない、もしくは片側のネットワーク帯域が低い、といった場合は利用しにくい。このような場合に回線速度を簡易的にチェックできるのが「Network Diagnostic Tool(NDT)」というツールだ。
NDTは「Internet2」というネットワーキングコンソーシアムが開発しているネットワーク関連の診断・調査ツールの1つだ。NDTではnuttcpと同様、クライアント/サーバー型で診断を行うのだが、NDTサーバーは世界中で公開されており、バックボーンとして高速なネットワークを使用しているものもある。
NDTクライアントはWebブラウザ上から実行できるJavaアプレット版やAndroid版、そしてコマンドライン版が用意されている(図1)。
そのうち、サーバーで利用しやすいのはクライアント版だろう。ソースコードはGoogle Codeのndtプロジェクトで公開されているが、バイナリなどは用意されていないので自分でビルドを行う必要がある。その場合、プロジェクトで公開されているtar.gz形式のソースアーカイブには単体ではクライアントのみのビルドができないという不具合が残っているので、以下のようにしてSubversion(svnコマンド)を使ってソースコードリポジトリから最新版をダウンロードする必要がある。
$ svn checkout http://ndt.googlecode.com/svn/trunk/ ndt
これで、ndtディレクトリに最新のソースコードが格納される。ただし、このソースコードには依存するI2utilライブラリが含まれていない。このライブラリはアップストリームでの配布が終了しているようなので、以下のようにしてGoogle Codeで公開されているndtのソースアーカイブ内に含まれているものをコピーして利用する。
$ wget https://ndt.googlecode.com/files/ndt-3.6.5.1.tar.gz $ tar xvzf ndt-3.6.5.1.tar.gz $ cd ndt $ cp -r ../ndt-3.6.5.1/I2util .
そのほか、zlibのヘッダーファイル(「zlib-devel」など)や「automake」、「autoconf」といったパッケージも必要だ。これらも適切にインストールしておこう。必要なライブラリなどがそろったら、次のようにしてビルドを実行できる。
$ ./bootstrap $ ./configure $ make
ビルドが完了すると、srcディレクトリ内に「web100clt」という実行ファイルが作成される。これがndtのクライアントとなる。「–help」オプションを付けて実行するとコマンドラインオプション一覧が表示されるので、チェックしておこう。
$ cd src ./web100clt --help
web100cltコマンドでテストを実行するには、「-n」オプションに続けてNDTサーバーを指定する。NDTサーバーはNDTのWebサイトに一覧が掲載されているほか、perfSONARというWebページからも検索できる(図2)。
また、それ以外にもNDTサーバーを公開しているところがある。たとえば国内ではAPAN(アジア太平洋先端ネットワーク)の日本支部であるAPAN-JPや、東京大学 素粒子物理国際研究センター (ICEPP)などがサーバーを公開している。
たとえば、APAN-JPのNDTサーバーである「nms1.jp.apan.net」を利用してスループットを測定するには、次のようにする。
$ ./web100clt -n nms1.jp.apan.net Testing network path for configuration and performance problems -- Using IPv4 address Checking for Middleboxes . . . . . . . . . . . . . . . . . . Done checking for firewalls . . . . . . . . . . . . . . . . . . . Done running 10s outbound test (client to server) . . . . . 73.17 Mb/s running 10s inbound test (server to client) . . . . . . 72.70 Mb/s sending meta information to server . . . . . Done The slowest link in the end-to-end path is a a 622 Mbps OC-12 subnet Information: Other network traffic is congesting the link Server 'nms1.jp.apan.net' is not behind a firewall. [Connection to the ephemeral port was successful] Client is probably behind a firewall. [Connection to the ephemeral port failed] Information: Network Middlebox is modifying MSS variable (changed to 1414) Server IP addresses are preserved End-to-End Information: Network Address Translation (NAT) box is modifying the Client's IP address Server says [***.***.***.**] but Client says [ ***.**.*.**]
この例では、クライアントからサーバーの速度は73.17Mb/秒、サーバーからクライアントの速度は72.70Mb/秒であることが分かる。なお、公開されているNDTサーバーは研究用として提供されているため、サーバーが停止していたり、また廃止される場合などもあるため注意したい。バックボーンネットワークもサーバーによって異なるので、実行する時間帯などによって結果が変動する可能性もある。あくまで参考程度として利用して欲しい。
pingコマンドでレイテンシとパケットロスを測定する
ネットワークの状況を調べるツールとして、もっとも有名と思われるpingコマンドについても簡単に説明しておこう。pingコマンドでは「ICMP(Internet Control Message Protocol)」と呼ばれるプロトコルで定義されている「ECHO Request」パケットを送信し、このパケットを受信した端末が送信元に対し「Echo Reply」パケットを送信する、という動作で送信元から送信先までのネットワークが正しく接続されているかを確認する。このとき、pingコマンドの実行結果にはパケットが相手に到達しているかといった情報だけでなくレイテンシも表示される。
たとえば、以下の例はexample.comに対しpingコマンドを実行した例だ。ここで、「time=」に続いて表示されているのがレイテンシ(RTT)となる。この例の場合、パケットを送信してからその反応が返ってくるまでおおむね113ミリ秒(約0.1秒)程度の時間がかかっていることになる。また、5回パケットを送信して5回ともその返答を受信しており、パケットロスは0%であることが分かる。
$ ping example.com PING example.com (192.0.2.1) 56(84) bytes of data. 64 bytes from example.com (192.0.2.1): icmp_req=1 ttl=52 time=113 ms 64 bytes from example.com (192.0.2.1): icmp_req=2 ttl=52 time=113 ms 64 bytes from example.com (192.0.2.1): icmp_req=3 ttl=52 time=113 ms 64 bytes from example.com (192.0.2.1): icmp_req=4 ttl=52 time=113 ms 64 bytes from example.com (192.0.2.1): icmp_req=5 ttl=52 time=113 ms ^C --- example.com ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4005ms rtt min/avg/max/mdev = 113.123/113.342/113.741/0.253 ms