Measuring Tools and Scripts » History » Version 12

GAY, Adrien, 12/15/2014 09:05 PM

1 3 Cuadro, Juan Pablo
h1. Measuring Tools
2 1 Cuadro, Juan Pablo
3 4 Cuadro, Juan Pablo
-----
4 4 Cuadro, Juan Pablo
5 3 Cuadro, Juan Pablo
h2. EL470
6 1 Cuadro, Juan Pablo
7 12 GAY, Adrien
The Newtec EL470 versions that Telecom Bretagne owns have no protocol testing capabilities. However, when in ACM mode, the ACM controller (the HUB) keeps a log file containing the modulation and coding schemes as well as bitrate and Es/N0 estimated . The log files are stored as .csv (Comma Separated Values). These are stored per six hours intervals and a log file history of the previous 24hours can be consulted. An example can be seen below:
8 1 Cuadro, Juan Pablo
9 1 Cuadro, Juan Pablo
<pre>
10 1 Cuadro, Juan Pablo
Timestamp,Demod,RqModCod,EsNo,CarrierBitrate
11 2 Cuadro, Juan Pablo
2014-12-12 15:05:19,1,16APSK-2/3,11.20,1445835
12 2 Cuadro, Juan Pablo
2014-12-12 15:05:24,1,16APSK-2/3,10.72,1324072
13 2 Cuadro, Juan Pablo
2014-12-12 15:05:28,1,16APSK-2/3,10.61,1324072
14 2 Cuadro, Juan Pablo
2014-12-12 15:05:31,1,16APSK-2/3,10.66,1324072
15 2 Cuadro, Juan Pablo
2014-12-12 15:05:34,1,8PSK-3/4,10.19,1313479
16 2 Cuadro, Juan Pablo
2014-12-12 15:05:37,1,8PSK-3/4,11.87,1313479
17 2 Cuadro, Juan Pablo
2014-12-12 15:05:41,1,8PSK-3/4,10.40,1313479
18 2 Cuadro, Juan Pablo
2014-12-12 15:06:47,1,QPSK-5/6,6.93,884389
19 2 Cuadro, Juan Pablo
2014-12-12 15:06:51,1,QPSK-5/6,8.18,884389
20 2 Cuadro, Juan Pablo
2014-12-12 15:06:56,1,QPSK-5/6,7.02,825503
21 1 Cuadro, Juan Pablo
</pre>
22 1 Cuadro, Juan Pablo
23 2 Cuadro, Juan Pablo
It is unclear though what the logging frequency is. We have determined that this rate depends on the rate at which Es/N0 estimates change. From the csv file we can extract the following information:
24 1 Cuadro, Juan Pablo
25 1 Cuadro, Juan Pablo
* Timestamp (in seconds)
26 1 Cuadro, Juan Pablo
* Modcod parameter (modulation + coding rate)
27 1 Cuadro, Juan Pablo
* Estimate of E ~s~ / N ~0~
28 1 Cuadro, Juan Pablo
* Information bitrate (in bps)
29 1 Cuadro, Juan Pablo
30 9 Cuadro, Juan Pablo
This log file can be accessed through in the FlexACM controller tab. It is the button labeled Controller Log:
31 9 Cuadro, Juan Pablo
32 10 Cuadro, Juan Pablo
p=. !{width: 70%}FlexController.png!
33 9 Cuadro, Juan Pablo
34 9 Cuadro, Juan Pablo
A much simpler way though is to use the following link:
35 9 Cuadro, Juan Pablo
36 9 Cuadro, Juan Pablo
@http://192.168.88.100/cgi-bin/pegui-cgi/cli/cgi+acmcdem?filename=acmcdem.csv@
37 9 Cuadro, Juan Pablo
38 1 Cuadro, Juan Pablo
h2. Traffic generation and capture
39 1 Cuadro, Juan Pablo
40 8 Cuadro, Juan Pablo
In order to measure performance at the application level we will use _Iperf_. _Iperf_ is a tool to generate streams of TCP and UDP traffic as well as measuring throughput and other statistics. It has a client and server functionality, and can measure the throughput between the two ends. For more information and download links as well as documentation check Iperf3's website "here":http://software.es.net/iperf/. In order to have a finer control over the values obtained, we will capture all traffic using _tcpdump_ and perform an offline calculation of throughput using pcaptput.py.
41 3 Cuadro, Juan Pablo
42 3 Cuadro, Juan Pablo
notice. We will generate a UDP data stream in order to test throughput.
43 3 Cuadro, Juan Pablo
44 3 Cuadro, Juan Pablo
To setup Iperf we will have to launch it on both the HUB PC (as client) and Station PC (as server). Since the HUB PC will be the one sending packets it has to be setup as a server. Likewise, the Station PC must be setup as a server.
45 3 Cuadro, Juan Pablo
46 3 Cuadro, Juan Pablo
<pre><code class="Terminal">
47 3 Cuadro, Juan Pablo
# STATION PC LISTENING ON PORT 5201
48 3 Cuadro, Juan Pablo
49 8 Cuadro, Juan Pablo
$ iperf3 -s -u -i1 -p 5201
50 3 Cuadro, Juan Pablo
------------------------------------------------------------
51 3 Cuadro, Juan Pablo
Server listening on UDP port 5201
52 3 Cuadro, Juan Pablo
Receiving 1470 byte datagrams
53 3 Cuadro, Juan Pablo
UDP buffer size:  192 KByte (default)
54 3 Cuadro, Juan Pablo
------------------------------------------------------------
55 3 Cuadro, Juan Pablo
</code></pre>
56 3 Cuadro, Juan Pablo
57 3 Cuadro, Juan Pablo
<pre><code class="Terminal">
58 3 Cuadro, Juan Pablo
# HUB PC STARTS UDP DATA STREAM DES_PORT = 5201
59 3 Cuadro, Juan Pablo
60 8 Cuadro, Juan Pablo
$ iperf3 -c 10.0.0.130 -u -t <duration in secs> -b <bandwidth> -l <udp size> -p 5201
61 3 Cuadro, Juan Pablo
------------------------------------------------------------
62 3 Cuadro, Juan Pablo
Client connecting to 10.0.0.130, UDP port 5201
63 3 Cuadro, Juan Pablo
Sending <udp size>  byte datagrams
64 3 Cuadro, Juan Pablo
UDP buffer size: 9.00 KByte (default)
65 3 Cuadro, Juan Pablo
------------------------------------------------------------
66 3 Cuadro, Juan Pablo
</code></pre>
67 3 Cuadro, Juan Pablo
68 3 Cuadro, Juan Pablo
At the same time the Station PC must capture all incoming traffic, we will use the following command:
69 1 Cuadro, Juan Pablo
70 3 Cuadro, Juan Pablo
<pre><code class="Terminal">
71 3 Cuadro, Juan Pablo
# CAPTURE INCOMING TRAFFIC
72 8 Cuadro, Juan Pablo
73 3 Cuadro, Juan Pablo
$ tcpdump -w output_file_name.pcap
74 3 Cuadro, Juan Pablo
</code></pre>
75 3 Cuadro, Juan Pablo
76 5 Cuadro, Juan Pablo
77 5 Cuadro, Juan Pablo
78 3 Cuadro, Juan Pablo
h1. Scripts
79 4 Cuadro, Juan Pablo
80 4 Cuadro, Juan Pablo
-----
81 4 Cuadro, Juan Pablo
82 3 Cuadro, Juan Pablo
83 7 Cuadro, Juan Pablo
In order to process obtained data we have created multiple scripts to parse and display results. Please download attachment:measurements.zip inside you will find measurements taken in the course of this project as well as well as the following scripts:
84 3 Cuadro, Juan Pablo
85 3 Cuadro, Juan Pablo
* *pcaptput.py* : Calculates throughput metrics from .pcap file.
86 3 Cuadro, Juan Pablo
* *bulk_pcaptput* : Bash script to run pcaptput.py on all data and generate .tput files.
87 3 Cuadro, Juan Pablo
* *ConsolidateRun.m* : MATLAB class to import and consolidate .pcap as well as .tput data.
88 3 Cuadro, Juan Pablo
* *bulk_consolidate_results.m* : MATLAB script to generate all graphs in this wiki.
89 3 Cuadro, Juan Pablo
90 3 Cuadro, Juan Pablo
There is also README for further clarification.
91 3 Cuadro, Juan Pablo
 
