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@linux.vnet.ibm.com> # 34# # 35# History: # 36# # 37# DATE NAME EMAIL DESC # 38# # 39# 20/12/07 Sudhir Kumar <skumar@linux.vnet.ibm.com> Created this test # 40# # 41################################################################################# 42 43 44set_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 62get_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 68cleanup () 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 88do_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