config/worker-utils/worker-utils/cpumap_functions_unit_test.sh

242 lines
9.1 KiB
Bash

#!/bin/bash
#
# Copyright (c) 2015-2016 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
source /etc/init.d/cpumap_functions.sh
export NR_CPUS_LIST=("4" "8" "16" "32" "64" "128")
if [ ! -z ${1} ]; then
NR_CPUS_LIST=(${1//,/ })
fi
function test_cpumap_to_cpulist {
local NR_CPUS=$1
declare -A CPULISTS
if [ ${NR_CPUS} -ge 4 ]; then
CPULISTS["0"]=""
CPULISTS["1"]="0"
CPULISTS["2"]="1"
CPULISTS["3"]="0-1"
CPULISTS["5"]="0,2"
CPULISTS["7"]="0-2"
CPULISTS["F"]="0-3"
CPULISTS["9"]="0,3"
fi
if [ ${NR_CPUS} -ge 8 ]; then
CPULISTS["00"]=""
CPULISTS["11"]="0,4"
CPULISTS["FF"]="0-7"
CPULISTS["81"]="0,7"
fi
if [ ${NR_CPUS} -ge 16 ]; then
CPULISTS["0000"]=""
CPULISTS["1111"]="0,4,8,12"
CPULISTS["FFF"]="0-11"
CPULISTS["F0F"]="0-3,8-11"
CPULISTS["F0F0"]="4-7,12-15"
CPULISTS["FFFF"]="0-15"
CPULISTS["FFFE"]="1-15"
CPULISTS["8001"]="0,15"
fi
if [ ${NR_CPUS} -ge 32 ]; then
CPULISTS["00000000"]=""
CPULISTS["11111111"]="0,4,8,12,16,20,24,28"
CPULISTS["0F0F0F0F"]="0-3,8-11,16-19,24-27"
CPULISTS["F0F0F0F0"]="4-7,12-15,20-23,28-31"
CPULISTS["FFFFFFFF"]="0-31"
CPULISTS["FFFFFFFE"]="1-31"
CPULISTS["80000001"]="0,31"
fi
if [ ${NR_CPUS} -ge 64 ]; then
CPULISTS["0000000000000000"]=""
CPULISTS["1111111111111111"]="0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60"
CPULISTS["0F0F0F0F0F0F0F0F"]="0-3,8-11,16-19,24-27,32-35,40-43,48-51,56-59"
CPULISTS["F0F0F0F0F0F0F0F0"]="4-7,12-15,20-23,28-31,36-39,44-47,52-55,60-63"
CPULISTS["FFFFFFFFFFFFFFFF"]="0-63"
CPULISTS["FFFFFFFFFFFFFFFE"]="1-63"
CPULISTS["8000000000000001"]="0,63"
fi
if [ ${NR_CPUS} -ge 128 ]; then
CPULISTS["00000000000000000000000000000000"]=""
CPULISTS["11111111111111111111111111111111"]="0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124"
CPULISTS["0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F"]="0-3,8-11,16-19,24-27,32-35,40-43,48-51,56-59,64-67,72-75,80-83,88-91,96-99,104-107,112-115,120-123"
CPULISTS["F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0"]="4-7,12-15,20-23,28-31,36-39,44-47,52-55,60-63,68-71,76-79,84-87,92-95,100-103,108-111,116-119,124-127"
CPULISTS["FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"]="0-127"
CPULISTS["FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE"]="1-127"
CPULISTS["80000000000000000000000000000001"]="0,127"
fi
for CPUMAP in ${!CPULISTS[@]}; do
EXPECTED=${CPULISTS[${CPUMAP}]}
CPULIST=$(cpumap_to_cpulist ${CPUMAP} ${NR_CPUS})
if [ "${CPULIST}" != "${EXPECTED}" ]; then
printf "\n"
echo "error: (cpumap_to_list ${CPUMAP} ${NR_CPUS}) returned \"${CPULIST}\" instead of \"${EXPECTED}\""
fi
printf "."
done
printf "\n"
}
function test_cpulist_to_cpumap {
local NR_CPUS=$1
declare -A CPUMAPS
if [ ${NR_CPUS} -ge 4 ]; then
CPUMAPS[" "]="0"
CPUMAPS["0"]="1"
CPUMAPS["1"]="2"
CPUMAPS["0-1"]="3"
CPUMAPS["0,2"]="5"
CPUMAPS["0-2"]="7"
CPUMAPS["0-3"]="F"
CPUMAPS["0,3"]="9"
fi
if [ ${NR_CPUS} -ge 8 ]; then
CPUMAPS["0,4"]="11"
CPUMAPS["0-7"]="FF"
CPUMAPS["0,7"]="81"
fi
if [ ${NR_CPUS} -ge 16 ]; then
CPUMAPS["0,4,8,12"]="1111"
CPUMAPS["0-11"]="FFF"
CPUMAPS["0-3,8-11"]="F0F"
CPUMAPS["4-7,12-15"]="F0F0"
CPUMAPS["0-15"]="FFFF"
CPUMAPS["1-15"]="FFFE"
CPUMAPS["0,15"]="8001"
fi
if [ ${NR_CPUS} -ge 32 ]; then
CPUMAPS["0,4,8,12,16,20,24,28"]="11111111"
CPUMAPS["0-3,8-11,16-19,24-27"]="F0F0F0F"
CPUMAPS["4-7,12-15,20-23,28-31"]="F0F0F0F0"
CPUMAPS["0-31"]="FFFFFFFF"
CPUMAPS["1-31"]="FFFFFFFE"
CPUMAPS["0,31"]="80000001"
fi
if [ ${NR_CPUS} -ge 64 ]; then
CPUMAPS["0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60"]="1111111111111111"
CPUMAPS["0-3,8-11,16-19,24-27,32-35,40-43,48-51,56-59"]="F0F0F0F0F0F0F0F"
CPUMAPS["4-7,12-15,20-23,28-31,36-39,44-47,52-55,60-63"]="F0F0F0F0F0F0F0F0"
CPUMAPS["0-63"]="FFFFFFFFFFFFFFFF"
CPUMAPS["1-63"]="FFFFFFFFFFFFFFFE"
CPUMAPS["0,63"]="8000000000000001"
fi
if [ ${NR_CPUS} -ge 128 ]; then
CPUMAPS["0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124"]="11111111111111111111111111111111"
CPUMAPS["0-3,8-11,16-19,24-27,32-35,40-43,48-51,56-59,64-67,72-75,80-83,88-91,96-99,104-107,112-115,120-123"]="F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F"
CPUMAPS["4-7,12-15,20-23,28-31,36-39,44-47,52-55,60-63,68-71,76-79,84-87,92-95,100-103,108-111,116-119,124-127"]="F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0"
CPUMAPS["0-127"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
CPUMAPS["1-127"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE"
CPUMAPS["0,127"]="80000000000000000000000000000001"
fi
for CPULIST in ${!CPUMAPS[@]}; do
EXPECTED=${CPUMAPS[${CPULIST}]}
CPUMAP=$(cpulist_to_cpumap ${CPULIST} ${NR_CPUS})
if [ "${CPUMAP}" != "${EXPECTED}" ]; then
printf "\n"
echo "error: (cpulist_to_cpumap ${CPULIST} ${NR_CPUS}) returned \"${CPUMAP}\" instead of \"${EXPECTED}\""
fi
printf "."
done
printf "\n"
}
function test_invert_cpumap {
local NR_CPUS=$1
declare -A INVERSES
if [ $((${NR_CPUS} % 4)) -ne 0 ]; then
echo "test_invert_cpumap skipping NR_CPUS=${NR_CPUS}; not a multiple of 4"
return 0
fi
if [ ${NR_CPUS} -ge 4 ]; then
INVERSES["0"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
INVERSES["1"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE"
INVERSES["2"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD"
INVERSES["3"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC"
INVERSES["5"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA"
INVERSES["7"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8"
INVERSES["F"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0"
INVERSES["9"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6"
fi
if [ ${NR_CPUS} -ge 8 ]; then
INVERSES["11"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE"
INVERSES["FF"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00"
INVERSES["F0"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F"
INVERSES["81"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E"
fi
if [ ${NR_CPUS} -ge 16 ]; then
INVERSES["1111"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEE"
INVERSES["FFF"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000"
INVERSES["F0F"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0"
INVERSES["F0F0"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F"
INVERSES["0F0F"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0"
INVERSES["FFFF"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000"
INVERSES["FFFE"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFF0001"
INVERSES["8001"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFE"
fi
if [ ${NR_CPUS} -ge 32 ]; then
INVERSES["11111111"]="FFFFFFFFFFFFFFFFFFFFFFFFEEEEEEEE"
INVERSES["0F0F0F0F"]="FFFFFFFFFFFFFFFFFFFFFFFFF0F0F0F0"
INVERSES["F0F0F0F0"]="FFFFFFFFFFFFFFFFFFFFFFFF0F0F0F0F"
INVERSES["FFFFFFFF"]="FFFFFFFFFFFFFFFFFFFFFFFF00000000"
INVERSES["FFFFFFFE"]="FFFFFFFFFFFFFFFFFFFFFFFF00000001"
INVERSES["80000001"]="FFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFE"
fi
if [ ${NR_CPUS} -ge 64 ]; then
INVERSES["1111111111111111"]="FFFFFFFFFFFFFFFFEEEEEEEEEEEEEEEE"
INVERSES["0F0F0F0F0F0F0F0F"]="FFFFFFFFFFFFFFFFF0F0F0F0F0F0F0F0"
INVERSES["F0F0F0F0F0F0F0F0"]="FFFFFFFFFFFFFFFF0F0F0F0F0F0F0F0F"
INVERSES["FFFFFFFFFFFFFFFF"]="FFFFFFFFFFFFFFFF0000000000000000"
INVERSES["FFFFFFFFFFFFFFFE"]="FFFFFFFFFFFFFFFF0000000000000001"
INVERSES["8000000000000001"]="FFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFE"
fi
if [ ${NR_CPUS} -ge 128 ]; then
INVERSES["11111111111111111111111111111111"]="EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
INVERSES["0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F"]="F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0"
INVERSES["F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0"]="0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F"
INVERSES["FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"]="00000000000000000000000000000000"
INVERSES["FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE"]="00000000000000000000000000000001"
INVERSES["80000000000000000000000000000001"]="7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE"
fi
for CPUMAP in ${!INVERSES[@]}; do
EXPECTED=${INVERSES[${CPUMAP}]}
if [ ${NR_CPUS} -lt 128 ]; then
EXPECTED=$(echo ${EXPECTED} | cut --complement -c1-$((32-((${NR_CPUS}+3)/4))))
fi
EXPECTED=$(echo ${EXPECTED} | sed -e "s/^0*//")
if [ -z ${EXPECTED} ]; then
EXPECTED="0"
fi
INVERSE=$(invert_cpumap ${CPUMAP} ${NR_CPUS})
if [ "${INVERSE}" != "${EXPECTED}" ]; then
printf "\n"
echo "error: (invert_cpumap ${CPUMAP} ${NR_CPUS}) returned \"${INVERSE}\" instead of \"${EXPECTED}\""
fi
printf "."
done
printf "\n"
}
for NR_CPUS in ${NR_CPUS_LIST[@]}; do
echo "NR_CPUS=${NR_CPUS}"
test_cpumap_to_cpulist ${NR_CPUS}
test_cpulist_to_cpumap ${NR_CPUS}
test_invert_cpumap ${NR_CPUS}
echo ""
done
exit 0