@@ -169,6 +169,14 @@ test_add_proc()
169
169
# T = put a task into cgroup
170
170
# O<c>=<v> = Write <v> to CPU online file of <c>
171
171
#
172
+ # ECPUs - effective CPUs of cpusets
173
+ # Pstate - partition root state
174
+ # ISOLCPUS - isolated CPUs (<icpus>[,<icpus2 >])
175
+ #
176
+ # Note that if there are 2 fields in ISOLCPUS, the first one is for
177
+ # sched-debug matching which includes offline CPUs and single-CPU partitions
178
+ # while the second one is for matching cpuset.cpus.isolated.
179
+ #
172
180
SETUP_A123 _PARTITIONS="C1 -3 :P1 :S+ C2 -3 :P1 :S+ C3 :P1 "
173
181
TEST_MATRIX=(
174
182
# old-A1 old-A2 old-A3 old-B1 new-A1 new-A2 new-A3 new-B1 fail ECPUs Pstate ISOLCPUS
@@ -228,23 +236,29 @@ TEST_MATRIX=(
228
236
" C0 -3 :S+ C1 -3 :S+ C2 -3 . X2 -3 X2 -3 :P2 . . 0 A1 :0 -1 ,A2 :2 -3 ,A3 :2 -3 A1 :P0 ,A2 :P2 2 -3 "
229
237
" C0 -3 :S+ C1 -3 :S+ C2 -3 . X2 -3 X3 :P2 . . 0 A1 :0 -2 ,A2 :3 ,A3 :3 A1 :P0 ,A2 :P2 3 "
230
238
" C0 -3 :S+ C1 -3 :S+ C2 -3 . X2 -3 X2 -3 X2 -3 :P2 . 0 A1 :0 -1 ,A2 :1 ,A3 :2 -3 A1 :P0 ,A3 :P2 2 -3 "
231
- " C0 -3 :S+ C1 -3 :S+ C2 -3 . X2 -3 X2 -3 X2 -3 :P2 :C3 . 0 A1 :0 -2 ,A2 :1 - 2 ,A3 :3 A1 :P0 ,A3 :P2 3 "
239
+ " C0 -3 :S+ C1 -3 :S+ C2 -3 . X2 -3 X2 -3 X2 -3 :P2 :C3 . 0 A1 :0 -1 ,A2 :1 ,A3 :2 - 3 A1 :P0 ,A3 :P2 2 - 3 "
232
240
" C0 -3 :S+ C1 -3 :S+ C2 -3 C2 -3 . . . P2 0 A1 :0 -3 ,A2 :1 -3 ,A3 :2 -3 ,B1 :2 -3 A1 :P0 ,A3 :P0 ,B1 :P-2 "
233
241
" C0 -3 :S+ C1 -3 :S+ C2 -3 C4 -5 . . . P2 0 B1 :4 -5 B1 :P2 4 -5 "
234
242
" C0 -3 :S+ C1 -3 :S+ C2 -3 C4 X2 -3 X2 -3 X2 -3 :P2 P2 0 A3 :2 -3 ,B1 :4 A3 :P2 ,B1 :P2 2 -4 "
235
243
" C0 -3 :S+ C1 -3 :S+ C2 -3 C4 X2 -3 X2 -3 X2 -3 :P2 :C1 -3 P2 0 A3 :2 -3 ,B1 :4 A3 :P2 ,B1 :P2 2 -4 "
236
244
" C0 -3 :S+ C1 -3 :S+ C2 -3 C4 X1 -3 X1 -3 :P2 P2 . 0 A2 :1 ,A3 :2 -3 A2 :P2 ,A3 :P2 1 -3 "
237
245
" C0 -3 :S+ C1 -3 :S+ C2 -3 C4 X2 -3 X2 -3 X2 -3 :P2 P2 :C4 -5 0 A3 :2 -3 ,B1 :4 -5 A3 :P2 ,B1 :P2 2 -5 "
246
+ " C4 :X0 -3 :S+ X1 -3 :S+ X2 -3 . . P2 . . 0 A1 :4 ,A2 :1 -3 ,A3 :1 -3 A2 :P2 1 -3 "
247
+ " C4 :X0 -3 :S+ X1 -3 :S+ X2 -3 . . . P2 . 0 A1 :4 ,A2 :4 ,A3 :2 -3 A3 :P2 2 -3 "
238
248
239
249
# Nested remote/local partition tests
240
250
" C0 -3 :S+ C1 -3 :S+ C2 -3 C4 -5 X2 -3 X2 -3 :P1 P2 P1 0 A1 :0 -1 ,A2 :,A3 :2 -3 ,B1 :4 -5 \
241
251
A1 :P0 ,A2 :P1 ,A3 :P2 ,B1 :P1 2 -3 "
242
252
" C0 -3 :S+ C1 -3 :S+ C2 -3 C4 X2 -3 X2 -3 :P1 P2 P1 0 A1 :0 -1 ,A2 :,A3 :2 -3 ,B1 :4 \
243
253
A1 :P0 ,A2 :P1 ,A3 :P2 ,B1 :P1 2 -4 ,2 -3 "
254
+ " C0 -3 :S+ C1 -3 :S+ C2 -3 C4 X2 -3 X2 -3 :P1 . P1 0 A1 :0 -1 ,A2 :2 -3 ,A3 :2 -3 ,B1 :4 \
255
+ A1 :P0 ,A2 :P1 ,A3 :P0 ,B1 :P1 "
244
256
" C0 -3 :S+ C1 -3 :S+ C3 C4 X2 -3 X2 -3 :P1 P2 P1 0 A1 :0 -1 ,A2 :2 ,A3 :3 ,B1 :4 \
245
257
A1 :P0 ,A2 :P1 ,A3 :P2 ,B1 :P1 2 -4 ,3 "
246
258
" C0 -4 :S+ C1 -4 :S+ C2 -4 . X2 -4 X2 -4 :P2 X4 :P1 . 0 A1 :0 -1 ,A2 :2 -3 ,A3 :4 \
247
259
A1 :P0 ,A2 :P2 ,A3 :P1 2 -4 ,2 -3 "
260
+ " C0 -4 :S+ C1 -4 :S+ C2 -4 . X2 -4 X2 -4 :P2 X3 -4 :P1 . 0 A1 :0 -1 ,A2 :2 ,A3 :3 -4 \
261
+ A1 :P0 ,A2 :P2 ,A3 :P1 2 "
248
262
" C0 -4 :X2 -4 :S+ C1 -4 :X2 -4 :S+:P2 C2 -4 :X4 :P1 \
249
263
. . X5 . . 0 A1 :0 -4 ,A2 :1 -4 ,A3 :2 -4 \
250
264
A1 :P0 ,A2 :P-2 ,A3 :P-1 "
@@ -270,8 +284,8 @@ TEST_MATRIX=(
270
284
. . X2 -3 P2 . . 0 A1 :0 -2 ,A2 :3 ,XA2 :3 A2 :P2 3 "
271
285
272
286
# Invalid to valid local partition direct transition tests
273
- " C1 -3 :S+:P2 C 2 - 3 :X 1 : P2 . . . . . . 0 A1 :1 -3 ,XA1 :1 -3 ,A2 :2 -3 :XA2 : A1 :P2 ,A2 :P-2 1 -3 "
274
- " C1 -3 :S+:P2 C 2 - 3 :X 1 : P2 . . . X3 :P2 . . 0 A1 :1 -2 ,XA1 :1 -3 ,A2 :3 :XA2 :3 A1 :P2 ,A2 :P2 1 -3 "
287
+ " C1 -3 :S+:P2 X 4 : P2 . . . . . . 0 A1 :1 -3 ,XA1 :1 -3 ,A2 :1 -3 :XA2 : A1 :P2 ,A2 :P-2 1 -3 "
288
+ " C1 -3 :S+:P2 X 4 : P2 . . . X3 :P2 . . 0 A1 :1 -2 ,XA1 :1 -3 ,A2 :3 :XA2 :3 A1 :P2 ,A2 :P2 1 -3 "
275
289
" C0 -3 :P2 . . C4 -6 C0 -4 . . . 0 A1 :0 -4 ,B1 :4 -6 A1 :P-2 ,B1 :P0 "
276
290
" C0 -3 :P2 . . C4 -6 C0 -4 :C0 -3 . . . 0 A1 :0 -3 ,B1 :4 -6 A1 :P2 ,B1 :P0 0 -3 "
277
291
" C0 -3 :P2 . . C3 -5 :C4 -5 . . . . 0 A1 :0 -3 ,B1 :4 -5 A1 :P2 ,B1 :P0 0 -3 "
@@ -282,32 +296,26 @@ TEST_MATRIX=(
282
296
" C0 -3 :X1 -3 :S+:P2 C1 -3 :X2 -3 :S+:P2 C2 -3 :X3 :P2 \
283
297
. . X4 . . 0 A1 :1 -3 ,A2 :1 -3 ,A3 :2 -3 ,XA2 :,XA3 : A1 :P2 ,A2 :P-2 ,A3 :P-2 1 -3 "
284
298
" C0 -3 :X1 -3 :S+:P2 C1 -3 :X2 -3 :S+:P2 C2 -3 :X3 :P2 \
285
- . . C 4 . . 0 A1 :1 -3 ,A2 :1 -3 ,A3 :2 -3 ,XA2 :,XA3 : A1 :P2 ,A2 :P-2 ,A3 :P-2 1 -3 "
299
+ . . C 4 :X . . 0 A1 :1 -3 ,A2 :1 -3 ,A3 :2 -3 ,XA2 :,XA3 : A1 :P2 ,A2 :P-2 ,A3 :P-2 1 -3 "
286
300
# Local partition CPU change tests
287
301
" C0 -5 :S+:P2 C4 -5 :S+:P1 . . . C3 -5 . . 0 A1 :0 -2 ,A2 :3 -5 A1 :P2 ,A2 :P1 0 -2 "
288
302
" C0 -5 :S+:P2 C4 -5 :S+:P1 . . C1 -5 . . . 0 A1 :1 -3 ,A2 :4 -5 A1 :P2 ,A2 :P1 1 -3 "
289
303
290
304
# cpus_allowed/exclusive_cpus update tests
291
305
" C0 -3 :X2 -3 :S+ C1 -3 :X2 -3 :S+ C2 -3 :X2 -3 \
292
- . C 4 . P2 . 0 A1 :4 ,A2 :4 ,XA2 :,XA3 :,A3 :4 \
306
+ . X:C 4 . P2 . 0 A1 :4 ,A2 :4 ,XA2 :,XA3 :,A3 :4 \
293
307
A1 :P0 ,A3 :P-2 "
294
308
" C0 -3 :X2 -3 :S+ C1 -3 :X2 -3 :S+ C2 -3 :X2 -3 \
295
309
. X1 . P2 . 0 A1 :0 -3 ,A2 :1 -3 ,XA1 :1 ,XA2 :,XA3 :,A3 :2 -3 \
296
310
A1 :P0 ,A3 :P-2 "
297
- " C0 -3 :X2 -3 :S+ C1 -3 :X2 -3 :S+ C2 -3 :X2 -3 \
298
- . . C3 P2 . 0 A1 :0 -2 ,A2 :0 -2 ,XA2 :3 ,XA3 :3 ,A3 :3 \
299
- A1 :P0 ,A3 :P2 3 "
300
311
" C0 -3 :X2 -3 :S+ C1 -3 :X2 -3 :S+ C2 -3 :X2 -3 \
301
312
. . X3 P2 . 0 A1 :0 -2 ,A2 :1 -2 ,XA2 :3 ,XA3 :3 ,A3 :3 \
302
313
A1 :P0 ,A3 :P2 3 "
303
314
" C0 -3 :X2 -3 :S+ C1 -3 :X2 -3 :S+ C2 -3 :X2 -3 :P2 \
304
315
. . X3 . . 0 A1 :0 -3 ,A2 :1 -3 ,XA2 :3 ,XA3 :3 ,A3 :2 -3 \
305
316
A1 :P0 ,A3 :P-2 "
306
317
" C0 -3 :X2 -3 :S+ C1 -3 :X2 -3 :S+ C2 -3 :X2 -3 :P2 \
307
- . . C3 . . 0 A1 :0 -3 ,A2 :3 ,XA2 :3 ,XA3 :3 ,A3 :3 \
308
- A1 :P0 ,A3 :P-2 "
309
- " C0 -3 :X2 -3 :S+ C1 -3 :X2 -3 :S+ C2 -3 :X2 -3 :P2 \
310
- . C4 . . . 0 A1 :4 ,A2 :4 ,A3 :4 ,XA1 :,XA2 :,XA3 \
318
+ . X4 . . . 0 A1 :0 -3 ,A2 :1 -3 ,A3 :2 -3 ,XA1 :4 ,XA2 :,XA3 \
311
319
A1 :P0 ,A3 :P-2 "
312
320
313
321
# old-A1 old-A2 old-A3 old-B1 new-A1 new-A2 new-A3 new-B1 fail ECPUs Pstate ISOLCPUS
@@ -354,6 +362,9 @@ TEST_MATRIX=(
354
362
" C0 -1 :P1 . . P1 :C2 -3 C0 -2 . . . 0 A1 :0 -2 ,B1 :2 -3 A1 :P-1 ,B1 :P-1 "
355
363
" C0 -1 . . P1 :C2 -3 C0 -2 . . . 0 A1 :0 -2 ,B1 :2 -3 A1 :P0 ,B1 :P-1 "
356
364
365
+ # cpuset.cpus can overlap with sibling cpuset.cpus.exclusive but not subsumed by it
366
+ " C0 -3 . . C4 -5 X5 . . . 0 A1 :0 -3 ,B1 :4 -5 "
367
+
357
368
# old-A1 old-A2 old-A3 old-B1 new-A1 new-A2 new-A3 new-B1 fail ECPUs Pstate ISOLCPUS
358
369
# ------ ------ ------ ------ ------ ------ ------ ------ ---- ----- ------ --------
359
370
# Failure cases:
@@ -363,6 +374,9 @@ TEST_MATRIX=(
363
374
364
375
# Changes to cpuset.cpus.exclusive that violate exclusivity rule is rejected
365
376
" C0 -3 . . C4 -5 X0 -3 . . X3 -5 1 A1 :0 -3 ,B1 :4 -5 "
377
+
378
+ # cpuset.cpus cannot be a subset of sibling cpuset.cpus.exclusive
379
+ " C0 -3 . . C4 -5 X3 -5 . . . 1 A1 :0 -3 ,B1 :4 -5 "
366
380
)
367
381
368
382
#
@@ -564,14 +578,15 @@ check_cgroup_states()
564
578
do
565
579
set -- $(echo $CHK | sed -e "s/:/ /g")
566
580
CGRP=$1
581
+ CGRP_DIR=$CGRP
567
582
STATE=$2
568
583
FILE=
569
584
EVAL=$(expr substr $STATE 2 2 )
570
- [[ $CGRP = A2 ]] && CGRP =A1 /A2
571
- [[ $CGRP = A3 ]] && CGRP =A1 /A2 /A3
585
+ [[ $CGRP = A2 ]] && CGRP_DIR =A1 /A2
586
+ [[ $CGRP = A3 ]] && CGRP_DIR =A1 /A2 /A3
572
587
573
588
case $STATE in
574
- P*) FILE=$CGRP /cpuset.cpus.partition
589
+ P*) FILE=$CGRP_DIR /cpuset.cpus.partition
575
590
;;
576
591
*) echo "Unknown state: $STATE !"
577
592
exit 1
@@ -595,6 +610,16 @@ check_cgroup_states()
595
610
;;
596
611
esac
597
612
[[ $EVAL != $VAL ]] && return 1
613
+
614
+ #
615
+ # For root partition, dump sched-domains info to console if
616
+ # verbose mode set for manual comparison with sched debug info.
617
+ #
618
+ [[ $VAL -eq 1 && $VERBOSE -gt 0 ]] && {
619
+ DOMS=$(cat $CGRP_DIR /cpuset.cpus.effective)
620
+ [[ -n "$DOMS " ]] &&
621
+ echo " [$CGRP ] sched-domain: $DOMS " > $CONSOLE
622
+ }
598
623
done
599
624
return 0
600
625
}
0 commit comments