1#!/bin/bash 2# 3# Test program for memory error handling for hugepages 4# Usage: ./run-huge-test.sh hugetlbfs_directory 5# Author: Naoya Horiguchi 6 7usage() 8{ 9 echo "Usage: ./run-huge-test.sh hugetlbfs_directory" && exit 1 10} 11 12htdir=$1 13[ $# -ne 1 ] && usage 14[ ! -d $htdir ] && usage 15 16rm -rf $htdir/test* 17echo 1000 > /proc/sys/vm/nr_hugepages 18 19num=0 20 21exec_testcase() { 22 error=0 23 echo "TestCase $@" 24 hpage_size=$1 25 hpage_target=$2 26 num=$7 27 28 if [ "$3" = "head" ] ; then 29 hpage_target_offset=0 30 elif [ "$3" = "tail" ] ; then 31 hpage_target_offset=1 32 else 33 error=1 34 fi 35 hpage_target=$((hpage_target * 512 + hpage_target_offset)) 36 37 if [ "$4" = "early" ] ; then 38 process_type="-e" 39 elif [ "$4" = "late_touch" ] ; then 40 process_type="" 41 elif [ "$4" = "late_avoid" ] ; then 42 process_type="-a" 43 else 44 error=1 45 fi 46 47 if [ "$5" = "anonymous" ] ; then 48 file_type="-A" 49 elif [ "$5" = "file" ] ; then 50 file_type="-f $num" 51 elif [ "$5" = "shm" ] ; then 52 file_type="-S" 53 else 54 error=1 55 fi 56 57 if [ "$6" = "fork_shared" ] ; then 58 share_type="-F" 59 elif [ "$6" = "fork_private_nocow" ] ; then 60 share_type="-Fp" 61 elif [ "$6" = "fork_private_cow" ] ; then 62 share_type="-Fpc" 63 else 64 error=1 65 fi 66 67 command="./thugetlb -x -m $hpage_size -o $hpage_target $process_type $file_type $share_type $htdir &" 68 echo $command 69 eval $command 70 wait $! 71 echo "" 72 73 return 0 74} 75 76num=$((num+1)) 77exec_testcase 2 1 "head" "early" "file" "fork_shared" $num 78num=$((num+1)) 79exec_testcase 2 1 "head" "early" "file" "fork_private_nocow" $num 80num=$((num+1)) 81exec_testcase 2 1 "head" "early" "file" "fork_private_cow" $num 82num=$((num+1)) 83exec_testcase 2 1 "head" "early" "shm" "fork_shared" $num 84num=$((num+1)) 85exec_testcase 2 1 "head" "early" "anonymous" "fork_shared" $num 86num=$((num+1)) 87exec_testcase 2 1 "head" "early" "anonymous" "fork_private_nocow" $num 88num=$((num+1)) 89exec_testcase 2 1 "head" "early" "anonymous" "fork_private_cow" $num 90 91num=$((num+1)) 92exec_testcase 2 1 "head" "late_touch" "file" "fork_shared" $num 93num=$((num+1)) 94exec_testcase 2 1 "head" "late_touch" "file" "fork_private_nocow" $num 95num=$((num+1)) 96exec_testcase 2 1 "head" "late_touch" "file" "fork_private_cow" $num 97num=$((num+1)) 98exec_testcase 2 1 "head" "late_touch" "shm" "fork_shared" $num 99num=$((num+1)) 100exec_testcase 2 1 "head" "late_touch" "anonymous" "fork_shared" $num 101num=$((num+1)) 102exec_testcase 2 1 "head" "late_touch" "anonymous" "fork_private_nocow" $num 103num=$((num+1)) 104exec_testcase 2 1 "head" "late_touch" "anonymous" "fork_private_cow" $num 105 106num=$((num+1)) 107exec_testcase 2 1 "head" "late_avoid" "file" "fork_shared" $num 108num=$((num+1)) 109exec_testcase 2 1 "head" "late_avoid" "file" "fork_private_nocow" $num 110num=$((num+1)) 111exec_testcase 2 1 "head" "late_avoid" "file" "fork_private_cow" $num 112num=$((num+1)) 113exec_testcase 2 1 "head" "late_avoid" "shm" "fork_shared" $num 114num=$((num+1)) 115exec_testcase 2 1 "head" "late_avoid" "anonymous" "fork_shared" $num 116num=$((num+1)) 117exec_testcase 2 1 "head" "late_avoid" "anonymous" "fork_private_nocow" $num 118num=$((num+1)) 119exec_testcase 2 1 "head" "late_avoid" "anonymous" "fork_private_cow" $num 120 121num=$((num+1)) 122exec_testcase 2 1 "tail" "early" "file" "fork_shared" $num 123num=$((num+1)) 124exec_testcase 2 1 "tail" "early" "file" "fork_private_nocow" $num 125num=$((num+1)) 126exec_testcase 2 1 "tail" "early" "file" "fork_private_cow" $num 127num=$((num+1)) 128exec_testcase 2 1 "tail" "early" "shm" "fork_shared" $num 129num=$((num+1)) 130exec_testcase 2 1 "tail" "early" "anonymous" "fork_shared" $num 131num=$((num+1)) 132exec_testcase 2 1 "tail" "early" "anonymous" "fork_private_nocow" $num 133num=$((num+1)) 134exec_testcase 2 1 "tail" "early" "anonymous" "fork_private_cow" $num 135 136num=$((num+1)) 137exec_testcase 2 1 "tail" "late_touch" "file" "fork_shared" $num 138num=$((num+1)) 139exec_testcase 2 1 "tail" "late_touch" "file" "fork_private_nocow" $num 140num=$((num+1)) 141exec_testcase 2 1 "tail" "late_touch" "file" "fork_private_cow" $num 142num=$((num+1)) 143exec_testcase 2 1 "tail" "late_touch" "shm" "fork_shared" $num 144num=$((num+1)) 145exec_testcase 2 1 "tail" "late_touch" "anonymous" "fork_shared" $num 146num=$((num+1)) 147exec_testcase 2 1 "tail" "late_touch" "anonymous" "fork_private_nocow" $num 148num=$((num+1)) 149exec_testcase 2 1 "tail" "late_touch" "anonymous" "fork_private_cow" $num 150 151num=$((num+1)) 152exec_testcase 2 1 "tail" "late_avoid" "file" "fork_shared" $num 153num=$((num+1)) 154exec_testcase 2 1 "tail" "late_avoid" "file" "fork_private_nocow" $num 155num=$((num+1)) 156exec_testcase 2 1 "tail" "late_avoid" "file" "fork_private_cow" $num 157num=$((num+1)) 158exec_testcase 2 1 "tail" "late_avoid" "shm" "fork_shared" $num 159num=$((num+1)) 160exec_testcase 2 1 "tail" "late_avoid" "anonymous" "fork_shared" $num 161num=$((num+1)) 162exec_testcase 2 1 "tail" "late_avoid" "anonymous" "fork_private_nocow" $num 163num=$((num+1)) 164exec_testcase 2 1 "tail" "late_avoid" "anonymous" "fork_private_cow" $num 165 166# free IPC semaphores used by thugetlb.c 167ipcs -s|grep $USER|cut -f2 -d' '|xargs ipcrm sem 168 169