ネットワーク速度の測定方法はいろいろあります。どの数値にしても通信の一面しか把握できません。しかし、実際にユーザとして役に立つこととかけ離れている数値で一喜一憂しないように、ここでは、速度の測定について整理してみます。
カタログや評価では「SmatBitによる測定値」との表示をよく見かけます。SmartBitとは、世界的に通信機器開発業界で広く普及しているネットワークの評価装置です。極めて多機能で、多くのテストのシナリオも沢山持っています。通信機器の開発や性能改善に役立つ装置です。その多様さ故に「SmartBitを使い測定」だけではその数値の意味を知ることはできません。また、例えSmartBitのテストシナリオを知ったところで、ユーザが使う実環境との整合性の判断はつきません。なぜなら通信環境が異なります。実際のユーザ環境は様々な通信要素が影響し合うからです。このことは、自動車の燃費測定に似ています。自動車の燃費表記は、実環境を擬似的に定義し、それに基づいた測定条件を定義測定をしています。
ユーザ側では測定の厳密性を求めなくても、大まかな数字を把握しておけば十分です。一方、基準とする方法をもっておけば、比較のときに便利です。
私は、通信能力の測定にttcpを使っています。
■ttcpはたいへんコンパクトなプログラムでソースが公開されています。
■UNIX系、Linux系、BSD系の基本ソフトの殆ど、Windows系、MacOS X系で動作します。
■ハードディスクに依存しない測定が可能です。
ttcpは二つの区間の速度を測定します。TCPでもUDPでも測定可能で、基本ソフトのTCP/IPスタック(通信機能)上で動作するソフトウエアです。測定は簡単で片方を接続待ち(reciver:受信者)にし他方からデータを送信(sender:送信者)します。reciverは受け取ったデータを破棄することも、標準出力に出力することもできます。senderはプログラム内で送るデータを作り出すことも、標準入力を使いディスクから読むこともできます。
sender側でディスクを使うことなくデータを送信し、reciver側で受け取ったデータを破棄すると、その間の通信速度をハードディスクなどデータを保管する装置の読み書きの影響なしで測ることができます。
このことは重要で、FTPなどファイル転送型の測定では、ディスクの読み書きの能力が、通信能力を超えていることを確認したうえでないと「通信のみの能力」を計ったことになりません。大きなファイルを読み出し、ネットワークを介して異なるディスクに書き込むときは、ディスクからの読み出し速度や書き込み速度が通信速度より遅くなることがあります。
ファイルの転送速度の測定としては、FTPは適していますが、通信能力を測るにはファイルの読み書き能力が影響することを忘れてはいけません。通信経路に1Mbpsの回線を経由するなど、隘路があり、その区間の速度が、ディスク装置の読み出し、書き出し速度より十分に遅い場合にはFTPの速度はほぼ通信能力を表すことになります。高速かつ大容量データの場合はディスク装置の能力の考慮が必須です。
ttcpを使うとその考慮が不要になり、かつ実伝送データの伝送速度を知ることができます。実伝送データとは、EthernetフレームやTCP/IPフレームに必要なデータ量を含まない、ttcpがデータとして送受信したものです。ファイル転送するときは、ファイルの大きさに相当します。
■NetBSDでのttcpコマンドのヘルプ
bash-2.05$ ttcp
Usage: ttcp -t [-options] host [ <in ]
out]
Common options:
-l ## length of bufs read from or written to network (default 8192)
-u use UDP instead of TCP
-p ## port number to send to or listen at (default 5001)
-s -t: source a pattern to network
-r: sink (discard) all data from network
-A align the start of buffers to this modulus (default 16384)
-O start buffers at this offset from the modulus (default 0)
-v verbose: print more statistics
-d set SO_DEBUG socket option
-b ## set socket buffer size (if supported)
-f X format for rate: k,K = kilo{bit,byte}; m,M = mega; g,G = giga
Options specific to -t:
-n## number of source bufs written to network (default 2048)
-D don't buffer TCP writes (sets TCP_NODELAY socket option)
Options specific to -r:
-B for -s, only output full blocks as specified by -l (for TAR)
-T "touch": access each byte as it's read
bash-2.05$
カタログや評価では「SmatBitによる測定値」との表示をよく見かけます。SmartBitとは、世界的に通信機器開発業界で広く普及しているネットワークの評価装置です。極めて多機能で、多くのテストのシナリオも沢山持っています。通信機器の開発や性能改善に役立つ装置です。その多様さ故に「SmartBitを使い測定」だけではその数値の意味を知ることはできません。また、例えSmartBitのテストシナリオを知ったところで、ユーザが使う実環境との整合性の判断はつきません。なぜなら通信環境が異なります。実際のユーザ環境は様々な通信要素が影響し合うからです。このことは、自動車の燃費測定に似ています。自動車の燃費表記は、実環境を擬似的に定義し、それに基づいた測定条件を定義測定をしています。
ユーザ側では測定の厳密性を求めなくても、大まかな数字を把握しておけば十分です。一方、基準とする方法をもっておけば、比較のときに便利です。
私は、通信能力の測定にttcpを使っています。
■ttcpはたいへんコンパクトなプログラムでソースが公開されています。
■UNIX系、Linux系、BSD系の基本ソフトの殆ど、Windows系、MacOS X系で動作します。
■ハードディスクに依存しない測定が可能です。
ttcpは二つの区間の速度を測定します。TCPでもUDPでも測定可能で、基本ソフトのTCP/IPスタック(通信機能)上で動作するソフトウエアです。測定は簡単で片方を接続待ち(reciver:受信者)にし他方からデータを送信(sender:送信者)します。reciverは受け取ったデータを破棄することも、標準出力に出力することもできます。senderはプログラム内で送るデータを作り出すことも、標準入力を使いディスクから読むこともできます。
sender側でディスクを使うことなくデータを送信し、reciver側で受け取ったデータを破棄すると、その間の通信速度をハードディスクなどデータを保管する装置の読み書きの影響なしで測ることができます。
このことは重要で、FTPなどファイル転送型の測定では、ディスクの読み書きの能力が、通信能力を超えていることを確認したうえでないと「通信のみの能力」を計ったことになりません。大きなファイルを読み出し、ネットワークを介して異なるディスクに書き込むときは、ディスクからの読み出し速度や書き込み速度が通信速度より遅くなることがあります。
ファイルの転送速度の測定としては、FTPは適していますが、通信能力を測るにはファイルの読み書き能力が影響することを忘れてはいけません。通信経路に1Mbpsの回線を経由するなど、隘路があり、その区間の速度が、ディスク装置の読み出し、書き出し速度より十分に遅い場合にはFTPの速度はほぼ通信能力を表すことになります。高速かつ大容量データの場合はディスク装置の能力の考慮が必須です。
ttcpを使うとその考慮が不要になり、かつ実伝送データの伝送速度を知ることができます。実伝送データとは、EthernetフレームやTCP/IPフレームに必要なデータ量を含まない、ttcpがデータとして送受信したものです。ファイル転送するときは、ファイルの大きさに相当します。
■NetBSDでのttcpコマンドのヘルプ
bash-2.05$ ttcp
Usage: ttcp -t [-options] host [ <in ]
out]
Common options:
-l ## length of bufs read from or written to network (default 8192)
-u use UDP instead of TCP
-p ## port number to send to or listen at (default 5001)
-s -t: source a pattern to network
-r: sink (discard) all data from network
-A align the start of buffers to this modulus (default 16384)
-O start buffers at this offset from the modulus (default 0)
-v verbose: print more statistics
-d set SO_DEBUG socket option
-b ## set socket buffer size (if supported)
-f X format for rate: k,K = kilo{bit,byte}; m,M = mega; g,G = giga
Options specific to -t:
-n## number of source bufs written to network (default 2048)
-D don't buffer TCP writes (sets TCP_NODELAY socket option)
Options specific to -r:
-B for -s, only output full blocks as specified by -l (for TAR)
-T "touch": access each byte as it's read
bash-2.05$