連載
» 2004年05月22日 05時00分 UPDATE

Tech TIPS:Windowsのftpでネットワークの速度を測定する

ftpを使ってファイルを転送させ、その時間を測定すればネットワークの速度を測定できる。測定対象となるファイルはfsutilコマンドで簡単に作成できる。オーバーヘッドを少なくするためには、圧縮しておくとよい。

[打越浩幸,デジタルアドバンテージ]
Tech TIPS
Windows Server Insider


「Tech TIPS」のインデックス

連載目次

対象OS:Windows 2000 / Windows XP / Windows Server 2003



解説

 ネットワークのパフォーマンス(ここでは単純に「単位時間当たりの最大転送量」の意味とする)を測定するにはさまざまな方法がある。単にファイルをコピーして、それにかかる時間から転送速度を求めたり、TIPS「ttcpでネットワーク・パフォーマンスを測定する」で解説したように、(ttcpなどの)速度測定用の専用プログラムを使う方法がある。前者は、どのマシンでも利用できるが、正確な転送終了までの時間や総転送量を求めるのが難しく、後者は専用のアプリケーションやコマンドなどをインストールしておかないと利用できないという問題がある。

 本TIPSでは、より汎用性が高く、それなりに精度も高いネットワークの速度測定方法として、ftpサーバとftp.exeコマンドを使った方法について解説する。コマンド・プロンプト上でftp.exeを使ってファイルを転送すると、転送したファイルのサイズとかかった時間、およびそこから計算される転送速度が表示される。これを使ってネットワークの転送速度を測定しようというわけだ。

 だがこの方法を使う場合、いくつか気をつけなければならないことがある。まず測定に適したサイズのファイルを用意する必要がある。ファイル・サイズが小さくて転送にかかる時間があまりにも短いと(1秒や2秒で終わってしまうと)、結果の誤差が大きくなるからだ。また測定時には、なるべくディスクへのアクセスを抑えることが望ましい。ディスクへのアクセスが多くなると、ネットワーク・サブシステム(ネットワークのハードウェアやデバイス・ドライバ、上位のネットワーク・プロトコル・スタックなどを含めた、ネットワーク・システム全体のこと)の性能を最大限に発揮することができず、正確な測定ができなくなるからである。

 さらにもう1つ注意することとして、ftpコマンドの表示する転送速度表示(Kbytes/s)が、一般的な速度表示とは少し異なっているということも挙げられる。

 本稿では、これらに注意しながら、ftpコマンドを使ってネットワークの速度を測定する方法について解説する。

操作方法

●手順1―速度測定用のダミー・ファイルを用意する

 ftpを使って転送速度を測定するためには、まず転送用のファイルをftpサーバのフォルダ中に用意する必要がある。テストにはどのようなファイルを使ってもよいのだが、正確な結果を求めようとすると、転送に10秒から(長くても)1分程度かかるくらいのサイズのファイルが望ましい。これならば有効数字2〜3桁程度の精度で結果を求めることができる。だが転送がわずか1、2秒で終わってしまうようだと、結果の精度はわずか1、2桁しかないことになるので、少々不足気味である。

 転送に数十秒かかるサイズとは、具体的には例えば100Mbit/s(=100,000,000bit/s)の速度を持つイーサネット(100BASE-TX)ならば、100Mbytes〜1Gbytes程度となる(100Mbit/s≒11.9Mbyte/sなので、10秒ならば119Mbytesとなる)。もちろん無線LANの場合やDSL、ISDNのようなWAN回線、インターネット回線の場合ならば、もっと小さいファイル・サイズでよいし、ギガビット・イーサネットならばもっと大きなファイルが必要だろう。一度下実験をして、適切なサイズを求めてほしい。

 このような大きなファイルを都合よく用意するは容易ではないかもしれないが、Windows OSの場合ならばTIPS「巨大なサイズのファイルを簡単に作る方法」で紹介した方法を使うとよいだろう。Windows XPもしくはWindows Server 2003上でfsutilコマンドを使って、巨大なファイルを作成するのである。例えば200,000,000bytesのサイズのファイルを作成するには、次のコマンドを実行する。ここでc:\testフォルダは、ftpサーバ経由でアクセスできるフォルダであるものとする。

C:\test>fsutil file createnew test 200000000 ……(1)ファイルの作成
ファイル C:\test\test が作成されました

C:\test>compact /c test ……(2)ファイルの圧縮

C:\test\ のファイルを圧縮しています ……圧縮中の表示

test                200000000 :         0 = 1.0 : 1 [OK]

1 ディレクトリ内の 1 ファイルが圧縮されました。
合計 200,000,000 バイトのデータが、0 バイトに格納されました。 ……圧縮後のサイズは0になった
データの圧縮率は 1.0 : 1 です。

C:\test>dir test
ドライブ C のボリューム ラベルは SYSTEMVOLUME です
ボリューム シリアル番号は D0F0-A297 です

C:\test のディレクトリ

