public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
From: Subrata Modak <subrata@linux.vnet.ibm.com>
To: Shi Weihua <shiwh@cn.fujitsu.com>
Cc: ltp-list <ltp-list@lists.sourceforge.net>
Subject: Re: [LTP] [PATCH] Add new testcases for cpu controller
Date: Thu, 30 Jul 2009 23:59:42 +0530	[thread overview]
Message-ID: <1248978583.5788.67.camel@subratamodak.linux.ibm.com> (raw)
In-Reply-To: <4A6E9905.5060300@cn.fujitsu.com>

On Tue, 2009-07-28 at 14:21 +0800, Shi Weihua wrote: 
> My workmate Miao Xie (miaox@cn.fujitsu.com) has created some testcases for 
> cgroup's subsystem "cpu" in the last year. And, He catched some kernel bugs 
> through these testcases. So we think you glad to push them into LTP.
> 
> There are total 22 testcases that have been added. These testcases contain 
> the basis operation test and part functionality test of cpu controller.
> 
> How to run this test:
> 	# runltp -f controllers
> 
> Result:
> cpuctl_test_fj    1  PASS  :  case1    PASS
> cpuctl_test_fj    1  PASS  :  case2    PASS
> cpuctl_test_fj    1  PASS  :  case3    PASS
> cpuctl_test_fj    1  PASS  :  case4    PASS
> cpuctl_fj_simple_echo: write error: Invalid argument
> cpuctl_test_fj    1  PASS  :  case5    PASS
> cpuctl_fj_simple_echo: write error: Invalid argument
> cpuctl_test_fj    1  PASS  :  case6    PASS
> cpuctl_fj_simple_echo: write error: Invalid argument
> cpuctl_test_fj    1  PASS  :  case7    PASS
> cpuctl_test_fj    1  PASS  :  case8    PASS
> cpuctl_test_fj    1  PASS  :  case9    PASS
> cpuctl_test_fj    1  PASS  :  case10    PASS
> cpuctl_test_fj    1  PASS  :  case11    PASS
> cpuctl_test_fj    1  PASS  :  case12    PASS
> cpuctl_test_fj    1  PASS  :  case13    PASS
> cpuctl_test_fj    1  PASS  :  case14    PASS
> cpuctl_fj_simple_echo: write error: Invalid argument
> cpuctl_test_fj    1  PASS  :  case15    PASS
> cpuctl_fj_simple_echo: write error: Invalid argument
> cpuctl_test_fj    1  PASS  :  case16    PASS
> cpuctl_fj_simple_echo: write error: Invalid argument
> cpuctl_test_fj    1  PASS  :  case17    PASS
> cpuctl_test_fj    1  PASS  :  case18    PASS
> pid 19840 cpu_usage 99
> cpuctl_test_fj    1  PASS  :  case19    PASS
> pid 19869 cpu_usage 99
> cpuctl_test_fj    1  PASS  :  case20    PASS
> pid 19898 cpu_usage 47
> pid 19898 cpu_usage 47
> pid 19898 cpu_usage 45
> pid 19898 cpu_usage 49
> pid 19898 cpu_usage 47
> pid 19898 cpu_usage 49
> pid 19898 cpu_usage 45
> pid 19898 cpu_usage 47
> pid 19898 cpu_usage 45
> pid 19898 cpu_usage 49
> cpuctl_test_fj    1  PASS  :  case21    PASS
> pid 20056 cpu_usage 99
> pid 20056 cpu_usage 99
> pid 20056 cpu_usage 99
> pid 20056 cpu_usage 99
> pid 20056 cpu_usage 99
> pid 20056 cpu_usage 99
> pid 20056 cpu_usage 99
> pid 20056 cpu_usage 99
> pid 20056 cpu_usage 99
> pid 20056 cpu_usage 99
> cpuctl_test_fj    1  PASS  :  case22    PASS
> #The forward messages of "write error: Invalid argument" are expected result,
> #so don't worry about them.
> 
> Signed-off-by: Shi Weihua <shiwh@cn.fujitsu.com>

Thanks for these test cases.

Regards--
Subrata

