Home | History | Annotate | Download | only in dctcp
      1 #!/bin/sh
      2 # Copyright (c) 2015 Oracle and/or its affiliates. All Rights Reserved.
      3 #
      4 # This program is free software; you can redistribute it and/or
      5 # modify it under the terms of the GNU General Public License as
      6 # published by the Free Software Foundation; either version 2 of
      7 # the License, or (at your option) any later version.
      8 #
      9 # This program is distributed in the hope that it would be useful,
     10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     12 # GNU General Public License for more details.
     13 #
     14 # You should have received a copy of the GNU General Public License
     15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
     16 #
     17 # Author: Alexey Kodanev <alexey.kodanev (at] oracle.com>
     18 
     19 TCID=dctcp01
     20 TST_TOTAL=1
     21 TST_CLEANUP="cleanup"
     22 def_alg="cubic"
     23 prev_alg=
     24 
     25 . test_net.sh
     26 
     27 set_cong_alg()
     28 {
     29 	local alg=$1
     30 	tst_resm TINFO "setting $alg"
     31 
     32 	tst_set_sysctl net.ipv4.tcp_congestion_control $alg safe
     33 }
     34 
     35 cleanup()
     36 {
     37 	if [ "$prev_cong_ctl" ]; then
     38 		tst_set_sysctl net.ipv4.tcp_congestion_control $prev_alg
     39 	fi
     40 	tst_rmdir
     41 	tc qdisc del dev $(tst_iface) root netem loss 0.03% ecn
     42 }
     43 
     44 setup()
     45 {
     46 	if tst_kvcmp -lt "3.18"; then
     47 		tst_brkm TCONF "test requires kernel 3.18 or newer"
     48 	fi
     49 
     50 	tst_require_root
     51 	tst_check_cmds ip sysctl tc
     52 
     53 	tst_resm TINFO "emulate congestion with packet loss 0.03% and ECN"
     54 	tc qdisc add dev $(tst_iface) root netem loss 0.03% ecn > /dev/null 2>&1
     55 	if [ $? -ne 0 ]; then
     56 		tst_brkm TCONF "netem doesn't support ECN"
     57 	fi
     58 
     59 	tst_tmpdir
     60 
     61 	prev_alg="$(sysctl -n net.ipv4.tcp_congestion_control)"
     62 }
     63 
     64 test_run()
     65 {
     66 	tst_resm TINFO "compare '$def_alg' and 'dctcp' congestion alg. results"
     67 
     68 	set_cong_alg "$def_alg"
     69 
     70 	tst_netload -H $(tst_ipaddr rhost)
     71 	local res0="$(cat tst_netload.res)"
     72 
     73 	set_cong_alg "dctcp"
     74 
     75 	tst_netload -H $(tst_ipaddr rhost)
     76 	local res1="$(cat tst_netload.res)"
     77 
     78 	local per=$(( $res0 * 100 / $res1 - 100 ))
     79 
     80 	if [ "$per" -lt "10" ]; then
     81 		tst_resm TFAIL "dctcp performance $per %"
     82 	else
     83 		tst_resm TPASS "dctcp performance $per %"
     84 	fi
     85 }
     86 
     87 setup
     88 
     89 test_run
     90 
     91 tst_exit
     92