รูปแบบเอาต์พุต Iperf CSV


10

ถ้าฉันใช้ iperf กับ -y C และ -r อาร์กิวเมนต์เพื่อทดสอบการถ่ายโอนแบบสองทิศทางและส่งออกเป็น CSV

ฉันได้รับผลลัพธ์บางส่วน แต่ปัญหาคือฉันไม่รู้ว่าชื่อคอลัมน์คืออะไร ตัวอย่างเช่นมันแสดงข้อมูลสามแถว แต่ฉันไม่รู้ว่าสอดคล้องกับการส่งและรับอะไร

คอลัมน์อื่นที่ฉันเดาได้ แต่ฉันค่อนข้างจะแน่ใจ

ฉันไม่พบเอกสารนี้ที่ใดก็ได้!

คำตอบ:


10

สาขาที่มี

ประทับเวลา source_address, source_port, destination_address, destination_port, ช่วง transferred_bytes, bits_per_second

ฉันอนุมานได้โดยดูที่

$ 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

แก้ไข: คุณสามารถค้นหาซอร์สโค้ดที่เกี่ยวข้องได้ที่นี่ :

// 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 );
} 

2

คำตอบที่ยอมรับจะข้ามหนึ่งช่องคี่: ฟิลด์ที่มาหลังคู่ของพอร์ตต้นทาง + ปลายทาง IP +:

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

รหัสในคำตอบที่ยอมรับบอกว่าสิ่งนี้มาจากtransferIDตัวแปร คำตอบอื่น ๆ ที่นี่ดูเหมือนจะแย้งว่ามันหมายถึงตัวระบุการเชื่อมต่อหรือทิศทางการเชื่อมต่อ อย่างไรก็ตามการดำน้ำอย่างรวดเร็วผ่านรหัสบ่งชี้ว่ามาจากตัวแปรทั่วโลกชื่อtransferID groupIDมันถูกเริ่มต้นที่จะเป็นศูนย์:

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

อย่างไรก็ตาม grep อย่างรวดเร็วผ่านโค้ดดูเหมือนจะบ่งชี้ว่ามันเพิ่มขึ้นและลดลงมากสับสนมาก ดูเหมือนจะไม่มีค่าคงที่ใด ๆ ที่พูดถึงความหมาย การทดสอบด้วยตนเอง ( iperf version 2.0.9 (9 Sept 2016) pthreads) แสดงจำนวนที่ถูกใช้ซ้ำระหว่างการเชื่อมต่อ ดังนั้นฉันเดาว่าคุณธรรมของเรื่องราวคือ ... ไม่สนใจตัวเลขนั้น? หรือใช้ iperf3


1

ดูฟิลด์ที่ 6 โดยสมมติว่า "," (เครื่องหมายจุลภาค) เป็นตัวคั่นฟิลด์ จากนั้นดูที่บรรทัดเหล่านี้ที่นี่:

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" หมายถึงไคลเอนต์ -> การเชื่อมต่อเซิร์ฟเวอร์จากนั้น "4" หมายถึงการเชื่อมต่อ "เซิร์ฟเวอร์ -> ไคลเอนต์" (ดูที่พอร์ตต้นทาง / ปลายทางที่จะบอกในตัวอย่างเฉพาะนี้ที่กำหนดโดย "sciurus"


1

วันที่และเวลา, IP ต้นทาง, พอร์ตต้นทาง, IP ปลายทาง, พอร์ตปลายทาง, หมายเลขกระบวนการ iperf, ช่วงเวลา, จำนวนข้อมูลที่ถ่ายโอน (ไบต์), แบนด์วิดท์ (บิตต่อวินาที), jitter (มิลลิวินาที), จำนวนดาต้าแกรมสูญหาย, จำนวนทั้งหมด ของดาตาแกรมที่ส่ง, การสูญเสียเปอร์เซ็นต์, จำนวนดาตาแกรมที่ได้รับจากการสั่งซื้อ

ฉันได้รับข้อมูลข้างต้นจาก:

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


0

นี่คือตัวอย่างง่ายๆโดยใช้ค่า CSV และเรียกใช้ในการตรวจสอบลูปสำหรับ bps ที่ระบุ

ฉันยังพบว่ามีเขตข้อมูลเพิ่มเติมจากคำตอบข้างต้นซึ่งเป็นค่า 3/4/5 4 และ 5 ดูเหมือนจะเป็นทิศทาง 3 ฉันไม่แน่ใจว่ามันหมายถึงอะไร อย่างไรก็ตามในกรณีนี้จะช่วยให้:

#!/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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.