• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/bin/sh
2
3################################################################################
4##                                                                            ##
5## Copyright (c) 2015 SUSE                                                    ##
6##                                                                            ##
7## This program is free software;  you can redistribute it and#or modify      ##
8## it under the terms of the GNU General Public License as published by       ##
9## the Free Software Foundation; either version 2 of the License, or          ##
10## (at your option) any later version.                                        ##
11##                                                                            ##
12## This program is distributed in the hope that it will be useful, but        ##
13## WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ##
14## or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License   ##
15## for more details.                                                          ##
16##                                                                            ##
17## You should have received a copy of the GNU General Public License          ##
18## along with this program;  if not, write to the Free Software               ##
19## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301   ##
20## USA                                                                        ##
21##                                                                            ##
22## Author: Cedric Hnyda <chnyda@suse.com>                                     ##
23##                                                                            ##
24################################################################################
25
26# Usage
27# ./cpuacct.sh nbsubgroup nbprocess
28#
29# 1) nbsubgroup : number of subgroup to create
30# 2) nbprocess : number of process to attach to each subgroup
31#
32# Description
33#
34# 1) Find if cpuacct is mounted, if not mounted, cpuacct will be mounted
35# 2) Check that sum ltp_test/subgroup*/cpuacct.usage = ltp_test/cpuacct.usage
36#
37
38TST_ID="cpuacct"
39TST_SETUP=setup
40TST_CLEANUP=cleanup
41TST_TESTFUNC=do_test
42TST_POS_ARGS=2
43TST_USAGE=usage
44TST_NEEDS_ROOT=1
45
46. tst_test.sh
47
48mounted=1
49max=$1
50nbprocess=$2
51
52usage()
53{
54	cat << EOF
55usage: $0 nsubgroup nprocess
56
57nsubgroup - number of subgroups to create
58nprocess  - number of processes to attach to each subgroup
59
60OPTIONS
61EOF
62}
63
64setup()
65{
66	if ! grep -q -w cpuacct /proc/cgroups; then
67		tst_brk TCONF "cpuacct not supported on this system"
68	fi
69
70	mount_point=`grep -w cpuacct /proc/mounts | cut -f 2 | cut -d " " -f2`
71	tst_res TINFO "cpuacct: $mount_point"
72	if [ "$mount_point" = "" ]; then
73		mounted=0
74		mount_point=/dev/cgroup
75	fi
76
77	testpath=$mount_point/ltp_$TST_ID
78
79	if [ "$mounted" -eq "0" ]; then
80		ROD mkdir -p $mount_point
81		ROD mount -t cgroup -o cpuacct none $mount_point
82	fi
83
84	ROD mkdir $testpath
85
86	# create subgroups
87	for i in `seq 1 $max`; do
88		ROD mkdir $testpath/subgroup_$i
89	done
90
91}
92
93cleanup()
94{
95	tst_res TINFO "removing created directories"
96
97	if [ -d "$testpath/subgroup_1" ]; then
98		rmdir $testpath/subgroup_*
99	fi
100
101	rmdir $testpath
102
103	if [ "$mounted" -ne 1 ]; then
104		tst_res TINFO "Umounting cpuacct"
105		umount $mount_point
106		rmdir $mount_point
107	fi
108}
109
110do_test()
111{
112	tst_res TINFO "Creating $max subgroups each with $nbprocess processes"
113
114	# create and attach process to subgroups
115	for i in `seq 1 $max`; do
116		for j in `seq 1 $nbprocess`; do
117			cpuacct_task $testpath/subgroup_$i/tasks &
118		done
119	done
120
121	wait
122
123	acc=0
124	fails=0
125	for i in `seq 1 $max`; do
126		tmp=`cat $testpath/subgroup_$i/cpuacct.usage`
127		if [ "$tmp" -eq "0" ]; then
128			fails=$((fails + 1))
129		fi
130		acc=$((acc + tmp))
131	done
132
133	## check that cpuacct.usage != 0 for every subgroup
134	if [ "$fails" -gt "0" ]; then
135		tst_res TFAIL "cpuacct.usage is not equal to 0 for $fails subgroups"
136	else
137		tst_res TPASS "cpuacct.usage is not equal to 0 for every subgroup"
138	fi
139
140	## check that ltp_subgroup/cpuacct.usage == sum ltp_subgroup/subgroup*/cpuacct.usage
141	ref=`cat $testpath/cpuacct.usage`
142	if [ "$ref" -ne "$acc" ]; then
143		tst_res TFAIL "cpuacct.usage $ref not equal to subgroup*/cpuacct.usage $acc"
144	else
145		tst_res TPASS "cpuacct.usage equal to subgroup*/cpuacct.usage"
146	fi
147}
148
149tst_run
150