[PATCH libevl v2] evl-test: add stress command support for background load testing
Tobias Schaffner <[email protected]>
| Newsgroups | dev.linux.lists.xenomai |
|---|---|
| Message-ID | <[email protected]> |
Add the ability to run a stress command (e.g. stress-ng) in the background during test execution via the new -s option. This allows testing EVL functionality under system load. The stress command runs in its own process group (via setsid) to ensure clean termination of all child processes, and is automatically stopped when tests complete or the script exits normally or via signals. The stress command output is redirected to /dev/null by default but can be send to a file using the "EVL_TEST_STRESS_OUTPUT" environment variable. Usage example: evl-test -s "stress-ng --vm 2 --vm-bytes 1G --cpu 4" -k Signed-off-by: Tobias Schaffner <[email protected]> --- utils/evl-test | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/utils/evl-test b/utils/evl-test index 6e1edc3..28f2aed 100644 --- a/utils/evl-test +++ b/utils/evl-test @@ -7,7 +7,7 @@ if test \! -d $EVL_TESTDIR; then fi usage() { - echo >&2 "usage: $(basename $1) [-l][-L][-k][-r][-h] [test-list]" + echo >&2 "usage: $(basename $1) [-l][-L][-k][-r][-h][-s] [test-list]" } help=false @@ -18,6 +18,8 @@ full_path=false test_args=false test_arg_list= test_list= +stress_cmd= +stress_pid= while test $# -gt 0 do @@ -37,6 +39,8 @@ do -L) full_path=true; do_list=true; shift;; + -s) stress_cmd="$2"; + shift 2;; --) test_args=true shift;; -@) echo "run the EVL tests" @@ -49,6 +53,28 @@ do fi done +stop_stress() { + trap - EXIT INT TERM + if test -n "$stress_pid"; then + kill -TERM -$stress_pid 2>/dev/null + # Give the process up to one second to terminate gracefully + for i in $(seq 10); do kill -0 -$stress_pid 2>/dev/null || break; sleep 0.1; done + kill -KILL -$stress_pid 2>/dev/null + wait $stress_pid 2>/dev/null + fi + exit +} + +start_stress() { + if test -n "$stress_cmd"; then + trap 'stop_stress' EXIT INT TERM + stress_output="${EVL_TEST_STRESS_OUTPUT:-/dev/null}" + setsid $stress_cmd </dev/null >"$stress_output" 2>&1 & + stress_pid=$! + sleep 1 # Give stress command time to start + fi +} + if test x$help = xtrue; then usage $0 exit 0 @@ -73,6 +99,8 @@ if test x$do_list = xtrue; then exit 0 fi +start_stress + result=0 while : ; do -- 2.43.0