Định dạng đầu ra CSV Iperf


9

Nếu tôi sử dụng iperf với các đối số -y C và -r để kiểm tra chuyển hai chiều và xuất nó dưới dạng CSV.

Tôi nhận được một số đầu ra nhưng vấn đề là tôi không biết tên cột là gì. Ví dụ: nó hiển thị ba hàng dữ liệu nhưng tôi không biết nên gửi cái nào tương ứng và cái nào sẽ nhận.

Các cột khác tôi có thể đoán, nhưng tôi muốn chắc chắn hơn.

Tôi không thể tìm thấy tài liệu này ở bất cứ đâu!

Câu trả lời:


10

Các lĩnh vực là

dấu thời gian, source_address, source_port, Destination_address, Destination_port, distance, transfer_bytes, bits_per_second

Tôi đã suy luận điều này bằng cách nhìn vào

$ iperf -c localhost -r
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to localhost, TCP port 5001
TCP window size:  648 KByte (default)
------------------------------------------------------------
[  5] local 127.0.0.1 port 54401 connected with 127.0.0.1 port 5001
[  4] local 127.0.0.1 port 5001 connected with 127.0.0.1 port 54401
[ ID] Interval       Transfer     Bandwidth
[  5]  0.0-10.0 sec  50.3 GBytes  43.2 Gbits/sec
[  4]  0.0-10.0 sec  50.3 GBytes  43.2 Gbits/sec

$ iperf -c localhost -r -y C
20140114124826,127.0.0.1,54402,127.0.0.1,5001,5,0.0-10.0,52551090176,42041052917
20140114124826,127.0.0.1,5001,127.0.0.1,54402,4,0.0-10.0,52551090200,41999020136

EDIT: Bạn có thể tìm thấy mã nguồn có liên quan ở đây :

// TCP Reporting
printf( reportCSV_bw_format,
timestamp,
(stats->reserved_delay == NULL ? ",,," : stats->reserved_delay),
stats->transferID,
stats->startTime,
stats->endTime,
stats->TotalLen,
speed);
} else {
// UDP Reporting
printf( reportCSV_bw_jitter_loss_format,
timestamp,
(stats->reserved_delay == NULL ? ",,," : stats->reserved_delay),
stats->transferID,
stats->startTime,
stats->endTime,
stats->TotalLen,
speed,
stats->jitter*1000.0,
stats->cntError,
stats->cntDatagrams,
(100.0 * stats->cntError) / stats->cntDatagrams, stats->cntOutofOrder );
} 

1

Nhìn vào trường thứ 6 giả sử "," (dấu phẩy) là dấu phân cách trường. Sau đó nhìn vào những dòng này ở đây:

Server listening on TCP port 5001
------------------------------------------------------------
Client connecting to localhost, TCP port 5001

[ 5] local 127.0.0.1 port 54401 connected with 127.0.0.1 port 5001 [ 4] local 127.0.0.1 port 5001 connected with 127.0.0.1 port 54401 [ ID] Interval Transfer Bandwidth [ 5] 0.0-10.0 sec 50.3 GBytes 43.2 Gbits/sec [ 4] 0.0-10.0 sec 50.3 GBytes 43.2 Gbits/sec

