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