# # run-transhuge-test.sh: # Script for hwpoison test of THP(Transparent Huge Page). # #!/bin/sh # THP_POISON_PRO_FILE_NAME="ttranshuge" THP_POISON_PRO="./$THP_POISON_PRO_FILE_NAME" THP_SYS_PATH="/sys/kernel/mm/transparent_hugepage" THP_SYS_ENABLED_FILE="$THP_SYS_PATH/enabled" executed_testcase=0 failed_testcase=0 error() { echo "$1" && exit 1 } env_check() { if [ ! -f $THP_POISON_PRO_FILE_NAME ] ; then error "Please make sure there is file $THP_POISON_PRO_FILE_NAME." fi if [ ! -d $THP_SYS_PATH ] ; then error "THP(Transparent Huge Page) may be not supported by kernel." fi thp_enabled="$(cat $THP_SYS_ENABLED_FILE | awk '{print $3}')" if [ "$thp_enabled" == "[never]" ] ; then error "THP(Transparent Huge Page) is disabled now." fi } result_check() { if [ "$1" != "0" ] ; then failed_testcase=`expr $failed_testcase + 1` fi } exec_testcase() { if [ "$1" = "head" ] ; then page_position_in_thp=0 elif [ "$1" = "tail" ] ; then page_position_in_thp=1 else error "Which page do you want to poison?" fi if [ "$2" = "early" ] ; then process_type="--early-kill" elif [ "$2" = "late_touch" ] ; then process_type="" elif [ "$2" = "late_avoid" ] ; then process_type="--avoid-touch" else error "No such process type." fi executed_testcase=`expr $executed_testcase + 1` echo "------------------ Case $executed_testcase --------------------" command="$THP_POISON_PRO $process_type --offset $page_position_in_thp" echo $command eval $command result_check $? echo -e "\n" } # Environment Check for Test. env_check # Execute Test Cases from Here. echo "============= HWPoison Test of Transparent Huge Page =================" exec_testcase "head" "early" exec_testcase "head" "late_touch" exec_testcase "head" "late_avoid" exec_testcase "tail" "early" exec_testcase "tail" "late_touch" exec_testcase "tail" "late_avoid" echo "=======================================================================" echo -n " Num of Executed Test Case: $executed_testcase" echo -e " Num of Failed Case: $failed_testcase\n"