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
prev parent 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