> ---
> diff -urpN ltp-full-20090630.orig/testcases/kernel/controllers/cpuctl_fj/cpuctl_fj_cpu-hog.c ltp-full-20090630/testcases/kernel/controllers/cpuctl_fj/cpuctl_fj_cpu-hog.c
> --- ltp-full-20090630.orig/testcases/kernel/controllers/cpuctl_fj/cpuctl_fj_cpu-hog.c	1969-12-31 19:00:00.000000000 -0500
> +++ ltp-full-20090630/testcases/kernel/controllers/cpuctl_fj/cpuctl_fj_cpu-hog.c	2009-07-14 08:37:56.000000000 -0400
> @@ -0,0 +1,69 @@
> +/******************************************************************************/
> +/*                                                                            */
> +/* Copyright (c) 2009 FUJITSU LIMITED                                         */
> +/*                                                                            */
> +/* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA    */
> +/*                                                                            */
> +/* Author: Miao Xie <miaox@cn.fujitsu.com>                                    */
> +/* Restructure for LTP: Shi Weihua <shiwh@cn.fujitsu.com>                     */
> +/*                                                                            */
> +/******************************************************************************/
> +
> +#include <stdio.h>
> +#include <math.h>
> +#include <err.h>
> +#include <errno.h>
> +#include <signal.h>
> +
> +#define __USE_GNU
> +#include <sched.h>
> +
> +#define UNUSED __attribute__ ((unused))
> +
> +unsigned long count;
> +volatile int start = 0;
> +volatile double f = 2744545.34456455;
> +
> +void sighandler(UNUSED int signo)
> +{
> +	start = !start;
> +}
> +
> +int main(void)
> +{
> +	sigset_t sigset;
> +	struct sigaction sa;
> +
> +	sa.sa_handler = sighandler;
> +	if (sigemptyset(&sa.sa_mask) < 0)
> +		err(1, "sigemptyset()");
> +
> +	sa.sa_flags = 0;
> +	if (sigaction(SIGUSR1, &sa, NULL) < 0)
> +		err(1, "sigaction()");
> +
> +	if (sigemptyset(&sigset) < 0)
> +		err(1, "sigemptyset()");
> +
> +	sigsuspend(&sigset);
> +	if (errno != EINTR)
> +		err(1, "sigsuspend()");
> +
> +	while (start) {
> +		f = sqrt(f * f);
> +	}
> +
> +	return 0;
> +}
> diff -urpN ltp-full-20090630.orig/testcases/kernel/controllers/cpuctl_fj/cpuctl_fj_simple_echo.c ltp-full-20090630/testcases/kernel/controllers/cpuctl_fj/cpuctl_fj_simple_echo.c
> --- ltp-full-20090630.orig/testcases/kernel/controllers/cpuctl_fj/cpuctl_fj_simple_echo.c	1969-12-31 19:00:00.000000000 -0500
> +++ ltp-full-20090630/testcases/kernel/controllers/cpuctl_fj/cpuctl_fj_simple_echo.c	2009-07-14 08:37:58.000000000 -0400
> @@ -0,0 +1,72 @@
> +/******************************************************************************/
> +/*                                                                            */
> +/* Copyright (c) 2009 FUJITSU LIMITED                                         */
> +/*                                                                            */
> +/* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA    */
> +/*                                                                            */
> +/* Author: Miao Xie <miaox@cn.fujitsu.com>                                    */
> +/* Restructure for LTP: Shi Weihua <shiwh@cn.fujitsu.com>                     */
> +/*                                                                            */
> +/******************************************************************************/
> +/*++ simple_echo.c
> + *
> + * DESCRIPTION:
> + *	The command "echo" can't return the errno. So we write this program to
> + * instead of "echo".
> + *
> + * Author:
> + * -------
> + * 2008/04/17 created by Miao Xie@FNST
> + *
> + */
> +
> +#include <stdio.h>
> +#include <string.h>
> +#include <sys/types.h>
> +#include <sys/stat.h>
> +#include <fcntl.h>
> +#include <unistd.h>
> +
> +#include <err.h>
> +#include <errno.h>
> +
> +int main(int argc, char **argv)
> +{
> +	int fd = 1;
> +	int ret = 0;
> +
> +	if (argc != 2 && argc != 3) {
> +		fprintf(stderr, "USAGE: %s STRING [ostream]\n", argv[0]);
> +		return 1;
> +	}
> +
> +	if (argc == 3) {
> +		fd = open(argv[2], O_RDWR | O_SYNC);
> +		if (fd == -1)
> +			err(errno, "%s", argv[2]);
> +	}
> +
> +	ret = write(fd, argv[1], strlen(argv[1]));
> +	if (ret  == -1)
> +		err(errno, "write error");
> +
> +	if (fd != 1) {
> +		ret = close(fd);
> +		if (ret == -1)
> +			err(errno, "close error");
> +	}
> +
> +	return 0;
> +}
> diff -urpN ltp-full-20090630.orig/testcases/kernel/controllers/cpuctl_fj/Makefile ltp-full-20090630/testcases/kernel/controllers/cpuctl_fj/Makefile
> --- ltp-full-20090630.orig/testcases/kernel/controllers/cpuctl_fj/Makefile	1969-12-31 19:00:00.000000000 -0500
> +++ ltp-full-20090630/testcases/kernel/controllers/cpuctl_fj/Makefile	2009-07-14 08:37:58.000000000 -0400
> @@ -0,0 +1,21 @@
> +CFLAGS += -Wall -O2 -Wextra
> +LOADLIBES+= -lm
> +CPPFLAGS += -I../../../../include -I../libcontrollers
> +LDLIBS += -L../../../../lib/ -lltp
> +
> +SRCS=$(wildcard *.c)
> +OBJECTS=$(patsubst %.c,%.o,$(SRCS))
> +TARGETS=$(patsubst %.c,%,$(SRCS))
> +
> +all: $(TARGETS)
> +
> +$(TARGETS): %: %.o
> +
> +test:
> +	@./runtest.sh
> +
> +clean:
> +	rm -f $(TARGETS) $(OBJECTS)
> +
> +install:
> +	@set -e; for i in $(TARGETS) *.sh; do ln -f $$i ../../../bin/$$i ; chmod +x $$i ; done
> diff -urpN ltp-full-20090630.orig/testcases/kernel/controllers/cpuctl_fj/README ltp-full-20090630/testcases/kernel/controllers/cpuctl_fj/README
> --- ltp-full-20090630.orig/testcases/kernel/controllers/cpuctl_fj/README	1969-12-31 19:00:00.000000000 -0500
> +++ ltp-full-20090630/testcases/kernel/controllers/cpuctl_fj/README	2009-07-28 06:00:01.000000000 -0400
> @@ -0,0 +1,41 @@
> +
> +TEST SUITE:
> +
> +The directory cpuctl_fj contains the tests related to the cpu controller.
> +
> +Cpu controller is a mechanism for assigning cpu resource (in percent) to 
> +a set of tasks.
> +
> +There are total 22 testcases that have been added. These testcases 
> +contain the basis operation test and part functionality test of cpu 
> +controller.
> +
> +NOTE: the test can be run by root only.
> +
> +TESTS AIM:
> +
> +The aim of the tests is to test the functionality of cpu controller.
> +
> +FILES DESCRIPTION:
> +
> +run_cpuctl_test_fj.sh
> +--------------------
> +This script runs all the 22 testcases.
> +
> +cpuctl_fj_cpu-hog.c
> +--------------------
> +The program does a calculation of sqrt till catched a signal.
> +
> +cpuctl_fj_simple_echo.c
> +--------------------
> +The command "echo" can't return the errno. So we write this program to
> +instead of "echo". 
> +
> +Makefile
> +--------------------
> +The usual makefile for this directory
> +
> +README
> +------
> +The one you have gone through.
> +
> diff -urpN ltp-full-20090630.orig/testcases/kernel/controllers/cpuctl_fj/run_cpuctl_test_fj.sh ltp-full-20090630/testcases/kernel/controllers/cpuctl_fj/run_cpuctl_test_fj.sh
> --- ltp-full-20090630.orig/testcases/kernel/controllers/cpuctl_fj/run_cpuctl_test_fj.sh	1969-12-31 19:00:00.000000000 -0500
> +++ ltp-full-20090630/testcases/kernel/controllers/cpuctl_fj/run_cpuctl_test_fj.sh	2009-07-28 05:58:31.000000000 -0400
> @@ -0,0 +1,702 @@
> +#! /bin/sh
> +
> +################################################################################
> +##                                                                            ##
> +## Copyright (c) 2009 FUJITSU LIMITED                                         ##
> +##                                                                            ##
> +## 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA    ##
> +##                                                                            ##
> +## Author: Miao Xie <miaox@cn.fujitsu.com>                                    ##
> +## Restructure for LTP: Shi Weihua <shiwh@cn.fujitsu.com>                     ##
> +##                                                                            ##
> +################################################################################
> +
> +cd $LTPROOT/testcases/bin
> +
> +export TCID="cpuctl_test_fj"
> +export TST_TOTAL=22
> +export TST_COUNT=1
> +
> +CPUCTL="/dev/cpuctl"
> +CPUCTL_TMP="/tmp/cpuctl_tmp"
> +SLEEP_SEC=5
> +
> +# Create $CPUCTL &  mount the cgroup file system with cpu controller
> +# clean any group created earlier (if any)
> +setup()
> +{
> +	if [ -e $CPUCTL ]
> +	then
> +		tst_resm TWARN "WARN:$CPUCTL already exist..overwriting"
> +		cleanup || {
> +			tst_resm TFAIL "Err: Can't cleanup... Exiting"
> +			exit -1;
> +		}
> +	fi
> +
> +	mkdir -p "$CPUCTL" || return 1
> +
> +	mount -t cgroup -o cpu cpuctl "$CPUCTL" || {
> +		tst_resm TFAIL "failed to mount cpu subsytem... Exiting"
> +		cleanup;
> +		return 1;
> +	}
> +}
> +
> +# Write the cleanup function
> +cleanup()
> +{
> +	mount | grep "$CPUCTL" &> /dev/null || {
> +		rm -rf "$CPUCTL" &> /dev/null
> +		return 0
> +	}
> +
> +	find $CPUCTL -type d | sort | sed -n '2,$p' | tac | while read tmpdir
> +	do
> +		while read tmppid
> +		do
> +			echo $tmppid > $CPUCTL/tasks
> +		done  < $tmpdir/tasks
> +		rmdir $tmpdir || return 1
> +	done
> +
> +	umount $CPUCTL || return 1
> +	rmdir $CPUCTL &> /dev/null
> +}
> +
> +creat_process()
> +{
> +	cat /dev/zero > /dev/null 2>/dev/null &
> +	taskset -p 1 $! &>/dev/null
> +	echo $!
> +}
> +
> +get_cpu_usage()
> +{
> +	top=($(top -b -n 1 -p $1 | tail -2 | head -1))
> +	top=${top[8]}
> +	top=`echo $top | awk -F "." '{print $1}'`
> +	echo "$top"
> +}
> +
> +kill_all_pid()
> +{
> +	while read pid_to_be_killed
> +	do
> +		kill -9 $pid_to_be_killed
> +	done
> +}
> +
> +TESTUSER="`whoami`"
> +if [ "$TESTUSER" != "root" ]
> +then
> +	tst_brkm TBROK ignored "Test must be run as root"
> +	exit 0
> +fi
> +
> +# only root directory
> +case1 ()
> +{
> +	[ -f "$CPUCTL/cpu.shares" ] || {
> +		tst_resm TFAIL "Err: No cpu.shares."
> +		return 1
> +	}
> +
> +	shares=`cat $CPUCTL/cpu.shares`
> +	if [ $shares -ne 1024 ]
> +	then
> +		tst_resm TFAIL "Err: Init value is not 1024"
> +		return 1;
> +	fi
> +
> +	ps -eo pid,rtprio > /tmp/pids_file1 &
> +	pspid=$!
> +	wait $pspid
> +	cat /tmp/pids_file1 | grep '-' | tr -d '-' | tr -d ' ' | \
> +	grep -v "$pspid" > /tmp/pids_file2
> +
> +	while read pid
> +	do
> +		task=`cat $CPUCTL/tasks | grep "\b$pid\b"`
> +		if [ -z $task ]
> +		then
> +			tst_resm TFAIL  "Err: Some normal tasks aren't in the root group"
> +			return 1
> +		fi
> +	done < /tmp/pids_file2
> +}
> +
> +# create a child directory
> +case2 ()
> +{
> +	mkdir $CPUCTL/tmp
> +	if [ $? -ne 0 ]
> +	then
> +		return 1;
> +	fi
> +
> +	[ -d "$CPUCTL/tmp" ] || return 1
> +
> +	[ -f "$CPUCTL/tmp/cpu.shares" ] || return 1
> +
> +	shares=`cat $CPUCTL/tmp/cpu.shares`
> +	if [ $shares -ne 1024 ]
> +	then
> +		return 1;
> +	fi
> +
> +	task=`cat $CPUCTL/tmp/tasks`
> +	if [ "$task" != "" ]
> +	then
> +		return 1
> +	fi
> +}
> +
> +# create a grand-directory
> +case3 ()
> +{
> +	mkdir $CPUCTL/tmp
> +	if [ $? -ne 0 ]
> +	then
> +		return 1;
> +	fi
> +
> +	mkdir $CPUCTL/tmp/tmp1
> +	if [ $? -ne 0 ]
> +	then
> +		return 1;
> +	fi
> +
> +	[ -d "$CPUCTL/tmp/tmp1" ] || return 1
> +
> +	[ -f "$CPUCTL/tmp/tmp1/cpu.shares" ] || return 1
> +
> +	shares=`cat $CPUCTL/tmp/tmp1/cpu.shares`
> +	if [ $shares -ne 1024 ]
> +	then
> +		return 1;
> +	fi
> +
> +	task=`cat $CPUCTL/tmp/tmp1/tasks`
> +	if [ "$task" != "" ]
> +	then
> +		return 1
> +	fi
> +}
> +
> +# attach general process
> +case4 ()
> +{
> +	mkdir $CPUCTL/tmp
> +	if [ $? -ne 0 ]
> +	then
> +		return 1;
> +	fi
> +
> +	echo 1 > $CPUCTL/tmp/tasks
> +	if [ $? -ne 0 ]
> +	then
> +		return 1;
> +	fi
> +
> +	tasks=`cat $CPUCTL/tmp/tasks`
> +	if [ $tasks -ne 1 ]
> +	then
> +		return 1;
> +	fi
> +}
> +
> +# attach realtime process
> +case5 ()
> +{
> +	mkdir $CPUCTL/tmp
> +	if [ $? -ne 0 ]
> +	then
> +		return 1;
> +	fi
> +
> +	./cpuctl_fj_simple_echo 3 $CPUCTL/tmp/tasks
> +	if [ $? -ne 22 ]	# define EINVAL 22  /* Invalid argument */
> +	then
> +		return 1;
> +	fi
> +
> +	tasks=`cat $CPUCTL/tmp/tasks`
> +	if [ "$tasks" != "" ]
> +	then
> +		return 1;
> +	fi
> +}
> +
> +# modify the shares of the root group
> +case6 ()
> +{
> +	./cpuctl_fj_simple_echo 2048 $CPUCTL/cpu.shares
> +	if [ $? -ne 22 ]	# define EINVAL 22  /* Invalid argument */
> +	then
> +		return 1;
> +	fi
> +
> +	shares=`cat $CPUCTL/cpu.shares`
> +	if [ $shares -ne 1024 ]
> +	then
> +		return 1;
> +	fi
> +}
> +
> +# echo negative into shares
> +case7 ()
> +{
> +	mkdir $CPUCTL/tmp
> +
> +	./cpuctl_fj_simple_echo -1 $CPUCTL/tmp/cpu.shares
> +	if [ $? -ne 22 ]	# define EINVAL 22  /* Invalid argument */
> +	then
> +		return 1;
> +	fi
> +
> +	shares=`cat $CPUCTL/tmp/cpu.shares`
> +	if [ $shares -ne 1024 ]
> +	then
> +		return 1;
> +	fi
> +
> +	./cpuctl_fj_cpu-hog &
> +	pid=$!
> +
> +	echo $pid > $CPUCTL/tmp/tasks
> +
> +	/bin/kill -s SIGUSR1 $pid
> +	sleep $SLEEP_SEC
> +	/bin/kill -s SIGUSR1 $pid
> +	wait $pid
> +}
> +
> +# echo 0 into shares
> +case8 ()
> +{
> +	mkdir $CPUCTL/tmp
> +
> +	echo 0 > $CPUCTL/tmp/cpu.shares
> +	if [ $? -ne 0 ]
> +	then
> +		return 1;
> +	fi
> +
> +	shares=`cat $CPUCTL/tmp/cpu.shares`
> +	if [ $shares -ne 2 ]
> +	then
> +		return 1;
> +	fi
> +
> +	./cpuctl_fj_cpu-hog &
> +	pid=$!
> +
> +	echo $pid > $CPUCTL/tmp/tasks
> +
> +	/bin/kill -s SIGUSR1 $pid
> +	sleep $SLEEP_SEC
> +	/bin/kill -s SIGUSR1 $pid
> +	wait $pid
> +}
> +
> +# echo 1 into shares
> +case9 ()
> +{
> +	mkdir $CPUCTL/tmp
> +
> +	echo 1 > $CPUCTL/tmp/cpu.shares
> +	if [ $? -ne 0 ]
> +	then
> +		return 1;
> +	fi
> +
> +	shares=`cat $CPUCTL/tmp/cpu.shares`
> +	if [ $shares -ne 2 ]
> +	then
> +		return 1;
> +	fi
> +
> +	./cpuctl_fj_cpu-hog &
> +	pid=$!
> +
> +	echo $pid > $CPUCTL/tmp/tasks
> +
> +	/bin/kill -s SIGUSR1 $pid
> +	sleep $SLEEP_SEC
> +	/bin/kill -s SIGUSR1 $pid
> +	wait $pid
> +}
> +
> +# echo 2 into shares
> +case10 ()
> +{
> +	mkdir $CPUCTL/tmp
> +
> +	echo 2 > $CPUCTL/tmp/cpu.shares
> +	if [ $? -ne 0 ]
> +	then
> +		return 1;
> +	fi
> +
> +	shares=`cat $CPUCTL/tmp/cpu.shares`
> +	if [ $shares -ne 2 ]
> +	then
> +		return 1;
> +	fi
> +
> +	./cpuctl_fj_cpu-hog &
> +	pid=$!
> +
> +	echo $pid > $CPUCTL/tmp/tasks
> +
> +	/bin/kill -s SIGUSR1 $pid
> +	sleep $SLEEP_SEC
> +	/bin/kill -s SIGUSR1 $pid
> +	wait $pid
> +}
> +
> +# echo 3 into shares
> +case11 ()
> +{
> +	mkdir $CPUCTL/tmp
> +
> +	echo 3 > $CPUCTL/tmp/cpu.shares
> +	if [ $? -ne 0 ]
> +	then
> +		return 1;
> +	fi
> +
> +	shares=`cat $CPUCTL/tmp/cpu.shares`
> +	if [ $shares -ne 3 ]
> +	then
> +		return 1;
> +	fi
> +
> +	./cpuctl_fj_cpu-hog &
> +	pid=$!
> +
> +	echo $pid > $CPUCTL/tmp/tasks
> +
> +	/bin/kill -s SIGUSR1 $pid
> +	sleep $SLEEP_SEC
> +	/bin/kill -s SIGUSR1 $pid
> +	wait $pid
> +}
> +
> +# echo 2048 into shares
> +case12 ()
> +{
> +	mkdir $CPUCTL/tmp
> +
> +	echo 2048 > $CPUCTL/tmp/cpu.shares
> +	if [ $? -ne 0 ]
> +	then
> +		return 1;
> +	fi
> +
> +	shares=`cat $CPUCTL/tmp/cpu.shares`
> +	if [ $shares -ne 2048 ]
> +	then
> +		return 1;
> +	fi
> +
> +	./cpuctl_fj_cpu-hog &
> +	pid=$!
> +
> +	echo $pid > $CPUCTL/tmp/tasks
> +
> +	/bin/kill -s SIGUSR1 $pid
> +	sleep $SLEEP_SEC
> +	/bin/kill -s SIGUSR1 $pid
> +	wait $pid
> +}
> +
> +max_shares=$((2**18))
> +
> +# echo MAX_SHARES into shares
> +case13 ()
> +{
> +	mkdir $CPUCTL/tmp
> +
> +	echo $max_shares > $CPUCTL/tmp/cpu.shares
> +	if [ $? -ne 0 ]
> +	then
> +		return 1;
> +	fi
> +
> +	shares=`cat $CPUCTL/tmp/cpu.shares`
> +	if [ "$shares" != "$max_shares" ]
> +	then
> +		return 1;
> +	fi
> +
> +	./cpuctl_fj_cpu-hog &
> +	pid=$!
> +
> +	echo $pid > $CPUCTL/tmp/tasks
> +
> +	/bin/kill -s SIGUSR1 $pid
> +	sleep $SLEEP_SEC
> +	/bin/kill -s SIGUSR1 $pid
> +	wait $pid
> +}
> +
> +# echo MAX_SHARES+1 into shares
> +case14 ()
> +{
> +	mkdir $CPUCTL/tmp
> +
> +	echo $(($max_shares+1)) > $CPUCTL/tmp/cpu.shares
> +	if [ $? -ne 0 ]
> +	then
> +		return 1;
> +	fi
> +
> +	shares=`cat $CPUCTL/tmp/cpu.shares`
> +	if [ "$shares" != "$max_shares" ]
> +	then
> +		return 1;
> +	fi
> +
> +	./cpuctl_fj_cpu-hog &
> +	pid=$!
> +
> +	echo $pid > $CPUCTL/tmp/tasks
> +
> +	/bin/kill -s SIGUSR1 $pid
> +	sleep $SLEEP_SEC
> +	/bin/kill -s SIGUSR1 $pid
> +	wait $pid
> +}
> +
> +# echo float number into shares
> +case15 ()
> +{
> +	mkdir $CPUCTL/tmp
> +
> +	./cpuctl_fj_simple_echo 2048.23 $CPUCTL/tmp/cpu.shares
> +	if [ $? -ne 22 ]	# define EINVAL 22  /* Invalid argument */
> +	then
> +		return 1;
> +	fi
> +
> +	shares=`cat $CPUCTL/tmp/cpu.shares`
> +	if [ $shares -ne 1024 ]
> +	then
> +		return 1;
> +	fi
> +
> +	./cpuctl_fj_cpu-hog &
> +	pid=$!
> +
> +	echo $pid > $CPUCTL/tmp/tasks
> +
> +	/bin/kill -s SIGUSR1 $pid
> +	sleep $SLEEP_SEC
> +	/bin/kill -s SIGUSR1 $pid
> +	wait $pid
> +}
> +
> +# echo a string into shares. This string begins with some number, and ends with
> +# charactor.
> +case16 ()
> +{
> +	mkdir $CPUCTL/tmp
> +
> +	./cpuctl_fj_simple_echo 2048ABC $CPUCTL/tmp/cpu.shares
> +	if [ $? -ne 22 ]	# define EINVAL 22  /* Invalid argument */
> +	then
> +		return 1;
> +	fi
> +
> +	shares=`cat $CPUCTL/tmp/cpu.shares`
> +	if [ $shares -ne 1024 ]
> +	then
> +		return 1;
> +	fi
> +
> +	./cpuctl_fj_cpu-hog &
> +	pid=$!
> +
> +	echo $pid > $CPUCTL/tmp/tasks
> +
> +	/bin/kill -s SIGUSR1 $pid
> +	sleep $SLEEP_SEC
> +	/bin/kill -s SIGUSR1 $pid
> +	wait $pid
> +}
> +
> +# echo a string into shares. This string begins with charactors.
> +case17 ()
> +{
> +	mkdir $CPUCTL/tmp
> +
> +	./cpuctl_fj_simple_echo ABC $CPUCTL/tmp/cpu.shares
> +	if [ $? -ne 22 ]	 # define EINVAL 22  /* Invalid argument */
> +	then
> +		return 1;
> +	fi
> +
> +	shares=`cat $CPUCTL/tmp/cpu.shares`
> +	if [ $shares -ne 1024 ]
> +	then
> +		return 1;
> +	fi
> +
> +	./cpuctl_fj_cpu-hog &
> +	pid=$!
> +
> +	echo $pid > $CPUCTL/tmp/tasks
> +
> +	/bin/kill -s SIGUSR1 $pid
> +	sleep $SLEEP_SEC
> +	/bin/kill -s SIGUSR1 $pid
> +	wait $pid
> +}
> +
> +case18()
> +{
> +	mkdir "$CPUCTL/1"
> +	echo 0x8000000000000000 > "$CPUCTL/1/cpu.shares"
> +	pid=$(creat_process)
> +	echo $pid > "$CPUCTL/1/tasks"
> +	kill -9 $pid
> +	return 0
> +}
> +
> +case19()
> +{
> +	mkdir "$CPUCTL/1"
> +	pid=$(creat_process)
> +	pid_other=$(creat_process)
> +
> +	echo 2000000000 > "$CPUCTL/1/cpu.shares"
> +	echo $pid > "$CPUCTL/1/tasks"
> +	cpu_usage=$(get_cpu_usage $pid)
> +	echo "pid $pid cpu_usage $cpu_usage"
> +
> +	kill -9 $pid $pid_other
> +	expr 96 \< "$cpu_usage" \& "$cpu_usage" \< 103 &> /dev/null || return 1
> +	return 0
> +}
> +
> +case20()
> +{
> +	mkdir "$CPUCTL/1"
> +	pid=$(creat_process)
> +	pid_other=$(creat_process)
> +
> +	echo 20000000000 > "$CPUCTL/1/cpu.shares"
> +	echo $pid > "$CPUCTL/1/tasks"
> +	cpu_usage=$(get_cpu_usage $pid)
> +	echo "pid $pid cpu_usage $cpu_usage"
> +
> +	kill -9 $pid $pid_other
> +	expr 96 \< "$cpu_usage" \& "$cpu_usage" \< 103 &> /dev/null || return 1
> +	return 0
> +}
> +
> +case21()
> +{
> +	mkdir "$CPUCTL/1" "$CPUCTL/1/2"
> +	pid=$(creat_process)
> +	echo $pid > "$CPUCTL/1/tasks"
> +
> +	while ((1))
> +	do
> +		creat_process > "$CPUCTL/1/2/tasks"
> +		sleep 1
> +	done &
> +	loop_pid=$!
> +
> +	sleep 10
> +	ret=0
> +
> +	for ((top_times=0; top_times<10 && ret==0; top_times++))
> +	do
> +		cpu_usage=$(get_cpu_usage $pid)
> +		echo "pid $pid cpu_usage $cpu_usage"
> +		expr 44 \< "$cpu_usage" \& "$cpu_usage" \< 56 &> /dev/null
> +		ret=$?
> +	done
> +
> +	kill -9 $pid $loop_pid &> /dev/null
> +	wait $pid $loop_pid &>/dev/null
> +	sleep 2
> +	kill_all_pid < "$CPUCTL/1/2/tasks" &>/dev/null
> +	sleep 2
> +	return $ret
> +}
> +
> +case22()
> +{
> +	mkdir "$CPUCTL/1" "$CPUCTL/1/2"
> +	pid=$(creat_process)
> +	while ((1))
> +	do
> +		echo $pid > "$CPUCTL/1/tasks"
> +		echo $pid > "$CPUCTL/1/2/tasks"
> +		sleep 1
> +	done &
> +	loop_pid=$!
> +
> +	sleep 10
> +	ret=0
> +
> +	for ((top_times=0; top_times<10 && ret==0; top_times++))
> +	do
> +		cpu_usage=$(get_cpu_usage $pid)
> +		echo "pid $pid cpu_usage $cpu_usage"
> +		expr 94 \< "$cpu_usage" \& "$cpu_usage" \< 106 &> /dev/null
> +		ret=$?
> +	done
> +	
> +	kill -9 $pid $loop_pid &> /dev/null
> +	wait $pid $loop_pid &>/dev/null
> +	return $ret
> +}
> +
> +rm -rf "$CPUCTL_TMP" &>/dev/null || exit 1
> +mkdir -p "$CPUCTL_TMP" || exit 1
> +
> +# test
> +do_test ()
> +{
> +	for (( i=1; i<=$TST_TOTAL; i++ ))
> +	do
> +		setup || {
> +			tst_resm TFAIL "case$i    FAIL"
> +			continue
> +		}
> +
> +		case$i || {
> +			tst_resm TFAIL "case$i    FAIL"
> +			cleanup
> +			continue
> +		}
> +
> +		cleanup || {
> +			tst_resm TFAIL "case$i    FAIL"
> +		}
> +		
> +		tst_resm TPASS "case$i    PASS"
> +	done
> +}
> +
> +do_test
> +
> +rm -rf "$CPUCTL_TMP" &>/dev/null
> +
> diff -urpN ltp-full-20090630.orig/testcases/kernel/controllers/Makefile ltp-full-20090630/testcases/kernel/controllers/Makefile
> --- ltp-full-20090630.orig/testcases/kernel/controllers/Makefile	2009-06-15 14:53:06.000000000 -0400
> +++ ltp-full-20090630/testcases/kernel/controllers/Makefile	2009-07-28 06:18:00.000000000 -0400
> @@ -13,6 +13,7 @@ ifdef CROSS_COMPILE
>  ifeq ($(CHECK_CGROUP),cgroup)
>  SUBDIRS += cgroup
>  SUBDIRS += cpuctl
> +SUBDIRS += cpuctl_fj
>  SUBDIRS += memctl
>  SUBDIRS += io-throttle
>  SUBDIRS += freezer
> @@ -35,6 +36,7 @@ endif
> 
>  ifeq ($(CHECK_CPUCTL),cpu)
>  SUBDIRS += cpuctl
> +SUBDIRS += cpuctl_fj
>  else
>  $(info "Kernel is not compiled with cpu controller support")
>  endif
> diff -urpN ltp-full-20090630.orig/testcases/kernel/controllers/test_controllers.sh ltp-full-20090630/testcases/kernel/controllers/test_controllers.sh
> --- ltp-full-20090630.orig/testcases/kernel/controllers/test_controllers.sh	2009-05-11 06:02:46.000000000 -0400
> +++ ltp-full-20090630/testcases/kernel/controllers/test_controllers.sh	2009-07-28 06:18:39.000000000 -0400
> @@ -32,6 +32,7 @@
>  #                                                                                #
>  #  20/12/07  Sudhir Kumar <sudhirkumarmalik@in.ibm.com>   Created this test      #
>  #  02/03/09  Miao Xie     <miaox@cn.fujitsu.com>          Add cpuset testset     #
> +#  07/07/09  Shi Weihua   <shiwh@cn.fujitsu.com>      Add cpu testset of Fujitsu #
>  #                                                                                #
>  ##################################################################################
> 
> @@ -57,6 +58,8 @@ then
>  		# Add the latency testcase to be run
>  		$LTPROOT/testcases/bin/run_cpuctl_latency_test.sh 1;
>  		$LTPROOT/testcases/bin/run_cpuctl_latency_test.sh 2;
> +		# Add the testcases from Fujitsu
> +		$LTPROOT/testcases/bin/run_cpuctl_test_fj.sh
>  	else
>  		echo "CONTROLLERS TESTCASES: WARNING";
>  		echo "Kernel does not support for cpu controller";
> 


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

      reply	other threads:[~2009-07-30 18:30 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-07-28  6:21 [LTP] [PATCH] Add new testcases for cpu controller Shi Weihua
2009-07-30 18:29 ` Subrata Modak [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1248978583.5788.67.camel@subratamodak.linux.ibm.com \
    --to=subrata@linux.vnet.ibm.com \
    --cc=ltp-list@lists.sourceforge.net \
    --cc=shiwh@cn.fujitsu.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox