137 lines
5.9 KiB
Bash
Executable File
137 lines
5.9 KiB
Bash
Executable File
#!/bin/bash
|
|
# usage ./parameters.sh
|
|
|
|
#################################################################################
|
|
# Copyright (c) International Business Machines Corp., 2007 #
|
|
# #
|
|
# This program is free software; you can redistribute it and/or modify #
|
|
# it under the terms of the GNU General Public License as published by #
|
|
# the Free Software Foundation; either version 2 of the License, or #
|
|
# (at your option) any later version. #
|
|
# #
|
|
# This program is distributed in the hope that it will be useful, #
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See #
|
|
# the GNU General Public License for more details. #
|
|
# #
|
|
# You should have received a copy of the GNU General Public License #
|
|
# along with this program; if not, write to the Free Software #
|
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA #
|
|
# #
|
|
#################################################################################
|
|
# Name Of File: parameters.sh #
|
|
# #
|
|
# Description: This file has functions for the setup for testing cpucontroller #
|
|
# setup includes creating controller device, mounting it with #
|
|
# cgroup filesystem with option cpu and creating groups in it. #
|
|
# #
|
|
# Functions: get_num_groups(): decides number of groups based on num of cpus #
|
|
# setup(): creaes /dev/cpuctl, mounts cgroup fs on it, creates #
|
|
# groups in that, creates fifo to fire tasks at one time. #
|
|
# cleanup(): Does full system cleanup #
|
|
# #
|
|
# Author: Sudhir Kumar <skumar@linux.vnet.ibm.com> #
|
|
# #
|
|
# History: #
|
|
# #
|
|
# DATE NAME EMAIL DESC #
|
|
# #
|
|
# 20/12/07 Sudhir Kumar <skumar@linux.vnet.ibm.com> Created this test #
|
|
# #
|
|
#################################################################################
|
|
|
|
|
|
set_def_group() #default group spinning a task to create ideal scenario
|
|
{
|
|
[ -d /dev/cpuctl/group_def ] || mkdir /dev/cpuctl/group_def;
|
|
if [ $? -ne 0 ]
|
|
then
|
|
echo "ERROR: Can't create default group... "
|
|
"Check your permissions..Exiting test";
|
|
cleanup;
|
|
exit -1;
|
|
fi
|
|
# Migrate all the running tasks to this group
|
|
# rt tasks require a finite value to cpu.rt_runtime_us
|
|
echo 10000 > /dev/cpuctl/group_def/cpu.rt_runtime_us;
|
|
for task in `cat /dev/cpuctl/tasks`; do
|
|
echo $task > /dev/cpuctl/group_def/tasks 2>/dev/null 1>&2;
|
|
done
|
|
}
|
|
|
|
get_num_groups() # Number of tasks should be >= number of cpu's (to check scheduling fairness)
|
|
{
|
|
NUM_GROUPS=$(( (NUM_CPUS*3 + 1)/2 ))
|
|
}
|
|
|
|
# Write the cleanup function
|
|
cleanup ()
|
|
{
|
|
echo "Cleanup called";
|
|
killall cpuctl_def_task01 1>/dev/null 2>&1;
|
|
killall cpuctl_def_task02 1>/dev/null 2>&1;
|
|
killall cpuctl_task_* 1>/dev/null 2>&1;
|
|
sleep 1
|
|
rm -f cpuctl_task_* 2>/dev/null
|
|
for task in `cat /dev/cpuctl/group_def/tasks`; do
|
|
echo $task > /dev/cpuctl/tasks 2>/dev/null 1>&2;
|
|
done
|
|
rmdir /dev/cpuctl/group* 2> /dev/null
|
|
umount /dev/cpuctl 2> /dev/null
|
|
rmdir /dev/cpuctl 2> /dev/null
|
|
rm -f myfifo 2>/dev/null
|
|
|
|
}
|
|
# Create /dev/cpuctl & mount the cgroup file system with cpu controller
|
|
#clean any group created eralier (if any)
|
|
|
|
do_setup ()
|
|
{
|
|
if [ -e /dev/cpuctl ]
|
|
then
|
|
echo "WARN:/dev/cpuctl already exist..overwriting"; # or a warning ?
|
|
cleanup;
|
|
mkdir /dev/cpuctl;
|
|
else
|
|
mkdir /dev/cpuctl
|
|
fi
|
|
mount -t cgroup -ocpu cgroup /dev/cpuctl 2> /dev/null
|
|
if [ $? -ne 0 ]
|
|
then
|
|
echo "ERROR: Could not mount cgroup filesystem on /dev/cpuctl..Exiting test";
|
|
cleanup;
|
|
exit -1;
|
|
fi
|
|
|
|
# Group created earlier may again be visible if not cleaned properly...so clean them
|
|
groups=/dev/cpuctl/group*
|
|
if [ -z "$groups" ]
|
|
then
|
|
rmdir /dev/cpuctl/group*
|
|
echo "WARN: Earlier groups found and removed...";
|
|
fi
|
|
|
|
#Create a fifo to make all tasks wait on it
|
|
mkfifo myfifo 2> /dev/null;
|
|
if [ $? -ne 0 ]
|
|
then
|
|
echo "ERROR: Can't create fifo...Check your permissions..Exiting test";
|
|
cleanup;
|
|
exit -1;
|
|
fi
|
|
|
|
# Create different groups
|
|
for i in $(seq 1 $NUM_GROUPS)
|
|
do
|
|
group=group_$i;
|
|
mkdir /dev/cpuctl/$group;# 2>/dev/null
|
|
if [ $? -ne 0 ]
|
|
then
|
|
echo "ERROR: Can't create $group...Check your permissions..Exiting test";
|
|
cleanup;
|
|
exit -1;
|
|
fi
|
|
done
|
|
}
|
|
|