"5" biểu thị kết nối máy khách -> máy chủ, sau đó "4" biểu thị kết nối "máy chủ -> máy khách" (nhìn vào các cổng nguồn / đích để cho biết, trong ví dụ cụ thể này được đưa ra bởi "sciurus".


1

ngày và giờ, IP nguồn, cổng nguồn, IP đích, cổng đích, số tiến trình iperf, khoảng thời gian, lượng dữ liệu được truyền (byte), băng thông (bit trên giây), jitter (mili giây), số lượng datagram bị mất, tổng số của datagram được gửi, mất phần trăm, số lượng datagram nhận được không theo thứ tự

Tôi đã nhận được thông tin trên từ:

http://www.jb.man.ac.uk/~jcullen/code/python/iperf_tests.py


1

Câu trả lời được chấp nhận bỏ qua một trường lẻ: trường xuất hiện sau cặp cổng IP + nguồn và đích:

timestamp,
source_address,
source_port,
destination_address,
destination_port,
XXX,                  <---- this one
interval,
transferred_bytes,
bits_per_second

Mã trong câu trả lời được chấp nhận cho biết điều này xuất phát từ transferIDbiến. Một số câu trả lời khác ở đây dường như lập luận rằng nó đại diện cho một định danh kết nối hoặc hướng kết nối. Tuy nhiên, việc lặn nhanh qua mã cho biết transferIDxuất phát từ một biến toàn cục có tên groupID. Nó được khởi tạo thành 0:

// Global ID that we increment to be used 
// as identifier for SUM reports
int groupID = 0;

Tuy nhiên, một grep nhanh thông qua mã dường như chỉ ra rằng nó được tăng và giảm rất nhiều, rất khó hiểu. Dường như không có bất kỳ hằng số xác định nào nói lên ý nghĩa của nó. Kiểm tra thủ công ( iperf version 2.0.9 (9 Sept 2016) pthreads) cho thấy số đang được sử dụng lại giữa các kết nối. Vì vậy, tôi đoán đạo đức của câu chuyện là ... bỏ qua con số đó? Hoặc sử dụng iperf3.


0

Dưới đây là bản demo đơn giản sử dụng các giá trị CSV và chạy trong vòng kiểm tra xem có bps nào được đáp ứng không.

Tôi cũng tìm thấy có một trường bổ sung từ các câu trả lời ở trên có giá trị 3/4/5. 4 và 5 dường như là hướng. 3 Tôi không chắc nó có nghĩa gì. Dù sao, trong trường hợp này giúp:

#!/usr/bin/python

import sys
import subprocess
from subprocess import Popen

def runProcess(exe):
    p = subprocess.Popen(exe, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    while(True):
      retcode = p.poll() #returns None while subprocess is running
      line = p.stdout.readline()
      yield line
      if(retcode is not None):
        break

#
# do an iperf to a peer and check the bps calculated is at least
# what we asked for
#
def peer_run_until_target_bps_not_met (peer, sample_period, target_bps):

    debug = 0
    target_kbps = target_bps / 1024.0
    target_mbps = target_bps / (1024.0 * 1024.0)
    cmd = "iperf -c %s -t %d -i %d -y C" % (peer, sample_period, sample_period)

    while (True):
        bps=0
        for line in runProcess(cmd.split()):
            if line == "":
                break

            if (debug):
                print "timestamp           %s" % line.split(',')[0]
                print "source_address      %s" % line.split(',')[1]
                print "source_port         %s" % line.split(',')[2]
                print "destination_address %s" % line.split(',')[3]
                print "destination_port    %s" % line.split(',')[4]

                #
                # "3" ???
                # "5" indicates client -> server connection,
                # "4" indicates "server -> client"
                #
                print "direction           %s" % line.split(',')[5]

                print "interval            %s" % line.split(',')[6]
                print "transferred_bytes   %s" % line.split(',')[7]
                print "bits_per_second     %s" % line.split(',')[8]

            transferred_bytes = float(line.split(',')[7])
            bps = (transferred_bytes * 8) / float(sample_period)

        kbps = bps / 1024.0
        mbps = bps / (1024.0 * 1024.0)
        print "OK: %12.2f bps / %10.2f Kbps / %10.2f Mbps (target %-10.2f Mbps)" % (bps, kbps, mbps, target_mbps)

        if (bps < target_bps):
            print "FAILED: need %.2f bps / %.2fKbps / %.2f Mbps" % \
        (target_bps, target_kbps, target_mbps)
            return

peer_run_until_target_bps_not_met("10.2.0.0", 5, 0.2 * 1024 * 1024) # 10 Mbps
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.