1 #!/bin/bash 2 # usage ./parameters.sh 3 4 ################################################################################# 5 # Copyright (c) International Business Machines Corp., 2007 # 6 # # 7 # This program is free software; you can redistribute it and/or modify # 8 # it under the terms of the GNU General Public License as published by # 9 # the Free Software Foundation; either version 2 of the License, or # 10 # (at your option) any later version. # 11 # # 12 # This program is distributed in the hope that it will be useful, # 13 # but WITHOUT ANY WARRANTY; without even the implied warranty of # 14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See # 15 # the GNU General Public License for more details. # 16 # # 17 # You should have received a copy of the GNU General Public License # 18 # along with this program; if not, write to the Free Software # 19 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # 20 # # 21 ################################################################################# 22 # Name Of File: parameters.sh # 23 # # 24 # Description: This file has functions for the setup for testing cpucontroller # 25 # setup includes creating controller device, mounting it with # 26 # cgroup filesystem with option cpu and creating groups in it. # 27 # # 28 # Functions: get_num_groups(): decides number of groups based on num of cpus # 29 # setup(): creaes /dev/cpuctl, mounts cgroup fs on it, creates # 30 # groups in that, creates fifo to fire tasks at one time. # 31 # cleanup(): Does full system cleanup # 32 # # 33 # Author: Sudhir Kumar <skumar (at] linux.vnet.ibm.com> # 34 # # 35 # History: # 36 # # 37 # DATE NAME EMAIL DESC # 38 # # 39 # 20/12/07 Sudhir Kumar <skumar (at] linux.vnet.ibm.com> Created this test # 40 # # 41 ################################################################################# 42 43 44 set_def_group() #default group spinning a task to create ideal scenario 45 { 46 [ -d /dev/cpuctl/group_def ] || mkdir /dev/cpuctl/group_def; 47 if [ $? -ne 0 ] 48 then 49 echo "ERROR: Can't create default group... " 50 "Check your permissions..Exiting test"; 51 cleanup; 52 exit -1; 53 fi 54 # Migrate all the running tasks to this group 55 # rt tasks require a finite value to cpu.rt_runtime_us 56 echo 10000 > /dev/cpuctl/group_def/cpu.rt_runtime_us; 57 for task in `cat /dev/cpuctl/tasks`; do 58 echo $task > /dev/cpuctl/group_def/tasks 2>/dev/null 1>&2; 59 done 60 } 61 62 get_num_groups() # Number of tasks should be >= number of cpu's (to check scheduling fairness) 63 { 64 NUM_GROUPS=$(( (NUM_CPUS*3 + 1)/2 )) 65 } 66 67 # Write the cleanup function 68 cleanup () 69 { 70 echo "Cleanup called"; 71 killall cpuctl_def_task01 1>/dev/null 2>&1; 72 killall cpuctl_def_task02 1>/dev/null 2>&1; 73 killall cpuctl_task_* 1>/dev/null 2>&1; 74 sleep 1 75 rm -f cpuctl_task_* 2>/dev/null 76 for task in `cat /dev/cpuctl/group_def/tasks`; do 77 echo $task > /dev/cpuctl/tasks 2>/dev/null 1>&2; 78 done 79 rmdir /dev/cpuctl/group* 2> /dev/null 80 umount /dev/cpuctl 2> /dev/null 81 rmdir /dev/cpuctl 2> /dev/null 82 rm -f myfifo 2>/dev/null 83 84 } 85 # Create /dev/cpuctl & mount the cgroup file system with cpu controller 86 #clean any group created eralier (if any) 87 88 do_setup () 89 { 90 if [ -e /dev/cpuctl ] 91 then 92 echo "WARN:/dev/cpuctl already exist..overwriting"; # or a warning ? 93 cleanup; 94 mkdir /dev/cpuctl; 95 else 96 mkdir /dev/cpuctl 97 fi 98 mount -t cgroup -ocpu cgroup /dev/cpuctl 2> /dev/null 99 if [ $? -ne 0 ] 100 then 101 echo "ERROR: Could not mount cgroup filesystem on /dev/cpuctl..Exiting test"; 102 cleanup; 103 exit -1; 104 fi 105 106 # Group created earlier may again be visible if not cleaned properly...so clean them 107 groups=/dev/cpuctl/group* 108 if [ -z "$groups" ] 109 then 110 rmdir /dev/cpuctl/group* 111 echo "WARN: Earlier groups found and removed..."; 112 fi 113 114 #Create a fifo to make all tasks wait on it 115 mkfifo myfifo 2> /dev/null; 116 if [ $? -ne 0 ] 117 then 118 echo "ERROR: Can't create fifo...Check your permissions..Exiting test"; 119 cleanup; 120 exit -1; 121 fi 122 123 # Create different groups 124 for i in $(seq 1 $NUM_GROUPS) 125 do 126 group=group_$i; 127 mkdir /dev/cpuctl/$group;# 2>/dev/null 128 if [ $? -ne 0 ] 129 then 130 echo "ERROR: Can't create $group...Check your permissions..Exiting test"; 131 cleanup; 132 exit -1; 133 fi 134 done 135 } 136 137