Compare commits

...

No commits in common. "c8" and "c9s" have entirely different histories.
c8 ... c9s

8 changed files with 152 additions and 63 deletions

18
.gitignore vendored
View File

@ -1 +1,17 @@
SOURCES/stalld-1.19.1.tar.bz2 /stalld-1.0.tar.xz
/stalld-1.1.tar.xz
/stalld-1.2.tar.xz
/stalld-1.4.tar.xz
/stalld-1.6.tar.xz
/stalld-1.8.tar.xz
/stalld-1.9.tar.xz
/stalld-1.13.tar.bz2
/stalld-1.14.1.tar.bz2
/stalld-1.15.tar.bz2
/stalld-1.16.tar.bz2
/stalld-1.17.tar.xz
/stalld-1.17.1.tar.bz2
/stalld-v1.19.1.tar.bz2
/stalld-1.19.1.tar.bz2
/stalld-1.19.5.tar.bz2
/stalld-1.19.6.tar.bz2

54
README.md Normal file
View File

@ -0,0 +1,54 @@
# stalld
The stalld program (which stands for 'stall daemon') is a
mechanism to prevent the *starvation* of operating system threads in a
Linux system. The premise is to start up on a *housekeeping* cpu (one
that is not used for real-application purposes) and to periodically
monitor the state of each thread in the system, looking for a thread
that has been on a run queue (i.e. ready to run) for a specifed length
of time without being run. This condition is usually hit when the
thread is on the same cpu as a high-priority cpu-intensive task and
therefore is being given no opportunity to run.
When a thread is judged to be starving, stalld changes
that thread to use the SCHED_DEADLINE policy and gives the thread a
small slice of time for that cpu (specified on the command line). The
thread then runs and when that timeslice is used, the thread is then
returned to its original scheduling policy and stalld then
continues to monitor thread states.
There is now an experimental option to boost using SCHED_FIFO. This
logic is used if the running kernel does not support the
SCHED_DEADLINE policy and may be forced by using the -F/--force_fifo
option.
## Command Line Options
`Usage: stalld [-l] [-v] [-k] [-s] [-f] [-h] [-F]
[-c cpu-list]
[-p time in ns] [-r time in ns]
[-d time in seconds] [-t time in seconds]`
### Logging options
- -l/--log_only: only log information (do not boost) [false]
- -v/--verbose: print info to the std output [false]
- -k/--log_kmsg: print log to the kernel buffer [false]
- -s/--log_syslog: print log to syslog [true]
### Startup options
- -c/--cpu: list of cpus to monitor for stalled threads [all cpus]
- -f/--foreground: run in foreground [false but true when -v]
- -P/--pidfile: write daemon pid to specified file [no pidfile]
### Boosting options
- -p/--boost_period: SCHED_DEADLINE period [ns] that the starving task will receive [1000000000]
- -r/--boost_runtime: SCHED_DEADLINE runtime [ns] that the starving task will receive [20000]
- -d/--boost_duration: how long [s] the starving task will run with SCHED_DEADLINE [3]
- -F/--force_fifo: force using SCHED_FIFO for boosting
### Monitoring options
- -t/--starving_threshold: how long [s] the starving task will wait before being boosted [60]
- -A/--aggressive_mode: dispatch one thread per run queue, even when there is no starving
threads on all CPU (uses more CPU/power). [false]
### Miscellaneous
- -h/--help: print this menu

View File

@ -1,31 +0,0 @@
From c93cef85e7ec08d924ad6a4f90a8677cc1603950 Mon Sep 17 00:00:00 2001
From: John Kacur <jkacur@redhat.com>
Date: Wed, 14 Feb 2024 15:55:30 -0500
Subject: [PATCH] Start stalld service as initrc_t
Stalld currently runs as an unconfined_service_t.
Edit to service file so that the daemon is launched as an initrc_t.
Signed-off-by: Leah Leshchinsky <lleshchi@redhat.com>
Signed-off-by: John Kacur <jkacur@redhat.com>
---
systemd/stalld.service | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/systemd/stalld.service b/systemd/stalld.service
index d93110b1b43e..69f3ee728129 100644
--- a/systemd/stalld.service
+++ b/systemd/stalld.service
@@ -10,7 +10,7 @@ ExecStartPre=/usr/bin/throttlectl off
# In case the regex passed to IT or IP includes C escape sequences,
# use ${IT} or ${IP} instead of $IT or $IP
-ExecStart=/usr/bin/stalld --systemd $CLIST $AGGR $BP $BR $BD $THRESH $LOGGING $FG $PF $IT $IP
+ExecStart=/bin/sh -c "/usr/bin/stalld --systemd $CLIST $AGGR $BP $BR $BD $THRESH $LOGGING $FG $PF $IT $IP"
ExecStopPost=/usr/bin/throttlectl on
CPUSchedulingPolicy=fifo
CPUSchedulingPriority=10
--
2.43.0

