Systemd supports the setup of real-time priority to services launched during the boot process. This is done using the following Directives in the Service section:
Sets the CPU scheduling policy for executed processes. Takes one of other, batch, idle, fifo or rr.
Sets the CPU scheduling priority for executed processes. The available priority range depends on the selected CPU scheduling policy. For real-time scheduling policies, an integer between 1 (lowest priority) and 99 (highest priority) can be used.
This is the mcelog service unity:
[Unit] Description=Machine Check Exception Logging Daemon [Service] ExecStart=/usr/sbin/mcelog --ignorenodev --daemon --foreground [Install] WantedBy=multi-user.target
By adding the following directives in Service section:
[Unit] Description=Machine Check Exception Logging Daemon [Service] ExecStart=/usr/sbin/mcelog --ignorenodev --daemon --foreground CPUSchedulingPolicy=fifo CPUSchedulingPriority=20 [Install] WantedBy=multi-user.target
When restarted, the mcelog service will start with the priority set by systemd:
# tuna --show_threads | grep mcelog 4680 FIFO 20 0,1 2 0 mcelog