Commit graph

60 commits

Author SHA1 Message Date
Wim Taymans
8d1b3f6f48 module-rt: first destroy the loop and then rtkit
Or else we might still try to use the rtkit in the thread.

See #3357
2023-07-20 16:17:14 +02:00
Wim Taymans
163fde0a69 module-rt: fall back to some defaults in case of error 2023-07-20 15:57:31 +02:00
Wim Taymans
7b24b3b687 module-rt: use lock for thread lookup and invoke
We should only call invoke from one thread at a time so fuse the
gettid of the thread and invoke into the lock.

See #3357
2023-07-20 15:43:41 +02:00
Wim Taymans
47f7802c2e module-rt: wait for thread start
So that we always invoke in the thread.

See #3357
2023-07-20 15:30:01 +02:00
Wim Taymans
66c09682c4 module-rt: make sure we change nice of main_pid 2023-07-20 12:16:13 +02:00
Wim Taymans
09277cbfa4 module-rt: do rtkit from a thread-loop
First check if we can adjust priorities with rlimits, if we can't and we
need to use rtkit, spawn a thread-loop to handle the rtkit stuff.

First do a pw_loop_invoke() to do the rtkit setup, including getting
some properties and then setting the nice level and rlimits.

Use pw_loop_invoke to queue rtkit realtime requests, this ensures we
always perform the requests after the setup and when the properties
are fetched.

See #3357
2023-07-20 12:03:29 +02:00
Wim Taymans
2211016516 module-rt: don't block on method calls
Don't block on the method calls to make realtime or high priority.
Those calls don't return anything and other errors (invalid method,
invalid arguments, no service,...) can be caught differently async.

Fixes #3357
2023-07-19 13:41:18 +02:00
Wim Taymans
4137ff656a module-rt: add option to disable rlimits/portal/rtkit 2023-07-04 11:11:48 +02:00
Wim Taymans
a373d7fde4 module-rt: add comment 2023-07-04 10:36:15 +02:00
Barnabás Pőcze
8c17a6626d treewide: mark some functions static
These were found by enabling the "missing-declarations" warning.
2023-07-03 19:40:31 +02:00
Wim Taymans
9035b97b62 module-rt: improve messages
Move some warnings to info.
Only show 1 warning with all the info why module-rt can't provide
realtime scheduling.

Fixes #3194
2023-05-15 09:31:33 +02:00
Wim Taymans
b3bb7fd567 module-rt: limit nice level based on rtkit min nice
Ask RTKit what the min nice level is and clamp our value to it to avoid
InvalidArgument errors.

Also add some more info messages when the level is clamped or invalid.

Fixes #3186
2023-05-07 19:37:32 +02:00
Wim Taymans
5942f2d6aa module-rt: add some more error to errno mappings 2023-05-07 13:52:17 +02:00
Wim Taymans
07e6f44e58 modules: clean up USAGE arguments
use () to mark optional arguments to avoid confusion with arrays.
Add some more optional arguments.
2023-03-22 16:35:55 +01:00
Gleb Popov
91250f8012 Fix rt-module.c build on FreeBSD. 2023-03-15 16:53:41 +00:00
Barnabás Pőcze
934ab3036e treewide: use SPDX tags to specify copyright information
SPDX tags make the licensing information easy to understand and clear,
and they are machine parseable.

See https://spdx.dev for more information.
2023-02-16 10:54:48 +00:00
Wim Taymans
e86acd8930 module-rt: improve rt settings
Refactor get_rt_priority_range().
When we can't set the requested priority, use rlimit to clamp it
and try again. If this clamped value is bigger than RT_PRIO_MIN,
we can allow this.

The result is that the RTPRIO is set to the max of the user rlimit
RTPRIO, as long as it's more than 11. Previously it would fall back
to RTKit.
2023-01-16 13:08:37 +01:00
Jan Beich
6d58c73937 module-rt: fix warning when xdg-desktop-portal isn't running
$ pipewire
...
[W][1234.001] mod.rt       | [     module-rt.c:  278 pw_rtkit_check_xdg_portal()] Can't find xdg-portal: (null)
...
2023-01-08 07:29:42 +00:00
Wim Taymans
633f9c2d5e module-rt: only call set_rlimit once
We can call this once after we know that we can use RTKit to get
the limits or not.
2022-09-09 15:27:26 +02:00
Maxim Mikityanskiy
853a1c0ba8 module-rt: Fix setting realtime priority with rtkit
The commit cited below mistakenly removed the set_rlimit call from under
`if (impl->use_rtkit)`, saying it doesn't have an rtkit implementation.
However, this function does call rtkit, so it has to be called in the
rtkit flow, otherwise pipewire fails to set the realtime priority,
printing the following error message:

mod.rt: RTKit error: org.freedesktop.DBus.Error.AccessDenied
mod.rt: could not make thread #### realtime using RTKit: Permission denied

Fixes: 5ae1c03d77 ("module-rt: small fixes")
2022-09-08 20:03:56 +03:00
Wim Taymans
5ae1c03d77 module-rt: small fixes
could_use_rtkit -> can_use_rtkit.
Only warn when setting nice and there is no rtkit fallback.
Always call set_rtlimit, it does not have an rtkit implementation, if just
has some properties with limits.
Only try to set nice again with rtkit when we required rtkit for some
functions.
2022-08-30 15:15:56 +02:00
Yuxuan Shui
2e9ba289d3 module-rt: retry with RtKit if set_nice or set_rlimit fails
Previously module-rt only checks if the user have the permission to use
realtime scheduling, and will unconditioally disable RtKit if they do,
even when they don't have the permission to set nice or rlimit.
2022-08-30 14:50:48 +02:00
Hubert Figuière
f1dfa9797b Issue #2570 - Use the xdg-portal-destkop of rtkit
- If the xdg-desktop-portal is there, use it instead of rtkit
- This allow setting the rt priorities within Flatpak
2022-08-01 19:19:24 +00:00
Wim Taymans
aaeafa49c1 fix some printf arguments 2022-07-18 15:39:06 +02:00
Doğukan Korkmaztürk
43602911c6 module-rt: handle pthread_getschedparam() errors correctly
pthread_getschedparam() always returns non-negative values, so checking
if its return value is less than zero always evaluates to false.

