Home | History | Annotate | Download | only in memctl
      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