[[mscom_network_start]]

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
mscom_network_start [2014/04/01 16:42]
beckmanf [Master Communications - Protocols and Networks] typo
mscom_network_start [2016/03/16 09:01] (current)
beckmanf [Setup of the Linux test platform / USB Stick] - removed student laptop
Line 5: Line 5:
 Details regarding tcp testing are here: [[http://​www.linuxfoundation.org/​collaborate/​workgroups/​networking/​tcp_testing]]. Details regarding tcp testing are here: [[http://​www.linuxfoundation.org/​collaborate/​workgroups/​networking/​tcp_testing]].
  
 +==== Setup of the Linux test platform ====
  
-==== Setup Ubuntu installation for Network analysis ​==== +Network tests are done with a network of Ubuntu Linux computers which are connected via an ethernet switch.  
- +==== Laboratory expirements ​====
-The network throughput analysis is done with different tools.  +
- +
-  * iperf Performance Measurement +
-  * Wireshark Packet Tracing +
-  * [[http://​www.linuxfoundation.org/​collaborate/​workgroups/​networking/​netem|netem]] Network emulation +
-  * tcp_probe Kernel module (see [[https://​git.kernel.org/​cgit/​linux/​kernel/​git/​torvalds/​linux.git/​tree/​net/​ipv4/​tcp_probe.c|tcp_probe.c]] +
- +
-<​code>​ +
-sudo apt-get install iperf wireshark gnuplot +
-</​code>​ +
  
 +  * [[mscom_lab1|Master COM Lab 1 - Ethernet Measurements]]
 +  * [[mscom_lab2|Master COM Lab 2 - tftp Measurements]]
 ==== TCP Throughput test with iperf ==== ==== TCP Throughput test with iperf ====
  
Line 62: Line 54:
 sudo tc qdisc add dev eth0 parent 1:1 handle 10: tbf rate 256kbit buffer 1600 limit 300 sudo tc qdisc add dev eth0 parent 1:1 handle 10: tbf rate 256kbit buffer 1600 limit 300
 tc -s qdisc tc -s qdisc
 +</​code>​
 +
 +==== Analyzing and setting ethernet card parameters ====
 +
 +Ethernet card parameters can be configured with ethtool. ​
 +
 +<​code>​
 +fritz@ubuntu:​~$ ethtool eth0
 +Settings for eth0:
 + Supported ports: [ TP ]
 + Supported link modes: ​  ​10baseT/​Half 10baseT/​Full ​
 +                         100baseT/​Half 100baseT/​Full ​
 +                         1000baseT/​Full ​
 + Supported pause frame use: No
 + Supports auto-negotiation:​ Yes
 + Advertised link modes: ​ 10baseT/​Half 10baseT/​Full ​
 +                         100baseT/​Half 100baseT/​Full ​
 +                         1000baseT/​Full ​
 + Advertised pause frame use: No
 + Advertised auto-negotiation:​ Yes
 + Speed: 1000Mb/s
 + Duplex: Full
 + Port: Twisted Pair
 + PHYAD: 0
 + Transceiver:​ internal
 + Auto-negotiation:​ on
 + MDI-X: off
 +Cannot get wake-on-lan settings: Operation not permitted
 + Current message level: 0x00000007 (7)
 +        drv probe link
 + Link detected: yes
 +fritz@ubuntu:​~$ ​
 +</​code>​
 +
 +ethtool DEVICENAME will show you the current settings of the ethernet card. In the example above the link speed is for example 1GBit/s. In order to modify the speed settings and set it to 100 MBit/s full duplex mode do:
 +
 +<​code>​
 +sudo ethtool -s eth0 speed 100 duplex full
 +</​code>​
 +
 +Modern network cards can do TCP segmentation in hardware. This is called TCP segmentation offloading (TSO), which offloads the packet segmentation from the cpu. To show the offload parameters do: 
 +
 +<​code>​
 +fritz@ubuntu:​~$ ethtool -k eth0
 +Offload parameters for eth0:
 +rx-checksumming:​ off
 +tx-checksumming:​ on
 +scatter-gather:​ on
 +tcp-segmentation-offload:​ on
 +udp-fragmentation-offload:​ off
 +generic-segmentation-offload:​ on
 +generic-receive-offload:​ on
 +large-receive-offload:​ off
 +rx-vlan-offload:​ on
 +tx-vlan-offload:​ on
 +ntuple-filters:​ off
 +receive-hashing:​ off
 +fritz@ubuntu:​~$ ​
 +</​code>​
 +
 +In the example above the tcp segmentation offloading is activated. This will result in wireshark showing longer TCP packets than allowed according to Maximum Transmit Unit size (MTU) which is typically 1500 Bytes. You can check the MTU value with "​ifconfig"​. ​
 +
 +In order to switch TSO offloading off, you can do
 +
 +<​code>​
 +sudo ethtool -K eth0 tso off
 </​code>​ </​code>​
  
 ==== Adding tcpprobe traffic log ==== ==== Adding tcpprobe traffic log ====
 +
 +The tcp_probe module can trace the state of a tcp connection. ​
 +
 +<​code>​
 +sudo modprobe tcp_probe port=5001
 +sudo chmod a+r /​proc/​net/​tcpprobe ​
 +</​code>​
 +
 +In order to store the log data in file test.log:
 +
 +<​code>​
 +cat /​proc/​net/​tcpprobe > test.log ​
 +</​code>​
 +
 +tcp_probe only adds a log entry, when the contention window size changes. In order to have a log entry for every received packet
 +
 +<​code>​
 +sudo modprobe tcp_probe port=5001 full=1
 +</​code>​
 +
 +The Ubuntu 12.04 LTS is based on linux kernel 3.11. The tcp_probe kernel module source code can be viewed on the [[https://​git.kernel.org/​cgit/​linux/​kernel/​git/​torvalds/​linux.git/​tree/​net/​ipv4/​tcp_probe.c?​id=v3.11|linux kernel git server]].
 +
 +To unload the module: ​
 +
 +<​code>​
 +sudo modprobe -r tcp_probe
 +</​code>​
 +
 +The log file from tcp_probe contains lines with the log information
 +
 +<​code>​
 +1           ​2 ​                   3                   ​4 ​ 5          6          7  8          9     10
 +7.768727538 192.168.178.33:​51715 192.168.178.27:​5001 32 0xe656e892 0xe6568e12 16 2147483647 42248 1
 +
 +1: Time in seconds
 +2: Source IP:Port
 +3: Destination IP:Port
 +4: Packet length in bytes
 +5: snd_nxt: Sequence Number of the next packet to send
 +6: snd_una: Sequence Number of the first unacknowledged packet ​
 +7: snd_cwnd: Contention Window ​
 +8: ssthr: Slow Start Threshold (-1 => not known yet)
 +9: snd_wnd: Send Window size in Bytes
 +10: srtt: Averaged round trip time estimation
 +</​code>​
 +
 +The data from the log file can be plotted with gnu plot
 +
 +<​code>​
 +gnuplot
 +gnuplot> plot "​test.log"​ using 1:7 title "​cwnd",​ "​test.log"​ using 1:($8 > 20000000 ? 0 : $8) title "​ssthr"​
 +</​code>​
 +
 +==== TCP configuration ====
 +
 +=== Local memory restrictions ===
 +Set the maximum window sizes for tcp connections to 512000 Bytes. ​
 +
 +<​code>​
 +sudo sh -c "echo 512000 > /​proc/​sys/​net/​core/​wmem_max"​
 +sudo sh -c "echo 512000 > /​proc/​sys/​net/​core/​wmem_default"​
 +sudo sh -c "echo 512000 > /​proc/​sys/​net/​core/​rmem_max"​
 +sudo sh -c "echo 512000 > /​proc/​sys/​net/​core/​rmem_default"​
 +sudo sh -c "echo 512000 512000 512000 > /​proc/​sys/​net/​ipv4/​tcp_wmem"​
 +sudo sh -c "echo 512000 512000 512000 > /​proc/​sys/​net/​ipv4/​tcp_rmem"​
 +</​code>​
 +
 +=== Initial TCP contention window size ===
 +
 +The following section shows how to change the initial contention window size to to 1 MSS. 
 +
 +<​code>​
 +fritz@ubuntu:​~$ ip route show
 +default via 192.168.178.1 dev eth0  proto static ​
 +169.254.0.0/​16 dev eth0  scope link  metric 1000 
 +192.168.178.0/​24 dev eth0  proto kernel ​ scope link  src 192.168.178.33 ​ metric 1 
 +fritz@ubuntu:​~$ sudo ip route change default via 192.168.178.1 dev eth0 proto static initcwnd 1
 +fritz@ubuntu:​~$ ip route show
 +default via 192.168.178.1 dev eth0  proto static ​ initcwnd 1
 +169.254.0.0/​16 dev eth0  scope link  metric 1000 
 +192.168.178.0/​24 dev eth0  proto kernel ​ scope link  src 192.168.178.33 ​ metric 1 
 +fritz@ubuntu:​~$ ​
 +</​code>​
 +
 +=== TCP Congestion avoidance algorithm selection ===
 +
 +The linux kernel provides several algorithms for tcp congestion avoidance. The following code shows how to figure out the available algorithms (here cubic and reno) and set and control the setting. In this example the congestion avoidance algorithm is switched from "​cubic"​ to "​reno"​. ​
 +
 +<​code>​
 +fritz$ cd /​proc/​sys/​net/​ipv4/​
 +fritz$ cat tcp_available_congestion_control ​
 +cubic reno
 +fritz$ cat tcp_congestion_control ​
 +cubic
 +fritz$ sudo sh -c "echo reno > tcp_congestion_control"​
 +fritz$ cat tcp_congestion_control ​
 +reno
 +</​code>​
  
  
  
  • mscom_network_start.1396363330.txt.gz
  • Last modified: 2014/04/01 16:42
  • by beckmanf