6
gating.yaml Normal file
View File

@ -0,0 +1,6 @@
--- !Policy
product_versions:
- rhel-9
decision_context: osci_compose_gate
rules:
- !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional}

1
sources Normal file
View File

@ -0,0 +1 @@
SHA512 (stalld-1.19.6.tar.bz2) = 1a4e4999776b3df553c334fb9b11a459d6855790077eaaa295ca42228861c1699da55b3d9680d95832ed74969f276d1ad21d2e774797adbba728c732b15ac2bd

View File

@ -1,6 +1,6 @@
Name: stalld Name: stalld
Version: 1.19.1 Version: 1.19.6
Release: 4%{?dist} Release: 1%{?dist}
Summary: Daemon that finds starving tasks and gives them a temporary boost Summary: Daemon that finds starving tasks and gives them a temporary boost
License: GPLv2 License: GPLv2
@ -18,12 +18,11 @@ Requires: systemd
BuildRequires: bpftool BuildRequires: bpftool
BuildRequires: clang BuildRequires: clang
BuildRequires: libbpf-devel BuildRequires: libbpf-devel
BuildRequires: llvm
Requires: libbpf Requires: libbpf
%endif %endif
Patch0: Start-stalld-service-as-initrc_t.patch %define _hardened_build 1
%description %description
The stalld program monitors the set of system threads, The stalld program monitors the set of system threads,
@ -37,7 +36,7 @@ allow 10 microseconds of runtime for 1 second of clock time.
%autosetup -p1 %autosetup -p1
%build %build
%make_build CFLAGS="%{optflags} %{build_cflags} -DVERSION="\\\"%{version}\\\""" LDFLAGS="%{build_ldflags}" %make_build RPMCFLAGS="%{optflags} %{build_cflags} -DVERSION="\\\"%{version}\\\""" RPMLDFLAGS="%{build_ldflags}"
%install %install
%make_install DOCDIR=%{_docdir} MANDIR=%{_mandir} BINDIR=%{_bindir} DATADIR=%{_datadir} VERSION=%{version} %make_install DOCDIR=%{_docdir} MANDIR=%{_mandir} BINDIR=%{_bindir} DATADIR=%{_datadir} VERSION=%{version}
@ -62,35 +61,40 @@ allow 10 microseconds of runtime for 1 second of clock time.
%systemd_postun_with_restart %{name}.service %systemd_postun_with_restart %{name}.service
%changelog %changelog
* Wed Feb 14 2024 John Kacur <jkacur@redhat.com> - 1.19.1-4 * Thu Aug 22 2024 Chris White <chwhite@redhat.com> - 1.19.6-1
- Put back patch to run stalld service as initrc_t - Makefile: add uninstall target
Resolves: RHEL-8982 - systemd: add BE environment variable to select backend
Resolves: RHEL-33662
* Mon Feb 12 2024 John Kacur <jkacur@redhat.com> - 1.19.1-3 * Wed Jul 31 2024 Chris White <chwhite@redhat.com> - 1.19.5-2
- Copying over missing tests directory - Fix changelog to use RPMCFLAGS, allowing for bpf to be used
Resolves: RHEL-8982 Resolves: RHEL-33662
* Mon Feb 12 2024 John Kacur <jkacur@redhat.com> - 1.19.1-2 * Thu Jul 18 2024 Chris White <chwhite@redhat.com> - 1.19.5-1
- Add llvm as a build requirement - Updated compile options for annocheck hardening
Resolves: RHEL-8982 - Ensure we resolve library symbols at load time (-z now) and are a Position Independent Executable (-pie). Refactored compile options to better deal with arch differences.
- Added an 'annocheck' makefile target for local checking.
- Makefile: change build to use FORTIFY_SOURCE=3
- src/utils.c: fix off-by-one error in buffer allocation
Resolves: RHEL-33662
* Wed Feb 21 2024 John Kacur <jkacur@redhat.com> - 1.19.1-2
- Make fill_process_comm() open comm file as READ_ONLY
Resolves: RHEL-25846
* Fri Feb 09 2024 John Kacur <jkacur@redhat.com> - 1.19.1-1 * Fri Feb 09 2024 John Kacur <jkacur@redhat.com> - 1.19.1-1
- Rebase to v1.19.1 upstream - Rebase to upstream stalld-1.19.1
Resolves: RHEL-8982 Resolves: RHEL-7865
* Tue Oct 18 2022 Leah Leshchinsky <lleshchi@redhat.com> - 1.17.1-1 * Tue Oct 18 2022 Leah Leshchinsky <lleshchi@redhat.com> - 1.17.1-1
- stalld: Fix memory leak in print_boosted_info() - stalld: Fix memory leak in print_boosted_info()
- utils: Check if the system is in lockdown mode - utils: Check if the system is in lockdown mode
- stalld: print process comm and cpu when boosting - stalld: print process comm and cpu when boosting
Resolves: rhbz#2120800 Resolves: rhbz#2120799
* Thu Sep 08 2022 Leah Leshchinsky <lleshchi@redhat.com> - 1.17-2
- Start stalld service as initrc_t
Resolves:rhbz#2112366
* Thu Jul 14 2022 John Kacur <jkacur@redhat.com> - 1.17-1 * Thu Jul 14 2022 John Kacur <jkacur@redhat.com> - 1.17-1
- rebase to upstream v1.17 - rebase to upstream v1.17
Resolves:rhbz#2107273 Resolves:rhbz#2107275
* Thu Mar 31 2022 Fernando Pacheco <fpacheco@redhat.com> - 1.16-1 * Thu Mar 31 2022 Fernando Pacheco <fpacheco@redhat.com> - 1.16-1
- stald/utils: Space, lines and voids clenaups - stald/utils: Space, lines and voids clenaups
@ -99,7 +103,7 @@ Resolves:rhbz#2107273
- src/utils: Comments cleanup - src/utils: Comments cleanup
- src/throttling: Comments cleanup - src/throttling: Comments cleanup
- src/stalld.h Comments cleanup - src/stalld.h Comments cleanup
Resolves: rhbz#2068549 Resolves: rhbz#2068550
* Mon Nov 15 2021 Fernando Pacheco <fpacheco@redhat.com> - 1.15-1 * Mon Nov 15 2021 Fernando Pacheco <fpacheco@redhat.com> - 1.15-1
- stalld: Fix incorrect open() return value checks - stalld: Fix incorrect open() return value checks
@ -109,7 +113,11 @@ Resolves:rhbz#2107273
- tests: Fix uninitialized value action.sa_mask - tests: Fix uninitialized value action.sa_mask
- utils: Bail if malloc() returns null in parse_cpu_list() - utils: Bail if malloc() returns null in parse_cpu_list()
- stalld: Use correct format specifier for long types - stalld: Use correct format specifier for long types
Resolves: rhbz#1990057, rhbz#1996799, rhbz#1996825 Resolves: rhbz#2016010
* Tue Aug 10 2021 Mohan Boddu <mboddu@redhat.com> - 1.14.1-2
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
Related: rhbz#1991688
* Mon Jul 19 2021 Fernando Pacheco <fpacheco@redhat.com> - 1.14.1-1 * Mon Jul 19 2021 Fernando Pacheco <fpacheco@redhat.com> - 1.14.1-1
- stalld: Coding style cleanup - stalld: Coding style cleanup
@ -122,7 +130,7 @@ Resolves:rhbz#2107273
- stalld: Adjust variables in parse_old_task_format() - stalld: Adjust variables in parse_old_task_format()
- utils.c: Use MAX_PATH for pidfile - utils.c: Use MAX_PATH for pidfile
- stalld.c: Remove variable declaration from the middle of the function - stalld.c: Remove variable declaration from the middle of the function
- stalld: Respect -l option in single threaded mode (1983100) - stalld: Respect -l option in single threaded mode (1983103)
- utils: s/try_to_open_file/check_file_exists/ - utils: s/try_to_open_file/check_file_exists/
- utils: use check_file_exists in setup_hr_tick() - utils: use check_file_exists in setup_hr_tick()
- utils: Check for the new sched_features path - utils: Check for the new sched_features path
@ -133,22 +141,22 @@ Resolves:rhbz#2107273
- stalld: Add the adaptive mode option - stalld: Add the adaptive mode option
- stalld: Use the last mode set in the cmdline - stalld: Use the last mode set in the cmdline
- stalld: Fallback to the adaptive mode if force_fifo is selected - stalld: Fallback to the adaptive mode if force_fifo is selected
- stalld: Make single-threaded mode the default one (1920041) - stalld: Make single-threaded mode the default one
- stalld.service: Always restart stalld on exit - stalld.service: Always restart stalld on exit
- utils.c: Fail if user is not root - utils.c: Fail if user is not root
- utils.c: Make the path to sched_debug path dynamic (1977663) - utils.c: Make the path to sched_debug path dynamic
* Tue Jun 29 2021 Fernando Pacheco <fpacheco@redhat.com> - 1.12-1 * Tue Jun 29 2021 Fernando Pacheco <fpacheco@redhat.com> - 1.12-1
- stalld.8: fix diff cruft left in manpage source - stalld.8: fix diff cruft left in manpage source
- stalld.c: clean up handling of nr_running - stalld.c: clean up handling of nr_running
- stalld.c: remove duplicate parameter to fill_waiting_task() (1934582) - stalld.c: remove duplicate parameter to fill_waiting_task()
- stalld: Add error handling in get_cpu_idle_time()
- stalld.service: Run stalld as sched_fifo via systemd - stalld.service: Run stalld as sched_fifo via systemd
- stalld: Add error handling in get_cpu_idle_time() (1966259) - packaging: clean up Makefiles and rpm specfile
- packaging: clean up Makefiles and rpm specfile (1972806)
- stalld: Always print current function for info messages - stalld: Always print current function for info messages
- stalld: Always print current function for warn messages - stalld: Always print current function for warn messages
- stalld: Always print current function for die messages - stalld: Always print current function for die messages
- utils: change PATHMAX to 4096 (1934581) - utils: change PATHMAX to 4096
* Thu May 13 2021 Clark Williams <williams@redhat.com> - 1.11-1 * Thu May 13 2021 Clark Williams <williams@redhat.com> - 1.11-1
- redhat/stalld.spec: pick up gating test version for changelog - redhat/stalld.spec: pick up gating test version for changelog
@ -160,6 +168,9 @@ Resolves:rhbz#2107273
- stalld: Support denylisting of tasks in stalld - stalld: Support denylisting of tasks in stalld
- src/utils: use right argument for warning printf - src/utils: use right argument for warning printf
* Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 1.9-2
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
* Wed Feb 17 2021 Clark Williams <williams@redhat.com> - 1.9-2 * Wed Feb 17 2021 Clark Williams <williams@redhat.com> - 1.9-2
- update to pick up latest gating test - update to pick up latest gating test

View File

@ -0,0 +1,21 @@
#!/usr/bin/bash
# This will get uncommented once we have the rpm
# make sure we have stalld installed
if rpm -q --quiet stalld; then
:
else
sudo dnf install -y stalld
if [[ $? != 0 ]]; then
echo "install of stalld failed!"
exit 1
fi
fi
STALLD="/usr/bin/stalld"
# See if stalld is installed and executable
$STALLD --help 2>> /dev/null
if [[ $? != 0 ]]; then
exit 2
fi

11
tests/tests.yml Normal file
View File

@ -0,0 +1,11 @@
- hosts: localhost
roles:
- role: standard-test-basic
tags:
- classic
tests:
- simple:
dir: scripts
run: ./run_tests.sh
required_packages:
- stalld