92 3 Cuadro, Juan Pablo
h2. pcaptput.py
93 3 Cuadro, Juan Pablo
94 3 Cuadro, Juan Pablo
_pcaptput.py_ is a small python script we wrote in order to calculate application (UDP) throughput  as well as layer 3 end-to-end throughput considering only IP packets (header + payload). It uses the "dpkt":http://code.google.com/p/dpkt/. library which is a "fast, simple packet creation / parsing, with definitions for the basic TCP/IP protocols" Python library. 
95 3 Cuadro, Juan Pablo
96 3 Cuadro, Juan Pablo
<pre><code class="Python">
97 3 Cuadro, Juan Pablo
#!/usr/bin/python2.6
98 3 Cuadro, Juan Pablo
99 3 Cuadro, Juan Pablo
# pcaptput.py
100 3 Cuadro, Juan Pablo
101 3 Cuadro, Juan Pablo
import sys, dpkt
102 3 Cuadro, Juan Pablo
if len(sys.argv) != 2:
103 3 Cuadro, Juan Pablo
	raise ValueError('.pcap file needs to be specified.')
104 3 Cuadro, Juan Pablo
105 3 Cuadro, Juan Pablo
filename = sys.argv[1];
106 3 Cuadro, Juan Pablo
udpPort = 5201
107 3 Cuadro, Juan Pablo
tRes = 1
108 3 Cuadro, Juan Pablo
periodn = 0
109 3 Cuadro, Juan Pablo
baseTimeStamp = 0
110 3 Cuadro, Juan Pablo
iter = 0
111 3 Cuadro, Juan Pablo
# Total IP packet counter
112 3 Cuadro, Juan Pablo
ipBitCount = 0
113 3 Cuadro, Juan Pablo
# UDP payload counter
114 3 Cuadro, Juan Pablo
udpBitCount = 0
115 3 Cuadro, Juan Pablo
print 'Time[s]', 'IP-Throughput[bps]', 'UDP-Throughput[bps]'
116 3 Cuadro, Juan Pablo
for timeStamp, buf in dpkt.pcap.Reader(open(filename, 'r')):
117 3 Cuadro, Juan Pablo
	iter += 1
