[prev in list] [next in list] [prev in thread] [next in thread] 

List:       ltp-list
Subject:    Re: [LTP] [PATCH][2/17]CONTROLLERS:cpuctl test case3(shares
From:       Sudhir Kumar <skumar () linux ! vnet ! ibm ! com>
Date:       2008-02-29 6:50:31
Message-ID: 20080229063831.GC7926 () in ! ibm ! com
[Download RAW message or body]

On Thu, Feb 28, 2008 at 04:40:45PM +0530, Dhaval Giani wrote:
> On Thu, Feb 28, 2008 at 10:09:31AM +0530, Sudhir Kumar wrote:
> > Hi,
> > This patch adds the third testcase for cpu controller.
> > 
> 
> Minor comments
Most welcome..
> 
> > Signed-off-by: Sudhir Kumar <skumar@linux.vnet.ibm.com>
> > 
> > Index: ltp-full-20071130-tested/testcases/kernel/controllers/cpuctl/cpuctl_test01.c
> >  ===================================================================
> > --- ltp-full-20071130-tested.orig/testcases/kernel/controllers/cpuctl/cpuctl_test01.c
> >                 
> > +++ ltp-full-20071130-tested/testcases/kernel/controllers/cpuctl/cpuctl_test01.c
> > @@ -27,7 +27,7 @@
> > /*              testcase tests the ability of the cpu controller to provide   */
> > /*              fairness for share values (absolute).                         */
> > /*                                                                            */
> > -/* Total Tests: 2                                                             */
> > +/* Total Tests: 3                                                             */
> > /*                                                                            */
> > /* Test Name:   cpu_controller_test01                                         */
> > /*                                                                            */
> > @@ -61,7 +61,7 @@
> > #define NUM_INTERVALS	3       /* How many iterations of TIME_INTERVAL */
> > #define NUM_SETS	7	/* How many share values (with same ratio)*/
> > #define MULTIPLIER   	10      /* decides the rate at which share value gets \
> >                 multiplied*/
> > -
> > +#define GRANULARITY    5       /* % value by which shares of a group changes */
> > extern int Tst_count;
> > char *TCID = "cpu_controller_test01";
> > int TST_TOTAL = 1;
> > @@ -80,7 +80,7 @@ int timer_expired = 0;
> > int main(int argc, char* argv[])
> > {
> > 
> > -	int num_cpus;			/* To calculate cpu time in %*/
> > +	int num_cpus, test_num;			/* To calculate cpu time in %*/
> 
> Comment is not clear.
I will correct it. better may be..
 (Exp) task A's cpu time(%) = (task A's run time * 100) / (INTERVAL *
num_cpus)
> 
> > 	char mygroup[32], mytaskfile[32], mysharesfile[32], ch;
> > 	pid_t pid;
> > 	int my_group_num,	        /* A number attached with a group*/
> > @@ -92,7 +92,7 @@ int main(int argc, char* argv[])
> > 		prev_cpu_time=0;
> > 	struct rusage cpu_usage;
> > 	time_t current_time, prev_time, delta_time;
> > -	unsigned long int myshares = 1;	/* Simply the base value to start with*/
> > +	unsigned long int myshares = 1, baseshares = 1000;	/* Simply the base value to \
> > start with*/  struct sigaction newaction, oldaction;
> > 	/* Signal handling for alarm*/
> > 	sigemptyset (&newaction.sa_mask);
> > @@ -101,12 +101,20 @@ int main(int argc, char* argv[])
> > 	sigaction (SIGALRM, &newaction, &oldaction);
> > 
> > 	/* Check if all parameters passed are correct*/
> > -	if ((argc < 5) || ((my_group_num = atoi(argv[1])) <= 0) || ((scriptpid = \
> > atoi(argv[3])) <= 0) || ((num_cpus = atoi(argv[4])) <= 0)) +	if ((argc < 5) || \
> > ((my_group_num = atoi(argv[1])) <= 0) || ((scriptpid = atoi(argv[3])) <= 0) || \
> > ((num_cpus = atoi(argv[4])) <= 0) || (test_num = atoi(argv[5])) <= 0)  {
> > 		tst_brkm (TBROK, cleanup, "Invalid input parameters\n");
> > 	}
> > 
> > -	myshares *= my_group_num;
> > +	if (test_num == 1)
> > +		myshares *= my_group_num;
> > +	else if (test_num == 2)
> > +		myshares = baseshares;
> > +	else
> > +	{
> > +		tst_brkm (TBROK, cleanup, "Wrong Test number passed. Exiting Test...\n");
> > +	}
> > +
> > 	sprintf(mygroup,"%s", argv[2]);
> > 	sprintf(mytaskfile, "%s", mygroup);
> > 	sprintf(mysharesfile, "%s", mygroup);
> > @@ -137,7 +145,7 @@ int main(int argc, char* argv[])
> > 					 * exceed the TIME_INTERVAL to measure cpu usage
> > 					 */
> > 			current_time = time (NULL);
> > -			delta_time = current_time - prev_time;	/* Duration in case it is not exact \
> > TIME_INTERVAL*/ +			delta_time = current_time - prev_time;	/* Duration in case \
> > its not exact TIME_INTERVAL*/
> 
> previous comment was right :)
will correct.
> > 
> > 			getrusage (0, &cpu_usage);
> > 			total_cpu_time = (cpu_usage.ru_utime.tv_sec + cpu_usage.ru_utime.tv_usec * \
> > 1e-6 + /* user time*/ @@ -160,7 +168,21 @@ int main(int argc, char* argv[])
> > 				second_counter++;
> > 				if (second_counter >= NUM_SETS)
> > 					exit (0);		/* This task is done with its job*/
> > -				myshares = MULTIPLIER * myshares;	/* Keep same ratio but change values*/
> > +
> > +                                /* Change share values depending on the test_num \
> > */ +                                if (test_num ==1)
> > +                                {
> > +                                        /* Keep same ratio but change values*/
> > +                                        myshares = MULTIPLIER * myshares;
> > +                                }
> > +                                else
> > +                                {
> > +                                        /* Increase for odd task and decrease \
> > for even task*/ +                                        if (my_group_num % 2)
> > +                                                myshares += baseshares * \
> > GRANULARITY / 100; +                                        else
> > +                                                myshares -= baseshares * \
> > GRANULARITY / 100; +                                }
> 
> switch()..case would be better (considering more tests will be added)

ok
> 
> > 				write_to_file (mysharesfile, "w", myshares);
> > 				fprintf(stdout,"\ntask-%d SHARES=%lu\n",my_group_num, myshares);
> > 			}/* end if*/
> > Index: ltp-full-20071130-tested/testcases/kernel/controllers/cpuctl/run_cpuctl_test.sh
> >  ===================================================================
> > --- ltp-full-20071130-tested.orig/testcases/kernel/controllers/cpuctl/run_cpuctl_test.sh
> >                 
> > +++ ltp-full-20071130-tested/testcases/kernel/controllers/cpuctl/run_cpuctl_test.sh
> >  @@ -51,13 +51,14 @@ export TST_COUNT=1;
> > RC=0;			# return code from functions
> > NUM_CPUS=1;		# at least 1 cpu is there
> > NUM_GROUPS=2;		# min number of groups
> > +TEST_NUM=$1;           # To run the desired test (1 or 2)
> > 
> > PWD=`pwd`
> > cd $LTPROOT/testcases/bin/
> > +NUM_CPUS=`cat /proc/cpuinfo | grep -w processor | wc -l`
> > 
> > get_num_groups()	# Number of tasks should be >= number of cpu's (to check \
> > scheduling fairness) {
> > -	NUM_CPUS=`cat /proc/cpuinfo | grep -w processor | wc -l`
> > 	num_grps=$(echo "$NUM_CPUS * 1.5"|bc)	# temp variable num_grps
> > 	int_part=`echo $num_grps | cut -d"." -f1`
> > 	dec_part=`echo $num_grps | cut -d"." -f2`
> > @@ -120,7 +121,7 @@ setup ()
> > 
> > 	# Create different groups
> > 	i=1;
> > -	while [ $i -le $NUM_GROUPS ]
> > +	while [ "$i" -le "$NUM_GROUPS" ]
> 
> probably a dumb question, but what is the difference between the two?
nothing here as such.. just better way
> 
> > 	do
> > 		group=group_$i;
> > 		mkdir /dev/cpuctl/$group;# 2>/dev/null
> > @@ -135,13 +136,25 @@ setup ()
> > }
> > 
> > ##########################  main   #######################
> > -	echo "TEST: CPU CONTROLLER TESTING";
> > +	if [ -z $TEST_NUM ]
> > +	then
> > +		echo "Could not start cpu controller test";
> > +		echo "usage: run_cpuctl_test.sh test_num";
> > +		echo "Skipping the test...";
> > +		exit -1;
> > +	fi;
> > +	echo "TEST $TEST_NUM: CPU CONTROLLER TESTING";
> > 	echo "RUNNING SETUP.....";
> > -	get_num_groups;
> > -	if [ $NUM_GROUPS -lt 2 ]
> > +	if [ ${TEST_NUM} -eq 1 ]
> > 	then
> > -		NUM_GROUPS=2;	# min num of groups for testing
> > -	fi
> > +		get_num_groups;
> > +	elif [ ${TEST_NUM} -eq 2 ]
> > +	then
> > +		NUM_GROUPS=`expr 2 \* $NUM_CPUS`;
> > +	else
> > +		echo "Invalid test number";
> > +		exit -1;
> > +	fi;
> 
> use case esac
Done in a later patch
> 
> > 
> > 	setup;
> > 
> > @@ -153,12 +166,12 @@ setup ()
> > 	#Check if  c source  file has been compiled and then run it in different groups
> > 	if [ -f cpuctl_test01 ]
> > 	then
> > -		echo `date` >> $LTPROOT/output/cpuctl_results.txt;
> > +		echo `date` >> $LTPROOT/output/cpuctl_results_$TEST_NUM.txt;
> > 		for i in $(seq 1 $NUM_GROUPS)
> > 		do
> > 			cp cpuctl_test01 cpuctl_task_$i 2>/dev/null;
> > 			chmod +x cpuctl_task_$i;
> > -			./cpuctl_task_$i $i /dev/cpuctl/group_$i $$ $NUM_CPUS \
> > >>$LTPROOT/output/cpuctl_results.txt 2>/dev/null & +			./cpuctl_task_$i $i \
> > > > /dev/cpuctl/group_$i $$ $NUM_CPUS $TEST_NUM \
> > > > >>$LTPROOT/output/cpuctl_results_$TEST_NUM.txt 2>/dev/null &
> > 			if [ $? -ne 0 ]
> > 			then
> > 				echo "Error: Could not run ./cpuctl_task_$i"
> > @@ -187,14 +200,14 @@ setup ()
> > 		# and they will return non zero exit status. So Test broke!!
> > 		if [ $RC -ne 0 ]
> > 		then
> > -			echo "Task $i exited abnormalywith return value: $RC";
> > +			echo "Task $i exited abnormaly with return value: $RC";
> > 			tst_resm TINFO "Test could not execute for the expected duration";
> > 			cleanup;
> > 			exit -1;
> > 		fi
> > 	done
> > 	echo "Cpu controller test executed successfully.Results written to file";
> > -	echo "Please review the results in $LTPROOT/output/cpuctl_results.txt"
> > +	echo "Please review the results in \
> > $LTPROOT/output/cpuctl_results_$TEST_NUM.txt"  cleanup;
> > 	cd $PWD
> > 	exit 0;		#to let PAN reprt success of test
> > Index: ltp-full-20071130-tested/testcases/kernel/controllers/test_controllers.sh
> > ===================================================================
> > --- ltp-full-20071130-tested.orig/testcases/kernel/controllers/test_controllers.sh
> >                 
> > +++ ltp-full-20071130-tested/testcases/kernel/controllers/test_controllers.sh
> > @@ -39,7 +39,8 @@ then
> > 	CPU_CONTROLLER=`grep -w cpu /proc/cgroups | cut -f1`;
> > 	if [ "$CPU_CONTROLLER" = "cpu" ]
> > 	then
> > -		$LTPROOT/testcases/bin/run_cpuctl_test.sh;
> > +		$LTPROOT/testcases/bin/run_cpuctl_test.sh 1;
> > +		$LTPROOT/testcases/bin/run_cpuctl_test.sh 2;
> > 	else
> > 		echo "CONTROLLERS TESTCASES: WARNING";
> > 		echo "Kernel does not support for cpu controller";
> > 
> > Thanks,
> > Sudhir Kumar
> > LTC, ISTL
> 
Thanks again!!

Sudhir
> -- 
> regards,
> Dhaval

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic