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

Reply via email to