aboutsummaryrefslogtreecommitdiffstats
path: root/tools/testing
diff options
context:
space:
mode:
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>2014-01-17 17:18:05 -0500
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2014-02-18 15:26:52 -0500
commit53954671033dc878acbeef1ecf9ac653c7b1a58f (patch)
treecf1605094cd114483887cac885d0188fdd72f6f8 /tools/testing
parent0ae3f73af5ba8025abcb328913643b291698af35 (diff)
rcutorture: Do better bin packing
Running the standard set of rcutorture tests on 24 CPUs results in the following sub-optimal schedule: ----start batch---- TREE07 16 ----start batch---- TREE08 16 SRCU-P 8 ----start batch---- TREE01 8 TREE02 8 TREE03 8 ----start batch---- TREE04 8 TREE05 8 TREE06 8 ----start batch---- SRCU-N 4 TINY01 1 TINY02 1 TREE09 1 If one of the eight-CPU runs were to be moved into the first batch, the test suite would complete in four batches rather than five. This commit therefore uses a greedy algorithm to re-order the test entries so that the sequential batching will produce an optimal schedule in this case: ----start batch---- TREE07 16 SRCU-P 8 ----start batch---- TREE08 16 TREE01 8 ----start batch---- TREE02 8 TREE03 8 TREE04 8 ----start batch---- TREE05 8 TREE06 8 SRCU-N 4 TINY01 1 TINY02 1 TREE09 1 Please note that this is still not an optimal bin-packing algorithm, however, it does produce optimal solutions for most common scenarios. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Reviewed-by: Josh Triplett <josh@joshtriplett.org>
Diffstat (limited to 'tools/testing')
-rw-r--r--tools/testing/selftests/rcutorture/bin/kvm.sh37
1 files changed, 36 insertions, 1 deletions
diff --git a/tools/testing/selftests/rcutorture/bin/kvm.sh b/tools/testing/selftests/rcutorture/bin/kvm.sh
index ad3779cefdb8..18649b87ea6c 100644
--- a/tools/testing/selftests/rcutorture/bin/kvm.sh
+++ b/tools/testing/selftests/rcutorture/bin/kvm.sh
@@ -214,7 +214,42 @@ do
214done 214done
215sort -k2nr $T/cfgcpu > $T/cfgcpu.sort 215sort -k2nr $T/cfgcpu > $T/cfgcpu.sort
216 216
217awk < $T/cfgcpu.sort \ 217awk < $T/cfgcpu.sort > $T/cfgcpu.pack -v ncpus=$cpus '
218BEGIN {
219 njobs = 0;
220}
221
222{
223 cf[njobs] = $1;
224 cpus[njobs] = $2;
225 njobs++;
226}
227
228END {
229 alldone = 0;
230 batch = 0;
231 nc = -1;
232 while (nc != ncpus) {
233 batch++;
234 nc = ncpus;
235 for (i = 0; i < njobs; i++) {
236 if (done[i])
237 continue;
238 if (nc >= cpus[i] || nc == ncpus) {
239 done[i] = batch;
240 nc -= cpus[i];
241 if (nc <= 0)
242 break;
243 }
244 }
245 }
246 for (b = 1; b <= batch; b++)
247 for (i = 0; i < njobs; i++)
248 if (done[i] == b)
249 print cf[i], cpus[i];
250}'
251
252awk < $T/cfgcpu.pack \
218 -v CONFIGDIR="$CONFIGFRAG/$kversion/" \ 253 -v CONFIGDIR="$CONFIGFRAG/$kversion/" \
219 -v KVM="$KVM" \ 254 -v KVM="$KVM" \
220 -v ncpus=$cpus \ 255 -v ncpus=$cpus \