Iperf CSV çıkış biçimi


10

Çift yönlü aktarımı test etmek ve bunu CSV olarak dışa aktarmak için -per C ve -r değişkenleriyle iperf kullanırsam.

Biraz çıktı alıyorum ama sorun sütun isimlerinin ne olduğunu bilmiyorum. Örneğin, üç veri satırı gösterir, ancak hangisinin gönderileceğini ve hangisinin alınacağını bilmiyorum.

Tahmin edebileceğim diğer sütunlar, ama eminim.

Bu belgeyi hiçbir yerde belgelendiremiyorum!

Yanıtlar:


10

Alanlar

zaman damgası, kaynak adres, source_port, hedef adres, destination_port, aralık, transferred_bytes, bits_per_second

Şuna bakarak çıkarım yaptım

$ 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: İlgili kaynak kodunu burada bulabilirsiniz :

// 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

Kabul edilen cevap tek bir alanı atlar: kaynak ve hedef IP + port çiftlerinden sonra gelen cevap:

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

Kabul edilen cevaptaki kod bunun transferIDdeğişkenden geldiğini söylüyor . Buradaki diğer cevapların bazıları, bir bağlantı tanımlayıcısını veya bağlantı yönünü temsil ettiğini iddia ediyor gibi görünüyor. Bununla birlikte, kod boyunca hızlı bir dalış, transferIDadlı global bir değişkenin geldiğini gösterir groupID. Bu edilir başlatıldı sıfıra:

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

Bununla birlikte, kod yoluyla hızlı bir grep, çok kafa karıştırıcı olduğunu, çok kafa karıştırıldığını ve azaldığını gösteriyor. Ne anlama geldiğini söyleyen tanımlı sabitler yok gibi görünüyor. Manuel test ( iperf version 2.0.9 (9 Sept 2016) pthreads) bağlantılar arasında yeniden kullanılan sayıyı gösterir. Öyleyse hikayenin ahlaki ... bu sayıyı görmezden geliyor mu? Veya iperf3 kullanın.


1

6. alana, "," (virgül) bir alan ayırıcısı olduğunu varsayarak bakın. O zaman şu satırlara bakın:

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", istemci -> sunucu bağlantısını belirtir, ardından "4", "sunucu -> istemci" bağlantısını belirtir ("sciurus" tarafından verilen bu örnekte söylemek için kaynak / hedef bağlantı noktalarına bakın.


1

tarih ve saat, kaynak IP, kaynak bağlantı noktası, hedef IP, hedef bağlantı noktası, iperf işlem numarası, zaman aralığı, aktarılan veri miktarı (bayt), bant genişliği (saniye başına bit), titreşim (milisaniye), kayıp datagram sayısı, toplam sayı gönderilen datagramların yüzdesi, kayıp yüzdesi, sipariş dışı alınan datagram sayısı

Yukarıdaki bilgileri aldım:

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


0

Burada, CSV değerlerini kullanan ve verilen bir bps için kontrol edilen bir döngüde çalışan basit bir demo.

Ayrıca yukarıdaki cevaplardan 3/4/5 değerli bir alan daha buldum. 4 ve 5 yön gibi görünmektedir. 3 Ne anlama geldiğinden emin değilim. Her neyse, bunun yardımcı olması durumunda:

#!/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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.