Format keluaran CSV Iperf

9

Jika saya menggunakan iperf dengan argumen -y C dan -r untuk menguji transfer dua arah dan mengekspornya sebagai CSV.

Saya mendapatkan beberapa output tetapi masalahnya adalah saya tidak tahu apa nama kolomnya. Sebagai contoh itu menunjukkan tiga baris data tetapi saya tidak tahu yang sesuai untuk mengirim dan mana yang harus diterima.

Kolom lain yang bisa saya tebak, tapi saya lebih suka yakin.

Saya tidak dapat menemukan ini didokumentasikan di mana pun!

pengguna350325
sumber

Jawaban:

10

Fieldnya adalah

timestamp, source_address, source_port, destination_address, destination_port, interval, ditransfer_bytes, bits_per_second

Saya menyimpulkan ini dengan melihat

$ 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: Anda dapat menemukan kode sumber yang relevan di sini :

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

Lihatlah bidang ke-6 dengan asumsi "," (koma) menjadi pemisah bidang. Kemudian lihat garis-garis ini di sini:

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" menunjukkan klien -> koneksi server, kemudian "4" menunjukkan koneksi "server -> client" (lihat port sumber / tujuan untuk memberi tahu, dalam contoh khusus ini diberikan oleh "sciurus".

Jacek Lakomiec
sumber
1

tanggal dan waktu, IP sumber, port sumber, IP tujuan, port tujuan, nomor proses iperf, interval waktu, jumlah data yang ditransfer (byte), bandwidth (bit per detik), jitter (milidetik), jumlah datagram yang hilang, jumlah total dari datagram yang dikirim, persentase kehilangan, jumlah datagram yang diterima rusak

Saya mendapat informasi di atas dari:

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

Pemenang
sumber
1

Jawaban yang diterima melompati satu bidang ganjil: yang muncul setelah pasangan IP + port sumber dan tujuan:

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

Kode dalam jawaban yang diterima mengatakan ini berasal dari transferIDvariabel. Beberapa jawaban lain di sini tampaknya berpendapat bahwa itu mewakili pengenal koneksi atau arah koneksi. Namun, penyelaman cepat melalui kode menunjukkan bahwa itu transferIDberasal dari variabel global bernama groupID. Ini diinisialisasi ke nol:

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

Namun, grep cepat melalui kode tampaknya menunjukkan bahwa itu bertambah dan berkurang banyak, sangat membingungkan. Sepertinya tidak ada konstanta yang didefinisikan yang mengatakan apa artinya. Pengujian manual ( iperf version 2.0.9 (9 Sept 2016) pthreads) menunjukkan nomor yang digunakan kembali di antara koneksi. Jadi saya kira moral dari cerita ini adalah ... abaikan nomor itu? Atau gunakan iperf3.

brenns10
sumber
0

Berikut ini adalah demo sederhana menggunakan nilai CSV dan berjalan dalam satu lingkaran memeriksa bps yang diberikan terpenuhi.

Saya juga menemukan ada hadiah bidang tambahan dari jawaban di atas yang bernilai 3/4/5. 4 dan 5 tampaknya menjadi arah. 3 Saya tidak yakin apa artinya. Bagaimanapun, jika ini membantu:

#!/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
Neil McGill
sumber