On Tue, 2009-07-28 at 14:21 +0800, Shi Weihua wrote: > My workmate Miao Xie ([email protected]) 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 <[email protected]>
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 <[email protected]> > */ > +/* Restructure for LTP: Shi Weihua <[email protected]> > */ > +/* > */ > +/******************************************************************************/ > + > +#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 <[email protected]> > */ > +/* Restructure for LTP: Shi Weihua <[email protected]> > */ > +/* > */ > +/******************************************************************************/ > +/*++ 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 x...@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 <[email protected]> > ## > +## Restructure for LTP: Shi Weihua <[email protected]> > ## > +## > ## > +################################################################################ > + > +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 <[email protected]> Created this test > # > # 02/03/09 Miao Xie <[email protected]> Add cpuset testset > # > +# 07/07/09 Shi Weihua <[email protected]> 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 [email protected] https://lists.sourceforge.net/lists/listinfo/ltp-list
