たとえば を実行するとiperf -c 178.62.60.141 -fm -b 100m -u -t 30 -i 10
、10 秒間隔ごとに、Iperf クライアントは転送したデータ量をメビバイト単位で出力します。
root@vserver:~# iperf -c 178.62.60.141 -fm -b 100m -u -t 30 -i 10
WARNING: option -b implies udp testing
------------------------------------------------------------
Client connecting to 178.62.60.141, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size: 0.22 MByte (default)
------------------------------------------------------------
[ 3] local 146.185.187.148 port 37660 connected with 178.62.60.141 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 119 MBytes 100 Mbits/sec
[ 3] 10.0-20.0 sec 119 MBytes 100 Mbits/sec
[ 3] 20.0-30.0 sec 119 MBytes 100 Mbits/sec
[ 3] 0.0-30.0 sec 358 MBytes 100 Mbits/sec
[ 3] Sent 255661 datagrams
TCP についても同様です。転送されたデータと帯域幅が各間隔の終了後に出力され、転送されたデータが「-b」フラグで指定された帯域幅よりも少し多いか少ない場合があるという事実は、Iperf クライアントが実際に何らかの方法で送信されたデータをカウントし、 「-b」(帯域幅) フラグの引数を出力するだけではありません。それでも、Iperf クライアントは送信するデータ量をどのようにカウントするのでしょうか? で10%のパケット損失を導入するとtc
、実行iperf -c 178.62.60.141 -fm -b 100m -u -t 30 -i 10
してから、Iperfクライアントが送信したと考えたパケット(Iperfクライアント出力から)と、実際に配線されたパケットの量(からip -s link show dev eth0
出力)、その後、Iperf クライアントは、実際には 230k をわずかに超えたのに、250k を超えるデータグラムを送信したと考えました。Token Bucket Filter キューイング規則でトラフィックをポリシングした場合、まったく同じことが当てはまりますtc
。つまり、Iperf クライアントによると、実際のトラフィック レートはポリサーによってポリシングされていましたが、100Mbps でトラフィックを送信しました。
Iperf のソース コード ( http://ftp.de.debian.org/debian/pool/main/i/iperf/iperf_2.0.5.orig.tar.gz ) を分析しようとすると、私が理解しているように、クライアント接続は、通常の connect() システム コールを使用して src ディレクトリの Client.cpp ファイルにコーディングされていますか? レポートは Reporter.c ファイルでコーディングされていると思いますが、複雑すぎて理解できません.. Iperf 2.x クライアントが送信したトラフィック量をどのように検出するのか (コード サンプルを使用して) 説明してもらえますか?