[PATCH stalld 00/52] Test suite hardening, correctness fixes, and BPF optimization
Wander Lairson Costa <[email protected]> Mon, 8 Jun 2026 15:31:10 -0300
| Newsgroups | org.kernel.vger.linux-rt-users |
|---|---|
| Message-ID | <[email protected]> |
This series improves stalld reliability across three areas: the test infrastructure, the BPF backend, and the core daemon code. The test suite is overhauled to eliminate false-passing tests and reduce runtime. An assertion framework replaces ad-hoc conditional checks, sleep-based synchronization gives way to event-driven waits, and helpers for common patterns like starvation detection and process lifecycle reduce boilerplate. Tests that silently swallowed failures in subshells or matched stale log lines are fixed. The cumulative effect is a suite that fails fast on real regressions and completes in a fraction of the previous wall-clock time. The BPF queue_track backend replaces its per-CPU linear array with a hash map keyed by CPU and PID, turning the O(n) task lookup on every sched_wakeup into O(1). This eliminates a 2us latency penalty that consumed a significant portion of the 10us real-time budget on Telco workloads. The remaining patches address a range of correctness issues in the daemon: data races on shared variables are fixed with C11 atomics, buffer underflows and uninitialized buffer uses are guarded, the signal handler is made async-signal-safe, starvation timing is migrated from wall-clock time to CLOCK_MONOTONIC, format string mismatches and NULL pointer dereferences are corrected, pthread_create return values are checked, and a signed integer overflow in the SCHED_DEADLINE period calculation is resolved. Wander Lairson Costa (52): stalld: Reject --force_fifo in single-threaded mode tests: Introduce test_section() helper tests: Introduce cleanup_scenario() helper tests: Introduce starvation and boost asserts tests: Introduce find_starved_child() helper tests: Fix task exit timing in test_boost_restoration tests: Consolidate and adopt init_functional_test() tests: Introduce assert_stalld_rejects() helper tests: Fix boost verification in runtime and duration tests tests: Fix subshell swallowing test results tests: Fix repeated log match finding same line chore: Remove legacy test infrastructure and stale docs tests: Add assertions to SCHED_OTHER restoration test tests: Fix CPU selection grep substring matches tests: Add idle CPU skipping assertion tests: Remove redundant pkill from cleanup tests: Introduce and adopt assert_log_contains() helper tests: Remove weak, redundant, and assertion-free test blocks tests: Introduce and adopt assert_success() helper tests: Replace wait conditionals with asserts tests: Remove if-wrappers around assert calls tests: Abort immediately on test failure tests: Remove dead code after making fail() fatal tests: Introduce and adopt process helpers tests: Extract wait_for_process_exit helper tests: Reduce default wait timeouts tests: Reduce starvation_gen durations tests: Replace init sleeps in test_affinity tests: Drop redundant sleeps in test_pidfile tests: Remove redundant sleeps after start_stalld tests: Reduce timing and replace sleeps with event waits tests: Fix async-signal-unsafe handler bpf: Replace linear task scan with hash map stalld: fix data race on thread_running stalld: fix inverted DAEMON_UMASK value stalld: fix uninitialized buffer use in find_debugfs_mount_point stalld: fix buffer underflow in read_proc_stat stalld: fix buffer underflow in sched_debug_get stalld: check pthread_create return in aggressive_main stalld: check pthread_create return in conservative_main stalld: fix signed integer overflow in set_reservation stalld: fix data race on config_buffer_size stalld: remove async-signal-unsafe calls from signal handler stalld: use CLOCK_MONOTONIC for starvation detection stalld: fix format string type mismatch for time_t stalld: fix type mismatches in detect_task_format stalld: remove NULL deref in fill_waiting_task error handler stalld: guard nextline() returns in sched_debug parsing stalld: fix missing null-termination in is_runnable stalld: fix snprintf truncation check in is_runnable stalld: fix error return in queue_track_get_cpu stalld: fix format string type mismatch in set_cpu_affinity .claude/CLAUDE.md | 585 --------- .claude/agents/agent-prompt-engineer.md | 135 -- .claude/agents/c-expert.md | 53 - .claude/agents/code-reviewer.md | 104 -- .claude/agents/get-agent-hash | 99 -- .claude/agents/git-scm-master.md | 1154 ----------------- .claude/agents/kernel-hacker.md | 231 ---- .claude/agents/plan-validator.md | 130 -- .claude/agents/project-historian.md | 285 ---- .claude/agents/project-librarian.md | 604 --------- .claude/agents/project-manager.md | 388 ------ .claude/agents/project-scope-guardian.md | 326 ----- .claude/agents/python-expert.md | 57 - .claude/agents/test-specialist.md | 656 ---------- .claude/agents/update-agent-hashes | 96 -- .claude/context-snapshot.json | 103 -- .claude/rules | 42 - .gitignore | 5 +- bpf/stalld.bpf.c | 206 ++- src/queue_track.c | 99 +- src/queue_track.h | 107 +- src/sched_debug.c | 46 +- src/stalld.c | 51 +- src/stalld.h | 20 +- src/utils.c | 33 +- tests/BACKEND_USAGE.md | 269 ---- tests/CONTEXT_SNAPSHOT_2025-10-31.md | 231 ---- tests/Makefile | 29 +- tests/README.md | 29 +- tests/TODO.md | 727 ----------- tests/functional/test_affinity.sh | 178 +-- tests/functional/test_backend_selection.sh | 24 +- tests/functional/test_boost_duration.sh | 164 +-- tests/functional/test_boost_period.sh | 151 +-- tests/functional/test_boost_restoration.sh | 310 +---- tests/functional/test_boost_runtime.sh | 179 +-- tests/functional/test_cpu_selection.sh | 76 +- tests/functional/test_deadline_boosting.sh | 266 +--- tests/functional/test_fifo_boosting.sh | 269 +--- .../test_fifo_priority_starvation.sh | 197 +-- tests/functional/test_force_fifo.sh | 196 +-- tests/functional/test_foreground.sh | 65 +- tests/functional/test_idle_detection.sh | 195 +-- tests/functional/test_log_only.sh | 30 +- tests/functional/test_logging_destinations.sh | 38 +- tests/functional/test_pidfile.sh | 166 +-- tests/functional/test_runqueue_parsing.sh | 417 ------ tests/functional/test_starvation_detection.sh | 281 +--- tests/functional/test_starvation_threshold.sh | 138 +- tests/functional/test_task_merging.sh | 161 +-- tests/helpers/starvation_gen.c | 2 +- tests/helpers/test_helpers.sh | 356 +++-- tests/legacy/README.md | 169 --- tests/legacy/test01.c | 506 -------- tests/legacy/test01_wrapper.sh | 161 --- tests/run_tests.sh | 149 +-- 56 files changed, 964 insertions(+), 10780 deletions(-) delete mode 100644 .claude/CLAUDE.md delete mode 100644 .claude/agents/agent-prompt-engineer.md delete mode 100644 .claude/agents/c-expert.md delete mode 100644 .claude/agents/code-reviewer.md delete mode 100755 .claude/agents/get-agent-hash delete mode 100644 .claude/agents/git-scm-master.md delete mode 100644 .claude/agents/kernel-hacker.md delete mode 100644 .claude/agents/plan-validator.md delete mode 100644 .claude/agents/project-historian.md delete mode 100644 .claude/agents/project-librarian.md delete mode 100644 .claude/agents/project-manager.md delete mode 100644 .claude/agents/project-scope-guardian.md delete mode 100644 .claude/agents/python-expert.md delete mode 100644 .claude/agents/test-specialist.md delete mode 100755 .claude/agents/update-agent-hashes delete mode 100644 .claude/context-snapshot.json delete mode 100644 .claude/rules delete mode 100644 tests/BACKEND_USAGE.md delete mode 100644 tests/CONTEXT_SNAPSHOT_2025-10-31.md delete mode 100644 tests/TODO.md delete mode 100755 tests/functional/test_runqueue_parsing.sh delete mode 100644 tests/legacy/README.md delete mode 100644 tests/legacy/test01.c delete mode 100755 tests/legacy/test01_wrapper.sh -- 2.54.0