Realtime Prozesse aus dem Userland

Mit den Systemaufrufen:

struct sched_param sp;
sched_setscheduler(pid,SCHED_RR,&sp);

lässt sich – sofern man über CAP_SYS_NICE Capabilities verfügt – jederzeit unter Linux der Prozess pid in einen soften Realtime Mode bringen. Hierbei übernimmt das Kernelmodul sched_rt das Prozessscheduling von sched_fair (Complete Fair Scheduler).

Beachtenswert hierbei ist wieder die gewöhnungsbedürftige Invertierung der RT-Prioritäten. Der Aufruf

struct sched_param sp;
sp.sched_priority = 14;

setzt die RT-Priorität auf 14 – welches im Linux Prioritätenarray dann 99-14=85 ergibt. Dies bestätigt die Ausgabe Prio des folgenden Befehls:

cat /proc/<pid>/sched

Die Capability CAP_SYS_NICE muss übrigens nicht zwangsläufig bedeuten, dass nur root den Prozess starten muss. Mittels den libcap-progs kann auch folgender Befehl dem Programm auf Filesystemebene diese Capability zugestehen.

setcap cap_sys_nice=ep /pfad/zu/meinem/programm

Erforderlich dazu ist, dass der Kernel mit CONFIG_SECURITY_FILE_CAPABILITIES=y kompiliert wurde. Die Linux Kernel welche von Novell gebaut wurden (SLES,openSUSE) müssen noch mit dem Bootparameter file_caps=1 gestartet werden, da diese die Fähigkeit zwar auch einkompiliert haben, aber standardmässig deaktiviert ist.
Der Bootparameter ist übrigens exklusiv nur auf Novell Systemen vorhanden – der offizielle Vanilla Kernel Bootparameter bzgl. Capabilities lautet no_file_caps ,um die Fähigkeit beim Start zu deaktivieren.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.