d6b7a862eb2a35ce08ce0dc28d65bb8392e1b057
[csit.git] / tests / dmm / dmm_scripts / install_dmm.sh
1 #!/bin/bash
2
3 set -x
4
5 TIMESTAMP=$(date +%Y-%m-%d_%H-%M-%S)
6 OS_ID=$(grep '^ID=' /etc/os-release | cut -f2- -d= | sed -e 's/\"//g')
7 ROOTDIR=/tmp/DMM-testing
8
9 DMM_DIR=${ROOTDIR}/dmm/
10
11 #DPDK download path
12 DPDK_DOWNLOAD_PATH=/tmp/dpdk
13
14 #dpdk installation path
15 DPDK_INSTALL_PATH=/usr
16
17 # compile and install the DPDK
18 echo "DPDK build started....."
19 cd ${ROOTDIR}
20 chmod +x *.deb
21 sudo dpkg -i libnuma1_2.0.11-1ubuntu1.1_amd64.deb
22 sudo dpkg -i libnuma-dev_2.0.11-1ubuntu1.1_amd64.deb
23
24 #DPDK will be having dependancy on linux headers
25 if [ "$OS_ID" == "ubuntu" ]; then
26     sudo apt-get -y install git build-essential linux-headers-`uname -r`
27     sudo apt-get install libnuma-dev
28 elif [ "$OS_ID" == "debian" ]; then
29     sudo apt-get -y install git build-essential linux-headers-`uname -r`
30 elif [ "$OS_ID" == "centos" ]; then
31     sudo yum groupinstall -y "Development Tools"
32     sudo yum install -y kernel-headers
33 elif [ "$OS_ID" == "opensuse" ]; then
34     sudo yum groupinstall -y "Development Tools"
35     sudo yum install -y kernel-headers
36 fi
37
38 #===========build DPDK================
39 mkdir -p $DPDK_DOWNLOAD_PATH
40
41 DPDK_FOLDER=$DPDK_DOWNLOAD_PATH/dpdk-18.02-$TIMESTAMP
42 cd $DPDK_DOWNLOAD_PATH
43 mkdir $DPDK_FOLDER
44 tar xvf /tmp/DMM-testing/dpdk-18.02.tar.xz -C $DPDK_FOLDER
45 cd $DPDK_FOLDER/dpdk-18.02
46
47 sed -i 's!CONFIG_RTE_EXEC_ENV=.*!CONFIG_RTE_EXEC_ENV=y!1' config/common_base
48 sed -i 's!CONFIG_RTE_BUILD_SHARED_LIB=.*!CONFIG_RTE_BUILD_SHARED_LIB=y!1' config/common_base
49 sed -i 's!CONFIG_RTE_LIBRTE_EAL=.*!CONFIG_RTE_LIBRTE_EAL=y!1' config/common_base
50 sed -i 's!CONFIG_RTE_EAL_PMD_PATH=.*!CONFIG_RTE_EAL_PMD_PATH="/tmp/dpdk/drivers/"!1' config/common_base
51
52 sudo make install  T=x86_64-native-linuxapp-gcc DESTDIR=${DPDK_INSTALL_PATH} -j 4
53 if [ $? -eq 0 ]
54 then
55   echo "DPDK build is SUCCESS"
56 else
57   echo "DPDK build has FAILED"
58   exit 1
59 fi
60
61 mkdir -p /tmp/dpdk/drivers/
62 cp -f /usr/lib/librte_mempool_ring.so /tmp/dpdk/drivers/
63
64 export NSTACK_LOG_ON=DBG
65
66 # Try to kill the vs_epoll
67 sudo killall vs_epoll
68
69 sudo pgrep vs_epoll
70 if [ $? -eq "0" ]; then
71     success=false
72     sudo pkill vs_epoll
73     echo "RC = $?"
74     for attempt in {1..5}; do
75         echo "Checking if vs_epoll is still alive, attempt nr ${attempt}"
76         sudo pgrep vs_epoll
77         if [ $? -eq "1" ]; then
78             echo "vs_epoll is dead"
79             success=true
80             break
81         fi
82         echo "vs_epoll is still alive, waiting 1 second"
83         sleep 1
84     done
85     if [ "$success" = false ]; then
86         echo "The command sudo pkill vs_epoll failed"
87         sudo pkill -9 vs_epoll
88         echo "RC = $?"
89         exit 1
90     fi
91 else
92     echo "vs_epoll is not running"
93 fi
94
95 # check and setup the hugepages
96 SYS_HUGEPAGE=$(cat /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages)
97 hugepageFree=$(cat /sys/kernel/mm/hugepages/hugepages-2048kB/free_hugepages)
98
99 if [ ${SYS_HUGEPAGE} -lt 1024 ] || [ $hugepageFree -eq 0 ]; then
100     MOUNT=$(mount | grep /mnt/nstackhuge)
101     count=$(mount | grep /mnt/nstackhuge | wc -l)
102
103     while [ "${MOUNT}" != "" ] || [ "${count}" -ne 0 ]
104     do
105         sudo umount /mnt/nstackhuge
106         sleep 1
107         MOUNT=$(mount | grep /mnt/nstackhuge)
108         count=$[$count -1]
109     done
110
111     sock_count=$(lscpu | grep 'Socket(s):' | head -1 | awk '{print $2}')
112     ls -l /sys/devices/system/node/
113
114     while [ "${sock_count}" -ne 0 ]
115     do
116         sock_count=$[$sock_count - 1]
117         echo 1024 | sudo tee /sys/devices/system/node/node"$sock_count"/hugepages/hugepages-2048kB/nr_hugepages
118     done
119
120     sudo mkdir -p /mnt/nstackhuge
121     sudo mount -t hugetlbfs -o pagesize=2M none /mnt/nstackhuge/
122     test $? -eq 0 || exit 1
123 else
124     sudo mkdir -p /mnt/nstackhuge
125     sudo mount -t hugetlbfs -o pagesize=2M none /mnt/nstackhuge/
126 fi
127
128 sudo mkdir -p /var/run/ip_module/