1 #!/bin/bash 2 # usage ./functions.sh 3 4 ################################################################################# 5 # Copyright (c) International Business Machines Corp., 2008 # 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: myfunctions.sh # 23 # # 24 # Description: This file has functions for the setup for testing memory # 25 # controller. setup includes creating controller device, # 26 # mounting it with cgroup filesystem with option memory and # 27 # creating groups in it. # 28 # # 29 # Functions: setup(): creaes /dev/memctl, mounts cgroup fs on it, creates # 30 # groups in that etc. # 31 # setmemlimits(): Sets up memory limits for different groups # 32 # usage(): Shows the usage of this file. # 33 # cleanup(): Does full system cleanup # 34 # # 35 # Author: Sudhir Kumar <skumar (at] linux.vnet.ibm.com> # 36 # # 37 # History: # 38 # # 39 # DATE NAME EMAIL DESC # 40 # # 41 # 15/03/08 Sudhir Kumar <skumar (at] linux.vnet.ibm.com> Created this test # 42 # # 43 ################################################################################# 44 45 # Write the cleanup function 46 cleanup () 47 { 48 echo "Cleanup called"; 49 rm -f memctl_task_* 2>/dev/null 50 rmdir /dev/memctl/group* 2> /dev/null 51 umount /dev/memctl 2> /dev/null 52 rmdir /dev/memctl 2> /dev/null 53 } 54 # Create /dev/memctl & mount the cgroup file system with memory controller 55 #clean any group created eralier (if any) 56 57 setup () 58 { 59 if [ -e /dev/memctl ] 60 then 61 echo "WARN:/dev/memctl already exist..overwriting"; 62 cleanup; 63 mkdir /dev/memctl; 64 else 65 mkdir /dev/memctl 66 fi 67 mount -t cgroup -omemory cgroup /dev/memctl 2> /dev/null 68 if [ $? -ne 0 ] 69 then 70 echo "ERROR: Could not mount cgroup filesystem on /dev/memctl..Exiting test"; 71 cleanup; 72 exit -1; 73 fi 74 75 # Group created earlier may again be visible if not cleaned properly...so clean them 76 if [ -e /dev/memctl/group_1 ] 77 then 78 rmdir /dev/memctl/group* 79 echo "WARN: Earlier groups found and removed..."; 80 fi 81 82 # Create different groups 83 for i in $(seq 1 $NUM_GROUPS) 84 do 85 group=group_$i; 86 mkdir /dev/memctl/$group;# 2>/dev/null 87 if [ $? -ne 0 ] 88 then 89 echo "ERROR: Can't create $group...Check your permissions..Exiting test"; 90 cleanup; 91 exit -1; 92 fi 93 done 94 } 95 96 # The usage of the script file 97 usage() 98 { 99 echo "Could not start memory controller test"; 100 echo "usage: run_memctl_test.sh test_num"; 101 echo "Skipping the memory controller test..."; 102 } 103 104 # Function to set memory limits for different groups 105 setmemlimits() 106 { 107 for i in $(seq 1 $NUM_GROUPS) 108 do 109 limit=MEMLIMIT_GROUP_${i}; 110 eval limit=\$$limit; 111 echo -n $limit >/dev/memctl/group_$i/memory.limit_in_bytes; 112 if [ $? -ne 0 ] 113 then 114 echo "Error in setting the memory limits for group_$i" 115 cleanup; 116 exit -1; 117 fi; 118 done 119 } 120 121 122