1#!/bin/sh 2 3################################################################################ 4## ## 5## Copyright (c) 2009 FUJITSU LIMITED ## 6## Author: Shi Weihua <shiwh@cn.fujitsu.com> ## 7## Copyright (c) 2015 Cedric Hnyda <chnyda@suse.com> ## 8## Copyright (c) 2015-2016 Cyril Hrubis <chrubis@suse.cz> ## 9## ## 10## This program is free software; you can redistribute it and#or modify ## 11## it under the terms of the GNU General Public License as published by ## 12## the Free Software Foundation; either version 2 of the License, or ## 13## (at your option) any later version. ## 14## ## 15## This program is distributed in the hope that it will be useful, but ## 16## WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ## 17## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ## 18## for more details. ## 19## ## 20## You should have received a copy of the GNU General Public License ## 21## along with this program; if not, write to the Free Software Foundation, ## 22## Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ## 23## ## 24################################################################################ 25 26TCID="cgroup_fj_stress" 27TST_TOTAL=1 28 29. cgroup_fj_common.sh 30 31subsystem="$1" 32subgroup_num="$2" 33subgroup_depth="$3" 34attach_operation="$4" 35 36usage_and_exit() 37{ 38 echo "usage of cgroup_fj_stress.sh: " 39 echo " ./cgroup_fj_stress.sh subsystem subgroup_num subgroup_depth attach_operation" 40 echo " subgroup_num" 41 echo " number of subgroups created in group" 42 echo " subgroup_depth" 43 echo " depth of the created tree" 44 echo " attach_operation" 45 echo " none - do not attach anything" 46 echo " one - move one processe around" 47 echo " each - attach process to each subgroup" 48 echo "example: ./cgroup_fj_stress.sh cpuset 1 1 one" 49 echo 50 tst_brkm TBROK "$1" 51} 52 53if [ "$#" -ne "4" ]; then 54 usage_and_exit "Wrong number of parameters, expected 4" 55fi 56 57case $subgroup_num in 58 ''|*[!0-9]*) usage_and_exit "Number of subgroups must be possitive integer";; 59 *) ;; 60esac 61 62case $subgroup_depth in 63 ''|*[!0-9]*) usage_and_exit "Depth of the subgroup tree must be possitive integer";; 64 *) ;; 65esac 66 67case $attach_operation in 68 'none'|'one'|'each');; 69 *) usage_and_exit "Invalid attach operation: $attach_operation";; 70esac 71 72setup 73 74export TMPFILE=./tmp_tasks.$$ 75 76count=0 77 78build_subgroups() 79{ 80 local cur_path="$1" 81 local cur_depth="$2" 82 local i 83 84 if [ "$cur_depth" -gt "$subgroup_depth" ]; then 85 return 86 fi 87 88 create_subgroup "$cur_path" 89 count=$((count+1)) 90 91 for i in $(seq 1 $subgroup_num); do 92 build_subgroups "$cur_path/$i" $((cur_depth+1)) 93 done 94} 95 96attach_task() 97{ 98 local cur_path="$1" 99 local cur_depth="$2" 100 local ppid="$3" 101 local i 102 103 if [ "$cur_depth" -gt "$subgroup_depth" ]; then 104 return 105 fi 106 107 if [ -z "$ppid" ]; then 108 cgroup_fj_proc& 109 pid=$! 110 else 111 pid="$ppid" 112 fi 113 114 if ! attach_and_check "$pid" "$cur_path"; then 115 fail=1 116 fi 117 118 for i in $(seq 1 $subgroup_num); do 119 local new_path="$cur_path/$i" 120 attach_task "$new_path" $((cur_depth+1)) "$ppid" 121 done 122 123 if [ -n "$ppid" ]; then 124 if ! attach_and_check "$pid" "$cur_path"; then 125 fail=1 126 fi 127 fi 128} 129 130start_path="$mount_point/ltp" 131 132tst_resm TINFO "Creating subgroups ..." 133 134build_subgroups "$start_path" 0 135 136tst_resm TINFO "... mkdired $count times" 137 138case $attach_operation in 139"one" ) 140 cgroup_fj_proc & 141 pid=$! 142 143 tst_resm TINFO "Moving one task around" 144 attach_task "$start_path" 0 "$pid" 145 ROD kill -9 "$pid" 146 wait "$pid" 147 ;; 148"each" ) 149 tst_resm TINFO "Attaching task to each subgroup" 150 attach_task "$start_path" 0 151 ROD killall -9 "cgroup_fj_proc" 152 # Wait for attached tasks to terminate 153 wait 154 ;; 155* ) 156 ;; 157esac 158 159if [ -n "$fail" ]; then 160 tst_resm TFAIL "Attaching tasks failed!" 161else 162 tst_resm TPASS "All done!" 163fi 164 165tst_exit 166