123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- #!/bin/sh
- # SPDX-License-Identifier: GPL-2.0-or-later
- # Copyright (c) 2015 SUSE
- # Author: Cedric Hnyda <chnyda@suse.com>
- #
- # Usage
- # ./cpuacct.sh nbsubgroup nbprocess
- # nbsubgroup: number of subgroup to create
- # nbprocess: number of process to attach to each subgroup
- #
- # Description
- # 1) Find if cpuacct is mounted, if not mounted, cpuacct will be mounted
- # 2) Check that sum ltp_test/subgroup*/cpuacct.usage = ltp_test/cpuacct.usage
- TST_SETUP=setup
- TST_CLEANUP=cleanup
- TST_TESTFUNC=do_test
- TST_POS_ARGS=2
- TST_USAGE=usage
- TST_NEEDS_ROOT=1
- TST_NEEDS_TMPDIR=1
- . tst_test.sh
- mounted=1
- max=$1
- nbprocess=$2
- usage()
- {
- cat << EOF
- usage: $0 nsubgroup nprocess
- nsubgroup - number of subgroups to create
- nprocess - number of processes to attach to each subgroup
- OPTIONS
- EOF
- }
- setup()
- {
- if ! grep -q -w cpuacct /proc/cgroups; then
- tst_brk TCONF "cpuacct not supported on this system"
- fi
- mount_point=`grep -w cpuacct /proc/mounts | cut -f 2 | cut -d " " -f2`
- tst_res TINFO "cpuacct: $mount_point"
- if [ "$mount_point" = "" ]; then
- mounted=0
- mount_point=/dev/cgroup
- fi
- testpath=$mount_point/ltp_$TST_ID
- if [ "$mounted" -eq "0" ]; then
- ROD mkdir -p $mount_point
- ROD mount -t cgroup -o cpuacct none $mount_point
- fi
- ROD mkdir $testpath
- # create subgroups
- for i in `seq 1 $max`; do
- ROD mkdir $testpath/subgroup_$i
- done
- }
- cleanup()
- {
- tst_res TINFO "removing created directories"
- if [ -d "$testpath/subgroup_1" ]; then
- rmdir $testpath/subgroup_*
- fi
- rmdir $testpath
- if [ "$mounted" -ne 1 ]; then
- tst_res TINFO "Umounting cpuacct"
- umount $mount_point
- rmdir $mount_point
- fi
- }
- do_test()
- {
- tst_res TINFO "Creating $max subgroups each with $nbprocess processes"
- # create and attach process to subgroups
- for i in `seq 1 $max`; do
- for j in `seq 1 $nbprocess`; do
- cpuacct_task $testpath/subgroup_$i/tasks &
- echo $! >> task_pids
- done
- done
- for pid in $(cat task_pids); do wait $pid; done
- rm -f task_pids
- acc=0
- fails=0
- for i in `seq 1 $max`; do
- tmp=`cat $testpath/subgroup_$i/cpuacct.usage`
- if [ "$tmp" -eq "0" ]; then
- fails=$((fails + 1))
- fi
- acc=$((acc + tmp))
- done
- ## check that cpuacct.usage != 0 for every subgroup
- if [ "$fails" -gt "0" ]; then
- tst_res TFAIL "cpuacct.usage is not equal to 0 for $fails subgroups"
- else
- tst_res TPASS "cpuacct.usage is not equal to 0 for every subgroup"
- fi
- ## check that ltp_subgroup/cpuacct.usage == sum ltp_subgroup/subgroup*/cpuacct.usage
- ref=`cat $testpath/cpuacct.usage`
- if [ "$ref" -ne "$acc" ]; then
- tst_res TFAIL "cpuacct.usage $ref not equal to subgroup*/cpuacct.usage $acc"
- else
- tst_res TPASS "cpuacct.usage equal to subgroup*/cpuacct.usage"
- fi
- }
- tst_run
|