Skip to content

Commit 77383a1

Browse files
committed
Added Scheduler testcase
This test validates the Scheduler support by checking corresponding SCHED configs and checks cpu affinity by creating a CPU-bound background task Signed-off-by: Vamsee Narapareddi <[email protected]>
1 parent 58f9912 commit 77383a1

File tree

2 files changed

+130
-0
lines changed

2 files changed

+130
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Scheduler CPU Affinity validation Test
2+
3+
This test validates the Scheduler support and runtime status on Qualcomm platforms with Yocto builds.
4+
5+
## Overview
6+
7+
The test script performs these functional checks:
8+
9+
1. **Kernel Configuration**:
10+
- Validates presence of `CONFIG_SCHED_DEBUG`, `CONFIG_CGROUP_SCHED` and `CONFIG_SMP*` entries in `/proc/config.gz`.
11+
12+
2. **Runtime Verification**:
13+
- Checks cpu affinity by creating a CPU-bound background task
14+
15+
## How to Run
16+
17+
```sh
18+
source init_env
19+
cd suites/Kernel/FunctionalArea/Scheduler/CPU_affinity
20+
./run.sh
21+
```
22+
23+
## Prerequisites
24+
25+
- `taskset`, `grep`, `zgrep`, `top`, `chrt` must be available
26+
- Root access may be required for complete validation
27+
28+
## Result Format
29+
30+
Test result will be saved in `CPU_affinity.res` as:
31+
- `Default scheduling policy detected. Test passed` – if all validations pass
32+
- `Unexpected scheduling policy. Test Failed` – if any check fails
33+
34+
## License
35+
36+
SPDX-License-Identifier: BSD-3-Clause-Clear
37+
(C) Qualcomm Technologies, Inc. and/or its subsidiaries.
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
#!/bin/sh
2+
# Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
3+
# SPDX-License-Identifier: BSD-3-Clause-Clear
4+
5+
# Robustly find and source init_env
6+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
7+
INIT_ENV=""
8+
SEARCH="$SCRIPT_DIR"
9+
while [ "$SEARCH" != "/" ]; do
10+
if [ -f "$SEARCH/init_env" ]; then
11+
INIT_ENV="$SEARCH/init_env"
12+
break
13+
fi
14+
SEARCH=$(dirname "$SEARCH")
15+
done
16+
17+
if [ -z "$INIT_ENV" ]; then
18+
echo "[ERROR] Could not find init_env (starting at $SCRIPT_DIR)" >&2
19+
exit 1
20+
fi
21+
22+
# Only source if not already loaded (idempotent)
23+
if [ -z "$__INIT_ENV_LOADED" ]; then
24+
# shellcheck disable=SC1090
25+
. "$INIT_ENV"
26+
fi
27+
# Always source functestlib.sh, using $TOOLS exported by init_env
28+
# shellcheck disable=SC1090,SC1091
29+
. "$TOOLS/functestlib.sh"
30+
31+
TESTNAME="CPU_affinity"
32+
test_path=$(find_test_case_by_name "$TESTNAME")
33+
cd "$test_path" || exit 1
34+
# shellcheck disable=SC2034
35+
res_file="./$TESTNAME.res"
36+
37+
log_info "----------------------------------------------------"
38+
log_info "-------- Starting $TESTNAME Functional Test --------"
39+
40+
check_dependencies taskset top chrt zcat grep
41+
42+
REQUIRED_CONFIGS="CONFIG_SCHED_DEBUG CONFIG_CGROUP_SCHED CONFIG_SMP"
43+
for config in $REQUIRED_CONFIGS; do
44+
if check_kernel_config "$config"; then
45+
log_pass "$config is enabled"
46+
echo "$TESTNAME PASS" > "$res_file"
47+
else
48+
log_fail "$config is missing"
49+
echo "$TESTNAME FAIL" > "$res_file"
50+
exit 1
51+
fi
52+
done
53+
54+
log_info "Creating a CPU-bound background task..."
55+
cpu_task() {
56+
while :; do :; done
57+
}
58+
cpu_task &
59+
TASK_PID=$!
60+
sleep 2
61+
62+
log_info "Checking CPU affinity of task $TASK_PID..."
63+
CPU_AFFINITY=$(taskset -p $TASK_PID | awk -F: '{print $2}' | xargs)
64+
log_info "CPU affinity: $CPU_AFFINITY"
65+
66+
log_info "Setting affinity to CPU 0"
67+
taskset -pc 0 $TASK_PID > /dev/null
68+
sleep 1
69+
70+
NEW_AFFINITY=$(taskset -p $TASK_PID | awk -F: '{print $2}' | xargs)
71+
if [ "$NEW_AFFINITY" = "1" ]; then
72+
log_pass "Successfully set CPU affinity"
73+
echo "$TESTNAME PASS" > "$res_file"
74+
else
75+
log_fail "Failed to set CPU affinity"
76+
echo "$TESTNAME FAIL" > "$res_file"
77+
fi
78+
79+
log_info "Checking scheduling policy of task..."
80+
SCHED_POLICY=$(chrt -p $TASK_PID | grep "scheduling policy" | awk -F: '{print $2}' | xargs)
81+
log_info "Scheduling Policy: $SCHED_POLICY"
82+
83+
if echo "$SCHED_POLICY" | grep -q "SCHED_OTHER"; then
84+
log_pass "Default scheduling policy detected. Test passed"
85+
echo "$TESTNAME PASS" > "$res_file"
86+
else
87+
log_fail "Unexpected scheduling policy. Test Failed"
88+
echo "$TESTNAME FAIL" > "$res_file"
89+
fi
90+
91+
kill $TASK_PID
92+
echo "$TESTNAME PASS" > $test_path/$TESTNAME.res
93+
log_info "-------- Completed $TESTNAME Functional Test --------"

0 commit comments

Comments
 (0)