ネットワーク/ストレージの処理能力をチェックするためのベンチマークツール 2ページ

Network Diagnostic Tool(NDT)

 nuttcpは非常に多機能なツールであり、ほぼこのツールだけでネットワーク関連の測定は完結するのだが、ネットワークの両端のマシンでnuttcpを実行する必要があるという制限がある。そのため、何らかの事情でネットワークの片側でしかツールを実行できない、もしくは片側のネットワーク帯域が低い、といった場合は利用しにくい。このような場合に回線速度を簡易的にチェックできるのが「Network Diagnostic Tool(NDT)」というツールだ。

 NDTは「Internet2」というネットワーキングコンソーシアムが開発しているネットワーク関連の診断・調査ツールの1つだ。NDTではnuttcpと同様、クライアント/サーバー型で診断を行うのだが、NDTサーバーは世界中で公開されており、バックボーンとして高速なネットワークを使用しているものもある。

 NDTクライアントはWebブラウザ上から実行できるJavaアプレット版やAndroid版、そしてコマンドライン版が用意されている(図1)。

図1 Javaアプレット版のNDTクライアント
図1 Javaアプレット版のNDTクライアント

 そのうち、サーバーで利用しやすいのはクライアント版だろう。ソースコードは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)。

図2 perfSONARページからNDTサーバーを検索する
図2 perfSONARページからNDTサーバーを検索する

 また、それ以外にも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