2004/05/21  10:38       200,000,000 test ……作成されたファイル
               1 個のファイル         200,000,000 バイト
               0 個のディレクトリ   7,458,538,496 バイトの空き領域



 この例では、(1)のfsutilコマンドでファイルを作成したあと、さらに(2)のcompactコマンドでファイルを圧縮している(これはWindows 2000以降でのみ利用可能なコマンドだが、エクスプローラで圧縮してもよい)。fsutilコマンドで作成されたファイルの内容は単なるNull(ゼロ)データばかりなので、圧縮操作を施せば、ディスク上で物理的に占有するサイズは0になってしまう。これにより、速度測定用にftpサーバがファイルを読み出そうとしても、実際には物理ディスクにアクセスする必要がなくなり、純粋にネットワークの速度だけを測定することができるようになる。

 なおこのファイル作成操作は、ネットワーク・ドライブに対しても実行できる。そのため、fsutilコマンドが利用できないWindows 2000 OSの場合は、Windows XPやWindows Server 2003上でネットワーク経由でfsutilを実行すればよい。

●手順2―ftpで速度を測定する

 いったんファイルが作成されたならば、次は実際にftpコマンドを使ってファイルにアクセスし、速度を測定する。この場合も、可能ならばディスクにまったくアクセスさせずに、ネットワークの速度だけを測定したい。そうすればディスク・アクセスのオーバーヘッドを避けて、ネットワークの速度だけを測定することができるからだ。

 これを実現するためには、nulデバイスへの書き込みを使うとよい。つまり、転送(取得)したファイルの書き込み先を、ローカルのディスク上のファイルではなく、nulデバイスにするのである。nulデバイスに書き込むということはデータを捨てるということと同じであり、速度を測定するだけならば都合がよい。

C:\>ftp server1 ……サーバへ接続する
Connected to server1.d-advantage.jp.
220 server01 Microsoft FTP Service (Version 5.0).
User (server1.d-advantage.jp:(none)): user01 ……ユーザー名の入力
331 Password required for user01.
Password: ……パスワードの入力
230-Digital Advantage FTP Site
230 User hiroy-u logged in.
ftp> cd /test ……テスト・ファイルのフォルダへ移動する
250 CWD command successful.
ftp> dir ……内容をチェックする
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
-rwxrwxrwx   1 owner    group       200000000 May 21 10:41 test ……テスト・ファイル
226 Transfer complete.
ftp: 65 bytes received in 0.00Seconds 65000.00Kbytes/sec.
ftp> bin ……(3)バイナリ転送モードにする
200 Type set to I.
ftp> get test nul ……(4)ファイルを読み出して、nulデバイスへ書き込む
200 PORT command successful.
150 Opening BINARY mode data connection for test(200000000 bytes).
226 Transfer complete.
ftp: 200000000 bytes received in 16.96Seconds 11795.93Kbytes/sec. ……(5)結果



 ftpのコマンドについて簡単にまとめておくと、最初に「ftp サーバ名」でftpサーバに接続し、ユーザー名とパスワードを入力すると、ftpサーバにログオンできる。次にcdコマンドでテスト用ファイルが置かれているフォルダに移動し、dirコマンドでその内容を確認する。次に実際にファイルを転送して速度を測定するのであるが、その前に転送モードを「bin(バイナリ)」にセットして((3))、余計な行末変換処理などが行われないようにする。そして「get リモート・ファイル名 ローカル・ファイル名」を実行すると((4))、ファイルが転送され、最後にその転送に要した時間と転送したサイズが表示されるので、これを確認すればよい。実際には、誤差を避けるために何度か繰り返して実行するのがよい。ftpのコマンド・プロンプト上で[F3]キーを押すか、[↑]矢印キーを押すと、直前のコマンドを簡単に再入力して再実行することができる。

 例の最後の行を見ていただきたい((5))。転送したバイト数が「200,000,000bytes」で、転送に要した時間が「16.96s」となっている。その結果、転送速度が「11795.93Kbytes/s」と表示されているが、実はこの計算結果におけるKbytesという単位は、一般的なKbytesとは異なるので注意が必要である。

 通常コンピュータの世界では、1Kbyte=1024bytesとして計算するが、Windows OSのftpコマンドの結果表示では1Kbyte=1000として計算している。そのため、上の例では「200,000,000÷1000÷16.96≒11795.93Kbytes/s」となっている(少し誤差があるのは、秒の内部表現が16.96ちょうどではないため)。これを1Kbyte=1024bytesとして計算し直すと、「200,000,000÷1024÷16.96≒11516.1Kbytes/s=11.2Mbytes/s」となる。結果を確認する場合は、この点に注意していただきたい。

 以上の例は受信方向の速度の測定であったが、逆方向(送信方向)の速度を測定するには「put ローカル・ファイル名 リモート・ファイル名」としてファイルを送信する。この場合もリモート・ファイル名としてnulデバイスを指定できればよいのだが、残念ながらWindows Server OSの(IISに含まれる)ftpサーバでは、「put test nul」というふうにすることはできない。これを実行すると「550 nul: Access is denied.」というエラーになるので、単なる「put test」として、ファイルを書き込むようにするしかないようだ。書き込みのオーバーヘッドによって、わずかだが送信速度が低下するので注意していただきたい。なお通信相手がUNIX/Linux系OSの場合は、「put test /dev/null」とすれば結果をディスクに書き込まずに破棄することができる場合があるので(Windows OS/DOSのnulデバイスはUNIXの/dev/nullと同じ)、試してみるとよい。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。