aboutsummaryrefslogtreecommitdiffstats
path: root/stacks/lwip_stack/release/script/nstack_fun.sh
diff options
context:
space:
mode:
Diffstat (limited to 'stacks/lwip_stack/release/script/nstack_fun.sh')
-rwxr-xr-xstacks/lwip_stack/release/script/nstack_fun.sh596
1 files changed, 0 insertions, 596 deletions
diff --git a/stacks/lwip_stack/release/script/nstack_fun.sh b/stacks/lwip_stack/release/script/nstack_fun.sh
deleted file mode 100755
index df62e1e..0000000
--- a/stacks/lwip_stack/release/script/nstack_fun.sh
+++ /dev/null
@@ -1,596 +0,0 @@
-#!/bin/bash
-
-check_file_size()
-{
- if [ -n "$1" ]&&[ -f "$1" ]
- then
- local log_size=`stat -c %s $1`
- if [ ${log_size} -gt $MAX_LOG_FILE_SIZE ]
- then
- mv $1 $1.bk
- fi
- fi
-}
-
-log()
-{
- check_file_size $LOG_FILE
-
- #1 line number
- local printStr="$2"
- cur_date=`date +'%m%d %H:%M:%S.%6N' -u`
- pid=$$
- file=$0
- local log_head="I${cur_date} ${file##*/}:$1 ${pid}]"
-
- printf "${log_head} $printStr\n" >> $LOG_FILE 2>/dev/null
-}
-
-get_call_stack()
-{
- local proc_name="$1"
- log $LINENO "gdb info in call stack:"
- gdb -batch -ex "t a a bt" -p `pidof $proc_name`>> $LOG_FILE 2>/dev/null
- log $LINENO "top in call stack:"
- top -H -p `pidof $proc_name` -n 1 -b >> $LOG_FILE 2>/dev/null
- log $LINENO "mpstat in call stack:"
- mpstat -A >> $LOG_FILE 2>/dev/null
-}
-
-gdb_set()
-{
- local mod="$1"
- if [ "$mod" = "stop" ];then
- gdb -batch -ex "set g_hbt_switch=0" -p `pidof nStackMain`
- gdb -batch -ex "set g_hbt_switch=0" -p `pidof nStackMaster`
- log $LINENO "gdb stop"
- else
- gdb -batch -ex "set g_hbt_switch=1" -p `pidof nStackMain`
- gdb -batch -ex "set g_hbt_switch=1" -p `pidof nStackMaster`
- log $LINENO "gdb start"
- fi
-}
-
-get_core_mask()
-{
- local sys_core=`cat /proc/cpuinfo | grep processor | wc -l`
- log $LINENO "system has ${sys_core} cores"
- #if sys_core too large 2^$sys_core will overflow; so reset sys_core; z00203440 20170323
- if [ $sys_core -gt 8 ]
- then
- sys_core=8
- log $LINENO "sys_core too large reset to ${sys_core}"
- fi
-
- base=`echo | awk -v ex=$sys_core 'BEGIN{a=2^ex; print a}'`
- local temp=`expr $base - 1`
- printf %X $temp
- return $sys_core
-}
-
-init_log_file()
-{
- if [ -n $LOG_FILE_DIR ]&&[ ! -f $LOG_FILE_DIR ]
- then
- sudo mkdir -p $LOG_FILE_DIR
- fi
-
- check_file_size $LOG_FILE
-
- if [ -n $DPDK_FILE_DIR ]&&[ ! -f $DPDK_FILE_DIR ]
- then
- sudo mkdir -p $DPDK_FILE_DIR
- fi
-
- check_file_size $DPDK_FILE
-
- #must create the directory under the current user account
- if [ -n $RUNTIME_DIR ]&&[ ! -f $RUNTIME_DIR ]
- then
- mkdir -p $RUNTIME_DIR
- fi
-}
-
-delete_log_file() {
- if [ -n $RUNNING_FILE_DIR ]&&[ -d $RUNNING_FILE_DIR ]&&[ -n $RUNNING_FILE_NAME ]; then
- rm -rf $RUNNING_FILE_DIR/*${RUNNING_FILE_NAME}*
- fi
- if [ -n $RUNNING_FILE_DIR ]&&[ -d $RUNNING_FILE_DIR ]&&[ -n $OPERATION_FILE_NAME ]; then
- rm -rf $RUNNING_FILE_DIR/*${OPERATION_FILE_NAME}*
- fi
- if [ -n $RUNNING_FILE_DIR ]&&[ -d $RUNNING_FILE_DIR ]&&[ -n $GLOG_FAILURE_FILE_NAME ]; then
- rm -rf $RUNNING_FILE_DIR/*${GLOG_FAILURE_FILE_NAME}*
- fi
- if [ -n $RUNNING_FILE_DIR ]&&[ -d $RUNNING_FILE_DIR ]&&[ -n $NSTACK_FAILURE_FILE_NAME ]; then
- rm -rf $RUNNING_FILE_DIR/*${NSTACK_FAILURE_FILE_NAME}*
- fi
- if [ -n $MASTER_FILE_DIR ]&&[ -d $MASTER_FILE_DIR ]&&[ -n $MASTER_FILE_NAME ]; then
- rm -rf $MASTER_FILE_DIR/*${MASTER_FILE_NAME}*
- fi
- if [ -n $MASTER_FILE_DIR ]&&[ -d $MASTER_FILE_DIR ]&&[ -n $GLOG_FAILURE_FILE_NAME ]; then
- rm -rf $MASTER_FILE_DIR/*${GLOG_FAILURE_FILE_NAME}*
- fi
- if [ -n $MASTER_FILE_DIR ]&&[ -d $MASTER_FILE_DIR ]&&[ -n $NSTACK_FAILURE_FILE_NAME ]; then
- rm -rf $MASTER_FILE_DIR/*${NSTACK_FAILURE_FILE_NAME}*
- fi
- if [ -n $LOG_FILE_DIR ]&&[ -d $LOG_FILE_DIR ]&&[ -n $LOG_FILE_NAME ]; then
- rm -rf $LOG_FILE_DIR/*${LOG_FILE_NAME}*
- fi
- if [ -n $DPDK_FILE_DIR ]&&[ -d $DPDK_FILE_DIR ]&&[ -n $DPDK_FILE_NAME ]; then
- rm -rf $DPDK_FILE_DIR/*${DPDK_FILE_NAME}*
- fi
- if [ -n $RUNTIME_DIR ]&&[ -d $RUNTIME_DIR ]; then
- rm -rf $RUNTIME_DIR
- fi
- if [ -n ${MASTER_EXEC_PATH} ]&&[ -d $MASTER_EXEC_PATH ]; then
- rm -rf $MASTER_EXEC_PATH
- fi
-}
-
-init_hugepage()
-{
- log $LINENO "init hugepage..."
-##############################################################
-#
-# TO DO:
-# verify the free pages carefully, but not with 1G pagesize
-#
-#############################################################
-
- #for 1G hugepage
-
- # check total hugepage number
-# local nr_pagedir=/sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages
-# if [ ! -f ${nr_pagedir} ]
-# then
-# log $LINENO "system not support 1G huge pages, exit!"
-# exit 1
-# fi
-
- # local nr_huge_pages=`cat ${nr_pagedir}`
- # if [ ${nr_huge_pages} -lt 3 ]
- # then
- # log $LINENO "total huge pages is not set correctly, current ${nr_huge_pages}, exit!"
- # exit 1
- # fi
-
- # check free hugepage number
- # local fr_pagedir=/sys/devices/system/node/node0/hugepages/hugepages-1048576kB/free_hugepages
- # if [ ! -f ${fr_pagedir} ]
- # then
- # log $LINENO "system not support 1G huge pages, exit!"
- # exit 1
- # fi
-
- # local fr_huge_pages=`cat ${fr_pagedir}`
- # if [ ${fr_huge_pages} -lt 3 ]
- # then
- # log $LINENO "free huge pages is not set correctly, current ${fr_huge_pages}, exit!"
- # lsof $HUGE_DIR >> $LOG_FILE 2>/dev/null
- # exit 1
- # fi
-
- # mount | grep $HUGE_DIR >> $LOG_FILE 2>/dev/null
- # if [ $? -eq 0 ] ; then
- # log $LINENO "$HUGE_DIR dir exist"
- # if test $(pgrep -f $1 | wc -l) -eq 0 ; then
- # log $LINENO "proccess $1 not exist and clean huge files"
- # if [ -n $HUGE_DIR ]&&[ -d $HUGE_DIR ]; then
- # rm -rf $HUGE_DIR/*
- # fi
- # else
- # log $LINENO "proccess $1 exist"
- # fi
- # else
- # log $LINENO "$HUGE_DIR not exist and create"
- # sudo mkdir -p $HUGE_DIR
- #directory right can't larger than 750
-
- # cur_user=`whoami`
- # if [ "root" != "$cur_user" ]
- # then
- # non_root_uid=`id -u $cur_user`
- # non_root_gid=`id -g $cur_user`
- # sudo mount -t hugetlbfs -o pagesize=1G,uid=$non_root_uid,gid=$non_root_gid none $HUGE_DIR >> $LOG_FILE 2>/dev/null
- # else
- # mount -t hugetlbfs -o pagesize=1G none $HUGE_DIR >> $LOG_FILE 2>/dev/null
- # fi
- # fi
-}
-
-recover_hugepage()
-{
- log $LINENO "recover hugepage..."
-
- if [ -n "$HUGE_DIR" ]&&[ -d "$HUGE_DIR" ]; then
- rm -rf $HUGE_DIR/*
- fi
-}
-
-init_network()
-{
- log $LINENO "init network..."
-
- recover_network
-
- sudo modprobe uio
-
- local script_path=$(cd "$(dirname "$0")"; pwd)
- local is_igb_uio_loaded=`lsmod | grep igb_uio | wc -l`
- if [ ${is_igb_uio_loaded} -eq 0 ]
- then
- log $LINENO "igb_uio is not installed. install it now."
- sudo insmod $DPDK_MOD_PATH/igb_uio.ko
- fi
-
- # check if there is un-recognized nic
- sudo $DPDK_TOOL_DIR/dpdk-devbind.py -s | grep -A32 "Other network" | \
- grep unused | awk -F"'" '{print $1, $2}' | while read NIC_BFS BIND_DRIVER_NAME
- do
- local TYPE_CHECK_ixgbe=`echo $BIND_DRIVER_NAME |grep "82599ES 10-Gigabit SFI/SFP+ Network Connection"|wc -l`
- local TYPE_CHECK_ixgbevf=`echo $BIND_DRIVER_NAME |grep "82599 Ethernet Controller Virtual Function"|wc -l`
- local TYPE_CHECK_vmxnet3=`echo $BIND_DRIVER_NAME |grep "VMXNET3 Ethernet Controller"|wc -l`
- local TYPE_CHECK_virtio=`echo $BIND_DRIVER_NAME |grep "Virtio network device"|wc -l`
-
- if [ $TYPE_CHECK_ixgbe -gt 0 ]; then
- sudo $DPDK_TOOL_DIR/dpdk-devbind.py --bind=ixgbe $NIC_BFS
- elif [ $TYPE_CHECK_ixgbevf -gt 0 ]; then
- sudo $DPDK_TOOL_DIR/dpdk-devbind.py --bind=ixgbevf $NIC_BFS
- elif [ $TYPE_CHECK_vmxnet3 -gt 0 ]; then
- sudo $DPDK_TOOL_DIR/dpdk-devbind.py --bind=vmxnet3 $NIC_BFS
- elif [ $TYPE_CHECK_virtio -gt 0 ]; then
- sudo $DPDK_TOOL_DIR/dpdk-devbind.py --bind=virtio-pci $NIC_BFS
- fi
-
- done
-}
-
-recover_network()
-{
- log $LINENO "recover network..."
-
- if [ -z "$DPDK_NIC_LIST_FILE" ]||[ ! -f "$DPDK_NIC_LIST_FILE" ]
- then
- log $LINENO "$DPDK_NIC_LIST_FILE is not exist. There is no nic used by nstack to unbind."
- else
- log $LINENO "The NIC(s) to unbind: "
- cat $DPDK_NIC_LIST_FILE | awk -F" '|' | drv=| unused=" '{print $1,$4}' >> $LOG_FILE 2>/dev/null
- cat $DPDK_NIC_LIST_FILE | awk -F" '|' | drv=| unused=" '{print $1,$4}' | while read NIC_BFS BIND_DRIVER_TYPE
- do
- sudo $DPDK_TOOL_DIR/dpdk-devbind.py --bind=$BIND_DRIVER_TYPE $NIC_BFS >> $LOG_FILE 2>/dev/null
- done
- rm $DPDK_NIC_LIST_FILE
- fi
-
- touch $DPDK_NIC_LIST_FILE
- chmod 600 $DPDK_NIC_LIST_FILE
-}
-
-
-check_args_main()
-{
-if [ -z $HUGE_DIR ]||[ -z $MEM_SIZE ]||[ -z $RTP_CORE_MASK ]||[ -z $SLEEP_INTERVAL ]||\
- [ -z $BIND_CPU ]||[ -z $START_TYPE ]
-then
- log $LINENO "nStackMain Args is null"
- return 1
-fi
-
-# check CORE_MASK -- see in get_core_mask()
-# check HUGE_DIR
-if [ -z $HUGE_DIR ]||[ ! -d $HUGE_DIR ]; then
- log $LINENO "HUGE_DIR="$HUGE_DIR" is invalid"
- return 1
-fi
-
-# check MEM_SIZE
-if [ $MEM_SIZE -lt 2048 ]||[ $MEM_SIZE -gt 32768 ]; then
- log $LINENO "MEM_SIZE="$MEM_SIZE" is invalid"
- return 1
-fi
-
-# check RTP_CORE_MASK
-if [ $RTP_CORE_MASK -lt 1 ]; then
- log $LINENO "RTP_CORE_MASK="$RTP_CORE_MASK" is invalid"
- return 1
-fi
-
-# check SLEEP_INTERVAL
-if [ $SLEEP_INTERVAL -lt 0 ]; then
- log $LINENO "SLEEP_INTERVAL="$SLEEP_INTERVAL" is invalid"
- return 1
-fi
-
-# check BIND_CPU
-if [ $BIND_CPU -lt 0 ]; then
- log $LINENO "BIND_CPU="$BIND_CPU" is invalid"
- return 1
-fi
-
-# check START_TYPE
-if [ $START_TYPE -lt 0 ]||[ $START_TYPE -gt 5 ]; then
- log $LINENO "START_TYPE="$START_TYPE" is invalid"
- return 1
-fi
-
-return 0
-}
-
-run_nStackMain()
-{
-
- log $LINENO "run nstack main..."
-
- sudo setcap CAP_IPC_OWNER,CAP_FOWNER,CAP_NET_ADMIN,CAP_IPC_LOCK,CAP_NET_RAW,CAP_SYS_RAWIO,CAP_SYS_ADMIN,CAP_CHOWN,CAP_SYS_NICE=eip ./bin/nStackMain 2>/dev/null
-
- local script_path=$(cd "$(dirname "$0")"; pwd)
- export NSTACK_CONFIG_PATH=${script_path}/../configure
- export LD_LIBRARY_PATH=${script_path}/lib64/:$LD_LIBRARY_PATH
- if [ "$NSTACK_LOG_ON" = "PERF" ]
- then
- export NSTACK_LOG_ON=PERF
- else
- export NSTACK_LOG_ON=INF
- fi
-
- log $LINENO "$env NSTACK_CONFIG_PATH=$NSTACK_CONFIG_PATH"
- log $LINENO "$env DPDK_TOOL_DIR=$DPDK_TOOL_DIR"
- log $LINENO "$env LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
- log $LINENO "$env DPDK_LIB_PATH=$DPDK_LIB_PATH"
- log $LINENO "./nStackMain -c $1 -n 4 --huge-dir=$2 --proc-type=primary --file-prefix nStackMain -m $3 $7 $8 stack -c $4 -sleep $5 -bind_cpu $6"
- check_file_size $DPDK_FILE
- cd ..; cd bin/
- ./nStackMain -c $1 -n 4 --huge-dir=$2 --proc-type=primary --file-prefix nStackMain -m $3 $7 $8 stack -c $4 -sleep $5 -bind_cpu $6 >> $DPDK_FILE &
-}
-
-
-stop_nStackProcess()
-{
- log $LINENO "$1 exiting..."
-
- local i=0
-
- while [ ${i} -lt $2 ]
- do
- #pid=`ps aux | grep $1 |grep -v grep| awk '{print $2}'`
- pid=`pidof $1`
- if [ "x${pid}" != "x" ]
- then
- kill -9 $pid 2>/dev/null
- else
- break
- fi
- i=`expr ${i} + 1`
- sleep 1
- done
-}
-
-stop_nStackApps()
-{
- log $LINENO "stop the apps that use the shared nstackhuge memory..."
-
- app_pid=`lsof $HUGE_DIR | awk '{print $2}'`
- if [ "x${app_pid}" != "x" ]
- then
- kill -9 ${app_pid} 2>/dev/null
- fi
-}
-
-get_nstack_bin()
-{
- local app=$1
- master_pid=`pidof $app | head -n 1`
- if [ "x${master_pid}" != "x" ];then
- sudo readlink -f "/proc/${master_pid}/exe" | sed "s/$app$//g" 2>/dev/null
- fi
-}
-
-
-
-get_abs_path()
-{
- local input_path=$1
- if [ -d "$input_path" -o -f "$input_path" ]; then
- echo "$(dirname $(readlink -e $input_path))/$(basename $input_path)"
- return 0
- fi
- echo $input_path
- return 1
-}
-
-
-
-CONFIG_FILE="nStackConfig.json"
-VAR_FILE="nstack_var.sh"
-
-modify_nstack_log_path()
-{
- if echo $1 |grep -Eq '^((/[a-zA-Z_]+[a-zA-Z0-9_-]+(/[a-zA-Z0-9_-]+)*/?)|/)$' > /dev/null
- then
- local parameter=$1
- else
- log $LINENO "the path is invalid, use the default config path!"
- return
- fi
-
- if [ ! -d $1 ]; then
- log $LINENO "the folder is not existed, use the default config!"
- return
- fi
-
- if [ ! -w $1 ]; then
- log $LINENO "the folder has no permission, use the default config!"
- return
- fi
-
- local script_path=$(cd "$(dirname "$0")"; pwd)
- local config_name=${script_path}/configure/$CONFIG_FILE
-
- if [ ! -f $config_name ]; then
- log $LINENO "$CONFIG_FILE no exit! use default config in code."
- return
- fi
-
- sed -i 's#\("stackpool_log_path": "\).*#\1'"$1"'",#g' ${config_name}
- sed -i 's#\("master_log_path": "\).*#\1'"$1"'",#g' ${config_name}
- sed -i 's#\("nstack_log_path": "\).*#\1'"$1"'",#g' ${config_name}
- sed -i 's#\("dpdk_log_path": "\).*#\1'"$1"'"#g' ${config_name}
-}
-
-modify_log_var()
-{
- local script_path=$(cd "$(dirname "$0")"; pwd)
- local config_name=${script_path}/configure/$CONFIG_FILE
-
- if [ ! -f $config_name ]; then
- log $LINENO "$CONFIG_FILE no exit! use default config in code."
- return
- fi
-
- local running_log_path=`grep -Po '"stackpool_log_path": ".*?"' $config_name | sed -n -e 's/"//gp' | awk -F' ' '{print $2}'`
- local master_log_path=`grep -Po '"master_log_path": ".*?"' $config_name | sed -n -e 's/"//gp' | awk -F' ' '{print $2}'`
- local nstack_log_path=`grep -Po '"nstack_log_path": ".*?"' $config_name | sed -n -e 's/"//gp' | awk -F' ' '{print $2}'`
- local dpdk_log_path=`grep -Po '"dpdk_log_path": ".*?"' $config_name | sed -n -e 's/"//gp' | awk -F' ' '{print $2}'`
-
-#modify the nstack_var.sh
- local var_config_name=${script_path}/script/$VAR_FILE
-
- if [ ! -f $var_config_name ]; then
- log $LINENO "$VAR_FILE not exist , exit!"
- exit 1
- fi
-
-#check the path from json if it is OK.
- if [ -n "$running_log_path" ]&&[ -w "$running_log_path" ]; then
- sed -i "s:RUNNING_FILE_DIR=.*:RUNNING_FILE_DIR=${running_log_path}:g" $var_config_name
- else
- log $LINENO "stackpool_log_path:$running_log_path in $CONFIG_FILE is invalid, use the default config!"
- fi
-
- if [ -n "$master_log_path" ]&&[ -w "$master_log_path" ]; then
- sed -i "s:MASTER_FILE_DIR=.*:MASTER_FILE_DIR=${master_log_path}:g" $var_config_name
- else
- log $LINENO "master_log_path:$master_log_path in $CONFIG_FILE is invalid, use the default config!"
- fi
-
- if [ -n "$nstack_log_path" ]&&[ -w "$nstack_log_path" ]; then
- sed -i "s:LOG_FILE_DIR=.*:LOG_FILE_DIR=${nstack_log_path}:g" $var_config_name
- else
- log $LINENO "nstack_log_path:$nstack_log_path in $CONFIG_FILE is invalid, use the default config!"
- fi
-
- if [ -n "$dpdk_log_path" ]&&[ -w "$dpdk_log_path" ]; then
- sed -i "s:DPDK_FILE_DIR=.*:DPDK_FILE_DIR=${dpdk_log_path}:g" $var_config_name
- else
- log $LINENO "dpdk_log_path:$dpdk_log_path in $CONFIG_FILE is invalid, use the default config!"
- fi
-}
-
-
-modify_local_ip_env()
-{
-
-#modify the nstack_var.sh
- local var_config_name=${script_path}/script/$VAR_FILE
-
- if [ ! -f $var_config_name ]; then
- log $LINENO "$VAR_FILE not exist , exit!"
- exit 1
- fi
-
- sed -i "s:VM_ID=.*:VM_ID=${nstack_alarm_local_ip}:g" $var_config_name 2>/dev/null
-}
-
-
-delete_pid_file()
-{
- if [ -n "$PID_FILE" ]&&[ -f "$PID_FILE" ]
- then
- rm -rf ${PID_FILE}
- fi
-}
-
-save_pid_file()
-{
- if [ ! -d ${PID_FILE_DIR} ];
- then
- sudo mkdir -p ${PID_FILE_DIR}
- chmod 750 ${PID_FILE_DIR}
- fi
-
- if [ -f ${PID_FILE} ];
- then
- cur_pid=`cat ${PID_FILE}`
- if [ ${cur_pid} != $1 ];
- then
- rm -rf ${PID_FILE}
- else
- return
- fi
- fi
-
- touch ${PID_FILE}
- echo $1 > $PID_FILE
-
- chown paas:paas $PID_FILE
- chmod 640 $PID_FILE
-}
-
-write_pid_to_file()
-{
- retry=3
- i=0
- fail=1
-
- while [ ${i} -lt ${retry} ]
- do
- PID=`pidof nStackMaster`
- if [ ${PID} ]
- then
- fail=0
- break
- fi
-
- i=`expr ${i} + 1`
-
- sleep 1
- done
-
- if [ ${fail} -ne 0 ]
- then
- return 1
- fi
-
- if [ ! -d ${PID_FILE_DIR} ];
- then
- sudo mkdir -p ${PID_FILE_DIR}
- chmod 750 ${PID_FILE_DIR}
- fi
-
- touch ${PID_FILE}
- echo $PID > $PID_FILE
- #check log file right
- chown paas:paas $PID_FILE
- chmod 640 $PID_FILE
- return 0
-}
-
-
-
-install_config()
-{
- # set nStackConfig values
- if [ -n "$DEF_SOCK_NUM" ] ;then
- sed -i "s/\"socket_num\":[ \t0-9]*,/\"socket_num\":$DEF_SOCK_NUM,/g" ./configure/nStackConfig.json
- fi
-}
-
-copy_config()
-{
- # $1 for src nStackServer path
- # $2 for dst nStackServer path
-
- # NOTE: set src socket_num value into dst path config file, this is for copying old configuration from old version to new version path when upgrading.
- SRC_SOCK_NUM=`grep 'socket_num' $1/configure/nStackConfig.json | awk -F"," '{for (i=1;i<=NF;++i) print $i}' | awk 'gsub("\"socket_num\":","") {sub("^[ \t]*","");sub("[ \t]*$",""); print $0}'`
- sed -i "s/\"socket_num\":[ \t0-9]*,/\"socket_num\":$SRC_SOCK_NUM,/g" $2/configure/nStackConfig.json
-}