Commit 88e3d382 authored by nikaeinn's avatar nikaeinn
Browse files

* update the build scripts

* add oai (oaisim, lte-softmodem) perfroamnce evaulation scripts


git-svn-id: http://svn.eurecom.fr/openair4G/trunk@6618 818b1a75-f10b-46b9-bf7c-635c3b92a50f
parent 9320540d
......@@ -54,7 +54,7 @@ def execute(oai, user, pw, host,logfile,logdir,debug):
try:
log.start()
test = '00'
name = 'Perf oai.dlsim.sanity'
name = 'Perf oai.ulsim.sanity'
conf = '-a -A AWGN -n 100'
diag = 'ulsim is not running normally (Segmentation fault / Exiting / FATAL), debugging might be needed'
trace = logdir + '/log_' + host + case + test + '_1.txt;'
......
......@@ -185,7 +185,7 @@ class openair(core):
print "Error removing oai network driver module:", val
def driver(self,oai,user,pw):
pwd = oai.send_recv('pwd')
#pwd = oai.send_recv('pwd')
oai.send('cd $OPENAIR_TARGETS;')
oai.send('cd SIMU/USER;')
try:
......
......@@ -1047,6 +1047,14 @@ install_nas_tools() {
$OPENAIRCN_DIR/NAS/EURECOM-NAS/bin/usim_data --print
}
install_nasmesh(){
echo_success "LOAD NASMESH IP DRIVER FOR UE AND eNB"
(cd $OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL && make clean && make)
(cd $OPENAIR2_DIR && make clean && make nasmesh_netlink_address_fix.ko)
$SUDO rmmod nasmesh
$SUDO insmod $OPENAIR2_DIR/NAS/DRIVER/MESH/nasmesh.ko
}
##################################
# create HSS DB
################################
......@@ -1158,6 +1166,21 @@ print_help(){
echo_success "-x | --xforms : Enable xforms (default disabled)"
echo_success "-z | --defaults : Set the default build options"
}
print_help_perf(){
echo_success "Name : perf_oai generate traffic and evaluate the performance "
echo_success "Usage: perf_oai.bash -l ITG "
echo_success "-l | --perf-app : Set Performance evaluation app: ITGS, ITGD,PING, OTG-OAISIM, OTG-CBA, (default PING)"
echo_success "-m | --owd : enable D-ITG one-way-delay meter (default disabled)"
echo_success "-e | --duration : set the duration of the experiment (default 60000ms)"
echo_success "-i | --idt-dist : set the distribution of the inter-departure time: CONSTANT, UNIFORM,EXPONENTIAL (default CONSTANT)"
echo_success "-s | --ps-dist : set the distribution of the inter-departure time (default CONSTANT, available options: UNIFORM,EXPONENTIAL)"
echo_success "-d | --dst : set the destination address (default 127.0.0.1)"
echo_success "-p | --dst-port : set the destination address (default NONE)"
echo_success "-t | --test : enable test mode to validate the functionality (default disabled)"
echo_success "-k | --keep-log-file : keep the log files (default disabled)"
}
###############################
## echo and family
###############################
......
......@@ -49,13 +49,13 @@ declare OAI_DB_ADMIN_USER_NAME="root"
declare OAI_DB_ADMIN_USER_PASSWORD="linux"
#only one could be set at the time
declare BUILD_LTE="" # ENB, EPC, HSS, NONE
declare BUILD_LTE="ENB" # ENB, EPC, HSS
declare HW="EXMIMO" # EXMIMO, USRP, ETHERNET, NONE
declare TARGET="ALL" # ALL, SOFTMODEM, OAISIM, UNISIM, NONE
declare ENB_S1=1
declare REL="REL8" # REL8, REL10
declare RT="NONE" # RTAI, RT_PREMPT or RT_DISABLED, NONE
declare RT="NONE" # RTAI, RT_PREMPT, NONE
declare DEBUG=0
declare CONFIG_FILE=" "
declare CONFIG_FILE_ACCESS_OK=0
......@@ -725,6 +725,7 @@ fi
############################################
# run
############################################
if [ $RUN -ne 0 ]; then
echo_info "11. Running ..."
cd $OPENAIR_TARGETS/bin
......@@ -750,7 +751,7 @@ if [ $RUN -ne 0 ]; then
elif [ $TARGET == "OAISIM" ]; then
if [ $ENB_S1 -eq 0 ]; then
echo_error "TODO: LOAD NASMESH IP DRIVER FOR UE AND eNB"
install_nasmesh
else
# prepare NAS for UE
if [ ! -f .ue.nvram ]; then
......
################################################################################
# OpenAirInterface
# Copyright(c) 1999 - 2015 Eurecom
#
# OpenAirInterface is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) anylater version.
#
#
# OpenAirInterface is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with OpenAirInterface.The full GNU General Public License is
# included in this distribution in the file called "COPYING". If not,
# see <http://www.gnu.org/licenses/>.
#
# Contact Information
# OpenAirInterface Admin: openair_admin@eurecom.fr
# OpenAirInterface Tech : openair_tech@eurecom.fr
# OpenAirInterface Dev : openair4g-devel@eurecom.fr
#
# Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
#
################################################################################
# file build_oai.bash
# brief apply a traffic generator, send traffic and measure the performance of OAI
# OTG is mainly used for OASIM and D-ITG (or iperf) for LTE-SOFTMODEM
# author Navid Nikaein
# company Eurecom
# email: navid.nikaein@eurecom.fr
# date 2015
#!/bin/bash
################################
# include helper functions
################################
THIS_SCRIPT_PATH=$(dirname $(readlink -f $0))
. $THIS_SCRIPT_PATH/build_helper.bash
check_for_root_rights
#######################################
# Default PARAMETERS
######################################
#general
declare PERF_APP="PING" # ITG, ITG_DECODE, PING, OTG,
declare TEST_MODE=0
declare KEEP_LOG_FILESNUM_PKTS=0
declare OWD="rttm"
declare DURATION=60000 # ms
declare NUM_PKTS=10000
declare KBYTES=1000 # KBYTES
declare START=0
declare DST="127.0.0.1"
declare DPORT="8999"
declare TP="UDP"
declare IDT_DIST="CONSTANT"
declare PS_DIST="CONSTANT"
#IDT
declare RATE=1000 # pkt / s
declare MIN_RATE=100
declare MAX_RATE=1000
############## script params #####################
until [ -z "$1" ]
do
case "$1" in
-c | --test)
TEST_MODE=1;
echo_info "enabling the test mode"
shift;
;;
-l | --perf-app)
PERF_APP=$2
echo_info "Setting the performance evaluation APP to $PERF_APP"
if [ $PERF_APP = "DITG" ]; then
echo_info "you need to run "
fi
shift 2;
;;
-m | --owd)
OWD="owdm"
echo_info "setting D-ITG one-way-delay meter"
shift;
;;
-e | --duration)
DURATION=$2
echo_info "Setting the traffic duration to $DURATION"
shift 2;
;;
-n | --num-pkts)
NUM_PKTS=$2
echo_info "Setting number of packets to $NUM_PKTS"
shift 2;
;;
-k | --keep-log-file)
KEEP_LOG_FILESNUM_PKTS=1
echo_info "Keep the log files"
shift;
;;
-i | --idt-dist)
IDT_DIST=$2
echo_info "setting IDT distribution to $IDT_DIST"
shift 2;
;;
-s | --ps-dist)
PS_DIST=$2
echo_info "setting PS distribution to $PS_DIST"
shift 2;
;;
-d | --dst)
DST=$2
echo_info "setting the destination address to $DST"
shift 2;
;;
-p | --dst-port)
DPORT=$2
echo_info "setting the destination port to $DPORT"
shift 2;
;;
-h | --help)
print_help_perf
exit -1
;;
*)
echo "Unknown option $1"
break ;
# unknown option
;;
esac
done
#####################
# create a bin dir
#####################
echo_info "1. Creating the results dir ..."
#rm -rf results
mkdir -m 777 -p results
exp_date=`date +%Y_%m_%d`
exp_time=`date +%H_%M_%S`
oai_exp_date="exp_date_${exp_date}"
touch results/${oai_exp_date}
touch results/perf_log.txt
chmod -f 777 results/perf_log.txt
echo "start experiment at date $exp_date time $exp_time " >> results/${oai_exp_date}
############################################
# setting and printing OAI envs, we should check here
############################################
echo_info "2. Setting the OAI PATHS ..."
set_openair_env
cecho "OPENAIR_HOME = $OPENAIR_HOME" $green
cecho "OPENAIR1_DIR = $OPENAIR1_DIR" $green
cecho "OPENAIR2_DIR = $OPENAIR2_DIR" $green
cecho "OPENAIR3_DIR = $OPENAIR3_DIR" $green
cecho "OPENAIRCN_DIR = $OPENAIRCN_DIR" $green
cecho "OPENAIR_TARGETS = $OPENAIR_TARGETS" $green
echo "OPENAIR_HOME = $OPENAIR_HOME" >> results/${oai_exp_date}
echo "OPENAIR1_DIR = $OPENAIR1_DIR" >> results/${oai_exp_date}
echo "OPENAIR2_DIR = $OPENAIR2_DIR" >> results/${oai_exp_date}
echo "OPENAIR3_DIR = $OPENAIR3_DIR" >> results/${oai_exp_date}
echo "OPENAIRCN_DIR = $OPENAIRCN_DIR" >> results/${oai_exp_date}
echo "OPENAIR_TARGETS = $OPENAIR_TARGETS" >> results/${oai_exp_date}
################################
# run ITGSEND
################################
itg_send(){
test_install_package d-itg
LOG_FILE="itg_log_template.txt"
touch results/${LOG_FILE}
if [ $TEST_MODE = 0 ] ; then
declare -a PS=(32 64 128 256 512 1024 1408)
declare -a IDT=(1 5 10 50 100 1000)
else
declare -a PS=(32 64)
declare -a IDT=(1)
fi
declare PS_LEN=${#PS[@]}
declare IDT_LEN=${#IDT[@]}
#echo_info "PS_LEN is $PS_LEN, IDT_LEN is $IDT_LEN"
declare i=0
declare j=0
declare e=0
# send traffic
for idt in ${IDT[@]}; do
# echo_info "IDT is set to $idt i is $i"
if [ $i -lt $IDT_LEN ]; then
let i++;
fi
if [ $IDT_DIST = "CONSTANT" ]; then
IDT_OPT="-C $idt "
fi
if [ $IDT_DIST = "UNIFORM" ]; then
IDT_OPT="-U $idt ${IDT[i]} "
fi
if [ $IDT_DIST = "EXPONENTIAL" ]; then
IDT_OPT="-E $idt "
fi
for ps in ${PS[@]}; do
# echo_info "PS is $ps j is $j"
if [ $j -lt $PS_LEN ]; then
let j++;
fi
if [ $PS_DIST = "CONSTANT" ]; then
PS_OPT="-c $ps "
fi
if [ $PS_DIST = "UNIFORM" ]; then
PS_OPT="-u $ps ${PS[j]} "
fi
if [ $PS_DIST = "EXPONENTIAL" ]; then
PS_OPT="-e $ps "
fi
start=$(date +%s)
RECV_FILE="recv_log_${IDT_DIST}_idt${idt}_${PS_DIST}_ps${ps}_${OWD}_${TP}"
echo_info "Start test_$i.$j:: ITGSend -a $DST $IDT_OPT $PS_OPT -m $OWD -d $START -T $TP -t $DURATION -x $RECV_FILE -l "
echo "Start test_$i.$j:: ITGSend -a $DST $IDT_OPT $PS_OPT -m $OWD -d $START -T $TP -t $DURATION -x $RECV_FILE -l " >> results/${oai_exp_date}
#sleep 1
ITGSend -a $DST $IDT_OPT $PS_OPT -m $OWD -d $START -T $TP -t $DURATION -x $RECV_FILE -l
itg_status=$?
end=$(date +%s)
diff=$(( $end - $start ))
if [ $itg_status = 0 ] ; then
echo_success "[$end] test_$i.$j passed"
echo "[$end] test_$i.$j passed" >> ./results/$LOG_FILE
STATUS="PASSED"
else
let e++;
echo_error "[$end] test_$i.$j failed :: D-ITG return exit code $itg_status"
echo "[$end]test_$i.$j failed :: ITG return exit code $itg_status" >> ./results/$LOG_FILE
STATUS="FAILED"
fi
echo_info "End test_$i.$j:: runtime: $diff"
echo "End test_$i.$j:: runtime: $diff" >> results/${oai_exp_date}
done
done
}
itg_decode(){
declare i=0
declare j=0
if [ $TEST_MODE = 0 ] ; then
declare -a PS=(32 64 128 256 512 1024 1408)
declare -a IDT=(1 5 10 50 100 1000)
else
declare -a PS=(32 64)
declare -a IDT=(1)
fi
for idt in ${IDT[@]}; do
for ps in ${PS[@]}; do
RECV_FILE="recv_log_${IDT_DIST}_idt${idt}_${PS_DIST}_ps${ps}_${OWD}_${TP}"
OUTPUT_FILE="results_${IDT_DIST}_idt${idt}_${PS_DIST}_ps${ps}_${OWD}_${TP}.txt"
OCTAVE_FILE="results_${IDT_DIST}_idt${idt}_${PS_DIST}_ps${ps}_${OWD}_${TP}.."
echo_info "decode test_$i.$j: ITGDec $RECV_FILE -v -t -l $OUTPUT_FILE -o $OCTAVE_FILE"
ITGDec $RECV_FILE -v -t -l $OUTPUT_FILE
done
done
}
ping_stats(){
status="failed"
failedhosts=""
# add ip / hostname separated by white space
if [ $TEST_MODE = 0 ]; then
declare COUNT=100
declare -a HOSTS=($DST)
declare -a PS=(64 768 2048 4096 8192)
declare -a IDT=(1 .8 .4 .2)
else
declare COUNT=10
declare -a HOSTS=(localhost)
declare -a PS=(64 2048)
declare -a IDT=(.5)
fi
declare i=0
declare j=0
declare k=0
start_exp=$(date +%s)
for host in ${HOSTS[@]}; do
let i++;
let j=0;
OUTPUT_FILE="rtt_host${host}.csv"
touch results/${OUTPUT_FILE}
for idt in ${IDT[@]}; do
let j++;
let k=0;
for ps in ${PS[@]}; do
let k++;
# | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
start=$(date +%s)
LOG_FILE="recv_log_host${host}_idt${idt}_ps${ps}.txt"
touch results/${LOG_FILE}
echo_info "Start test_$i.$j.$k:: ping -c $COUNT -q -U $host -s $ps -i $idt"
echo "Start test_$i.$j.$k:: ping -c $COUNT -q -U $host -s $ps -i $idt" >> results/${oai_exp_date}
$(ping -c $COUNT -q -U $host -s $ps -i $idt 1>&2 >> ./results/$LOG_FILE )
end=$(date +%s)
diff=$(( $end - $start ))
count=$(cat ./results/$LOG_FILE | awk -F, '/received/{print $2*1}')
latency=$(cat ./results/$LOG_FILE | tail -1 |cut -f2- -d=)
MIN=$(cut -f1 -d/ <<< $latency)
AVG=$(cut -f2 -d/ <<< $latency)
MAX=$(cut -f3 -d/ <<< $latency)
MDEV=$(cut -f4 -d/ <<< $latency | cut -f1 -d" ")
UNIT=$(cut -f2 -d" " <<< $latency)
echo_success "Latency:: count $count min $MIN avg $AVG max $MAX mdev $MDEV ($UNIT)"
echo "$idt;$ps;$COUNT;$count;$MIN;$AVG;$MAX;$MDEV;" >> ./results/$OUTPUT_FILE
if [ $count -eq 0 ]; then
failedhosts="$failedhosts $host"
status="failed"
else
status="passed"
fi
echo_info "End test_$i.$j.$k:: runtime: $diff :: status $status "
echo "End test_$i.$j.$k:: runtime: $diff :; status $status" >> results/${oai_exp_date}
done
done
done
end_exp=$(date +%s)
diff_exp=$(( $end_exp - $start_exp ))
let total_tests=i*j*k;
echo_info "total tests: $total_tests for a duration $diff_exp (s)"
}
oaisim_otg_stats(){
# install the required packages
test_install_package octave >> results/perf_log.txt 2>&1
# set paths to the required binaries and check if the required binaries are available
OAISIM="bin/oaisim"
OTGPLOT="$OPENAIR2_DIR/UTIL/OTG/OTGplot"
PS2PDF="ps2pdf"
if [ ! -f $OAISIM ]; then
echo_info "3.1 compiling OAISIM ($OPENAIR_TARGETS/build_oai.bash -t OAISIM -b -D -c)"
($OPENAIR_TARGETS/build_oai.bash -t OAISIM -b -D -c >> results/perf_log.txt 2>&1 )
build_stats=$?
if [ $build_stats != 0 ] ; then
echo_error "$OAISIM cannot be built, check results/perf_log.txt file"
exit $?
fi
else
echo_info "ensure that OAISIM is not built with the S1 interface"
fi
(install_nasmesh >> results/perf_log.txt 2>&1 )
if [ ! -f $OTGPLOT ]; then
echo_error "$OTGPLOT not found"
exit $?
fi
# Set the default Parameters
ABSTRACTION=1
#FRAME_TYPE=0 # FDD=0, TDD =1, 2,3,4,5,6
AGGR_RESULT=1
STATUS="PASSED"
EXTRA_STATS=0
declare NUM_UES=7
if [ $TEST_MODE = 0 ]; then
declare -a TEMPLATES=(120 121 122 123 124 125 126 127 128 129 130)
declare -a FRAME_TYPE=(0 3)
declare -a METRICS=(latency jitter goodput)
declare -a RB=(25 50 100)
else
declare -a TEMPLATES=(125)
declare -a FRAME_TYPE=(3)
declare -a METRICS=(latency)
declare -a RB=(25)
fi
if [ $ABSTRACTION = 1 ]; then
OPT="-a "
fi
declare num_cols=0
let num_cols=NUM_UES+1
if [ $AGGR_RESULT = 1 ]; then
COLUMN="[$num_cols:$num_cols]"
else
COLUMN="[1:$num_cols]"
fi
declare i=0
declare j=0
declare k=0
declare e=0
start_exp=$(date +%s)
for template in ${TEMPLATES[@]}; do
let i++;
let j=0;
for frame in ${FRAME_TYPE[@]}; do
let j++;
let k=0;
if [ $frame = 0 ]; then
OPT="$OPT -F "
else
OPT="$OPT -C $frame "
fi
for rb in ${RB[@]}; do
let k++;
start=$(date +%s)
LOG_FILE="oaisim_log_template${template}_frame${frame}_rb${rb}.txt"
touch results/${LOG_FILE}
echo_info "[$start] Start test_$i.$j.$k:: $OAISIM $OPT -R $RB -c $template"
echo "Start test_$i.$j.$k:: $OAISIM $OPT -R $RB -c $template" >> results/${oai_exp_date}
#sleep 1
$OAISIM $OPT -R $RB -c $template 1>&2 >> ./results/$LOG_FILE
# store exit status
oai_status=$?
end=$(date +%s)
diff=$(( $end - $start ))
#check the oaisim exit status
if [ $oai_status = 0 ] ; then
echo_success "[$end] test_$i.$j.$k passed"
echo "[$end] test_$i.$j.$k passed" >> ./results/$LOG_FILE
STATUS="PASSED"
else
let e++;
echo_error "[$end] test_$i.$j.$k failed :: OAISIM return exit code $oai_status (remove bin/oaisim)"
echo "[$end]test_$i.$j.$k failed :: OAISIM return exit code $oai_status" >> ./results/$LOG_FILE
STATUS="FAILED"
fi
# create the curves
for metric in ${METRICS[@]}; do
if [ $metric = "goodput" ]; then
unit="(kB/s)"
else
unit="(ms)"
fi
if [ -f /tmp/otg_${metric}.dat ]; then
export TITLE="Application $metric $unit"
cp /tmp/otg_${metric}.dat ./results/otg-${metric}-template${template}-frame${frame}-rb${rb}.dat
echo_info "$OTGPLOT ./results/otg-${metric}-template${template}-frame${frame}-rb${rb}.dat $COLUMN"
echo "$OTGPLOT ./results/otg-${metric}-template${template}-frame${frame}-rb${rb}.dat $COLUMN" >> results/${oai_exp_date}
$($OTGPLOT ./results/otg-${metric}-template${template}-frame${frame}-rb${rb}.dat $COLUMN 1>&2 >> ./results/$LOG_FILE )
$($PS2PDF -dOptimize=true -dEmbedAllFonts=true ./otg-${metric}-template${template}-frame${frame}-rb${rb}.eps )
# remove the first line of the file
echo "$(tail -n+2 ./results/otg-${metric}-template${template}-frame${frame}-rb${rb}.dat)" > ./results/otg-${metric}-template${template}-frame${frame}-rb${rb}.dat
else
echo_error "file /tmp/otg_${metric}.dat does not exists"
fi
done
if [ $KEEP_LOG_FILESNUM_PKTS = 0 ]; then
rm -f ./results/$LOG_FILE
fi
mv *.eps ./results/
mv *.pdf ./results/
mv /tmp/otg.log ./results/otg-template${template}-frame${frame}-rb${rb}.log
echo_info "End test_$i.$j.$k:: runtime: $diff :: status $STATUS"
echo "End test_$i.$j.$k:: runtime: $diff :: status $STATUS" >> results/${oai_exp_date}
done
done
done
end_exp=$(date +%s)
diff_exp=$(( $end_exp - $start_exp ))
let total_tests=i*j*k;
echo_info "total tests: $total_tests for a duration $diff_exp (s) error ($e)"
echo "total tests: $total_tests for a duration $diff_exp (s) error ($e)" >> results/${oai_exp_date}
}
cba_otg_stats(){
test_install_package octave
ABSTRACTION=1
FRAME_TYPE=0 # FDD=0, TDD =1
AGGR_RESULT=1
#OAISIM="$OPENAIR_TARGETS/bin/oaisim"
OAISIM="bin/oaisim.cba" # to compile: make cleanall; make Rel10=1 CBA=1 in targets/SIMU/USER
OTGPLOT="$OPENAIR2_DIR/UTIL/OTG/OTGplot"
PS2PDF="ps2pdf"
STATUS="PASSED"