118 3 Cuadro, Juan Pablo
	if iter == 1:
119 3 Cuadro, Juan Pablo
		baseTimeStamp = timeStamp
120 3 Cuadro, Juan Pablo
	# Get ethernet frame
121 3 Cuadro, Juan Pablo
	eth = dpkt.ethernet.Ethernet(buf)
122 3 Cuadro, Juan Pablo
	# Check for pure IP traffic only (no ARP packets)
123 3 Cuadro, Juan Pablo
	if type(eth.data) != dpkt.ip.IP:
124 3 Cuadro, Juan Pablo
		continue
125 3 Cuadro, Juan Pablo
	ip = eth.data
126 3 Cuadro, Juan Pablo
	ts = timeStamp - baseTimeStamp
127 3 Cuadro, Juan Pablo
	# Histogram bins
128 3 Cuadro, Juan Pablo
	if ts >= periodn * tRes:
129 3 Cuadro, Juan Pablo
		print periodn * tRes, ipBitCount / tRes, udpBitCount / tRes
130 3 Cuadro, Juan Pablo
		periodn += 1
131 3 Cuadro, Juan Pablo
		udpBitCount = 0
132 3 Cuadro, Juan Pablo
		ipBitCount = 0
133 3 Cuadro, Juan Pablo
	# Counters
134 3 Cuadro, Juan Pablo
	ipBitCount += ip.len * 8
135 3 Cuadro, Juan Pablo
	if isinstance(ip.data, dpkt.udp.UDP) and (udpPort == ip.data.dport):
136 3 Cuadro, Juan Pablo
		udpBitCount += ip.data.ulen * 8
137 3 Cuadro, Juan Pablo
</code></pre>
138 3 Cuadro, Juan Pablo
139 3 Cuadro, Juan Pablo
Usage is as follows:
140 3 Cuadro, Juan Pablo
141 3 Cuadro, Juan Pablo
<pre><code class="Terminal">
142 3 Cuadro, Juan Pablo
$ ./pcaptput.py input.pcap > output.tput
143 3 Cuadro, Juan Pablo
144 3 Cuadro, Juan Pablo
Time[s] IP-Throughput[bps] UDP-Throughput[bps]
145 3 Cuadro, Juan Pablo
0 0 0
146 3 Cuadro, Juan Pablo
1 4688 0
147 3 Cuadro, Juan Pablo
2 3984 96
148 3 Cuadro, Juan Pablo
3 754720 742944
149 3 Cuadro, Juan Pablo
4 775552 763872
150 3 Cuadro, Juan Pablo
5 860544 847584
151 3 Cuadro, Juan Pablo
6 903040 889440
152 3 Cuadro, Juan Pablo
7 1019904 1004544
153 3 Cuadro, Juan Pablo
8 1083648 1067328
154 3 Cuadro, Juan Pablo
9 1221760 1203360
155 3 Cuadro, Juan Pablo
10 1296128 1276608
156 3 Cuadro, Juan Pablo
11 903040 889440
157 3 Cuadro, Juan Pablo
12 764928 753408
158 3 Cuadro, Juan Pablo
13 807424 795264
159 3 Cuadro, Juan Pablo
14 860544 847584
160 3 Cuadro, Juan Pablo
15 956160 941760
161 3 Cuadro, Juan Pablo
16 988032 973152
162 3 Cuadro, Juan Pablo
</code></pre>