Ein normaler Benutzer darf auf Linux-Systemen normalerweise keine Realtime-Rechte einfordern. Es gibt aber einen Ausweg, wenn man nicht als root arbeiten oder den Kernel patchen will: Linux Control Groups.
Mit Control Groups ist es möglich, Gruppen von Prozessen Ressourcen zuzuteilen. Damit lässt es sich beispielsweise realisieren, 10 % der Prozessorressourcen auf einem Webserver für die ssh zu reservieren, damit man sich auch dann noch einloggen kann, wenn er überlastet ist. Das ganze lässt sich auch auf Realtime-Anwendungen wie Musiksoftware anwenden.
Dazu installiert man zuerst die Userspace-Tools dazu:
apt-get install cgroup-bin
Bei mir führte das dazu, dass mein Notebook nicht mehr oder nur infinitesimal schnell aus dem Bereitschaftszustand aufwachte. Eine Korrektur in /etc/default/cgconfig schafft Abhilfe:
CREATE_DEFAULT=no
Damit verhindert, dass beim Systemstart alle Prozesse in einer neuen, unterprivilegierten Gruppe landen.
Nun ist nur noch eine Realtime-Gruppe zu definieren und festzulegen, welche Prozesse da hineingehören. Die Gruppe definieren und mounten wir in /etc/cgconfig.conf.
group rt {
perm {
task {
uid = root;
gid = audio;
}
admin {
uid = root;
gid = root;
}
}
cpu {
#Experimentell bestimmter Wert.
cpu.rt_runtime_us = 500000;
}
}
mount {
cpu = /mnt/cgroups/cpu;
}
Die Prozesse legen wir in /etc/cgrules.conf fest:
#@group/user:path ressource group
@audio:/usr/bin/qjackctl cpu rt
@audio:/usr/bin/jackd cpu rt
@audio:/usr/bin/qsynth cpu rt
@audio:/usr/bin/rosegarden cpu rt
@audio:/usr/bin/zynaddsubfx cpu rt
@audio:/usr/bin/monobristol cpu rt
Das war's. cgred (Control Group Rules Engine Daemon) schiebt jetzt alle definierten Prozesse der angegeben Binaries bezüglich der Ressource cpu in die Gruppe rt. Der User muss dazu in der Gruppe audio sein.
Update: Siehe auch.