Also, pthread functions don't set errno. While logging a warning
message, use the return value of pthread_getschedparam() instead of
errno.
2022-07-14 10:55:33 +02:00
Lucas Holt
6a15a02ec2 Add support for MidnightBSD
Fix build issue

Fix build issue
2022-06-19 18:22:47 +00:00
Wim Taymans
d9fd4dc76a module-rt: fix formating and comment 2022-04-24 10:18:47 +02:00
Wim Taymans
b95c145446 module-rt: fix compilation 2022-04-24 10:14:56 +02:00
Thomas Bernard
5cad844b49 Replace sched_ calls with pthread_ to set realtime priorities 2022-04-24 08:14:01 +00:00
Wim Taymans
553bb3f5ed modules: update docs 2022-04-22 17:08:45 +02:00
Wim Taymans
0b96b87331 thread: implement some properties
Make helper method to parse thread properties and add 2 new properties
to control name and stack-size of the thread.
Use properties when creating threads with the default utils.
Use the default thread utils instead of pthread_create so that the
properties are used.
2022-04-18 13:02:27 +02:00
Quentin Wenger
d2250e9d1c Cleanup argument names in methods and events interfaces: object/data, 2nd pass. 2022-04-18 07:49:35 +00:00
Quentin Wenger
22fc9eec35 Cleanup argument names in methods and events interfaces
First method argument is object, first event argument is data.

Closes !963
2022-04-15 10:11:49 +02:00
Wim Taymans
f0424c0b99 thread: deprecate pw_thread_utils_set()
Setting a global thread-utils is not a good idea, especially
when multiple contexts will register their own interface.

Instead, set the thread-utils as a context object and use this to
configure the data loop in the context.

In JACK we need a per context implementation of the interface so that
we can find the context specific thread-utils.

See #2252
2022-03-30 20:39:34 +02:00
Théo Lebrun
344cacd24a module-rt: small fixes
Signed-off-by: Théo Lebrun <theo.lebrun@bootlin.com>
2022-03-11 18:47:25 +00:00
Théo Lebrun
6798b9a933 module-rt: allow building without RTKit 2022-03-11 18:47:25 +00:00
Robbert van der Helm
5d890435b4 module-rt: Handle realtime sched check edge cases
The policy can of course be higher than zero if the current thread uses
anything other than `SCHED_OTHER`, and `SCHED_RESET_ON_FORK` needs to be
set according to the old policy or we'll either run into errors or cause
unwanted side effects.
2022-01-21 14:17:29 +01:00
Robbert van der Helm
e60f62e69b module-rt: Don't explicitly check RLIMIT_RTPRIO
There are a couple other ways to allow a user/process to use realtime
priviliges like `CAP_SYS_NICE`. Instead of trying to check every
possible factor, just trying if setting realtime priviliges works is
going to be a much cleaner solution.
2022-01-21 14:17:29 +01:00
Wim Taymans
f3dfa9b9af module-rt: only change nice level on our servers
Make the default nice.level an invalid value, that is not configured
as the priority on a process.
Explicitly enable a nice level on our daemon processes.

Fixes #2034
2022-01-18 13:32:25 +01:00
Robbert van der Helm
75212a4054 module-rt: Default RLIMIT_RTTIME to -1/unlimited
As discussed in !1118.
2022-01-17 14:10:44 +00:00
Robbert van der Helm
baabcbe606 module-pw: Log when RTKit limits RLIMIT_RTTIME 2022-01-17 14:10:44 +00:00
Robbert van der Helm
5d169523b3 module-rt: Fix extra whitespace in module usage 2022-01-17 14:10:44 +00:00
Robbert van der Helm
a36f902e1d module-rt: Log when RTKit lowers priorities
Because otherwise just looking at the rest of the output and seeing the
thread being set to priority 20 instead of the value that's set in the
config file may look a bit confusing.
2022-01-16 22:18:41 +01:00
Robbert van der Helm
4419baec45 module-rt: Use magic value for user config prio
Instead of having the context priority hardcoded at 88.
2022-01-16 21:54:32 +01:00
Robbert van der Helm
e2cf858f6a module-rt: Don't override acquire_rt priority 2022-01-16 21:54:32 +01:00
Robbert van der Helm
399e6f09d4 module-rt: Make logging more consistent 2022-01-16 21:54:32 +01:00
Robbert van der Helm
2b73c86af5 modules: Rename module-rtkit to module-rt
I don't think PipeWire currently has a way to temporarily alias
module-rtkit to module-rt though, so right now this would break realtime
scheduling for people with modified configs that use module-rtkit.
2022-01-15 20:59:41 +01:00
Robbert van der Helm
6fc966f385 modules: Drop module-rt 2022-01-15 20:59:41 +01:00
Peter Hutterer
56bc3508c4 module-rt{kit}: replace get_default_int with the new property helper 2021-10-13 07:12:00 +00:00
Peter Hutterer
696a4b22e9 module-rt{kit}: use spa_atoi32 instead of custom strtol
And duplicate the function into rtkit which had a similar but different
approach to it. Let's get both to do the same here.
2021-10-13 07:12:00 +00:00