bug-fix: ipv6 ml2 file should use variable
[yardstick.git] / yardstick / benchmark / scenarios / networking / pktgen_dpdk_latency_benchmark.bash
1 !/bin/sh
2
3 set -e
4
5 # Commandline arguments
6 SRC_IP=$1         # source IP address of sender in VM A
7 DST_IP=$2         # destination IP address of receiver in VM A
8 FWD_REV_MAC=$3    # MAC address of forwarding receiver in VM B
9 FWD_SEND_MAC=$4   # MAC address of forwarding sender in VM B
10 RATE=$5           # packet rate in percentage
11 PKT_SIZE=$6       # packet size
12
13
14 load_modules()
15 {
16     if lsmod | grep "uio" &> /dev/null ; then
17     echo "uio module is loaded"
18     else
19     modprobe uio
20     fi
21
22     if lsmod | grep "igb_uio" &> /dev/null ; then
23     echo "igb_uio module is loaded"
24     else
25     insmod /dpdk/x86_64-native-linuxapp-gcc/kmod/igb_uio.ko
26     fi
27
28     if lsmod | grep "rte_kni" &> /dev/null ; then
29     echo "rte_kni module is loaded"
30     else
31     insmod /dpdk/x86_64-native-linuxapp-gcc/kmod/rte_kni.ko
32     fi
33 }
34
35 change_permissions()
36 {
37     chmod 777 /sys/bus/pci/drivers/virtio-pci/*
38     chmod 777 /sys/bus/pci/drivers/igb_uio/*
39 }
40
41 add_interface_to_dpdk(){
42     interfaces=$(lspci |grep Eth |tail -n +2 |awk '{print $1}')
43     /dpdk/tools/dpdk-devbind.py --bind=igb_uio $interfaces
44
45 }
46
47 create_pktgen_config_lua()
48 {
49     touch /home/ubuntu/pktgen_latency.lua
50     lua_file="/home/ubuntu/pktgen_latency.lua"
51     chmod 777 $lua_file
52     echo $lua_file
53
54     cat << EOF > "/home/ubuntu/pktgen_latency.lua"
55 package.path = package.path ..";?.lua;test/?.lua;app/?.lua;"
56
57  -- require "Pktgen";
58 function pktgen_config()
59
60   pktgen.screen("off");
61
62   pktgen.set_ipaddr("0", "dst", "$DST_IP");
63   pktgen.set_ipaddr("0", "src", "$SRC_IP/24");
64   pktgen.set_mac("0", "$FWD_REV_MAC");
65   pktgen.set_ipaddr("1", "dst", "$SRC_IP");
66   pktgen.set_ipaddr("1", "src", "$DST_IP/24");
67   pktgen.set_mac("1", "$FWD_SEND_MAC");
68   pktgen.set(0, "rate", $RATE);
69   pktgen.set(0, "size", $PKT_SIZE);
70   pktgen.set_proto("all", "udp");
71   pktgen.latency("all","enable");
72   pktgen.latency("all","on");
73
74   pktgen.start(0);
75   end
76
77 pktgen_config()
78 EOF
79 }
80
81
82 create_expect_file()
83 {
84     touch /home/ubuntu/pktgen.exp
85     expect_file="/home/ubuntu/pktgen.exp"
86     chmod 777 $expect_file
87     echo $expect_file
88
89     cat << 'EOF' > "/home/ubuntu/pktgen.exp"
90 #!/usr/bin/expect
91
92 set blacklist  [lindex $argv 0]
93 set log [lindex $argv 1]
94 set result {}
95 set timeout 15
96 spawn ./app/app/x86_64-native-linuxapp-gcc/pktgen -c 0x07 -n 4 -b $blacklist -- -P -m "1.0, 2.1" -f /home/ubuntu/pktgen_latency.lua
97 expect "Pktgen>"
98 send "\n"
99 expect "Pktgen>"
100 send "screen on\n"
101 expect "Pktgen>"
102 set count 10
103 while { $count } {
104     send "page latency\n"
105     expect {
106         timeout { send "\n" }
107         -regexp {..*} {
108             set result "${result}$expect_out(0,string)"
109             set timeout 1
110             exp_continue
111          }
112         "Pktgen>"
113     }
114     set count [expr $count-1]
115 }
116 send "stop 0\n"
117 expect "Pktgen>"
118 send "quit\n"
119 expect "#"
120
121 set file [ open $log w ]
122 puts $file $result
123 EOF
124
125 }
126
127 run_pktgen()
128 {
129     blacklist=$(lspci |grep Eth |awk '{print $1}'|head -1)
130     cd /pktgen-dpdk
131     touch /home/ubuntu/result.log
132     result_log="/home/ubuntu/result.log"
133     sudo expect /home/ubuntu/pktgen.exp $blacklist $result_log
134 }
135
136 main()
137 {
138     load_modules
139     change_permissions
140     create_pktgen_config_lua
141     create_expect_file
142     add_interface_to_dpdk
143     run_pktgen
144 }
145
146 main
147