Aus LinuxUser 01/2006

Multimedia-Anwendungen beschleunigen

Speed

Es ist schon verteufelt: Trotz Gigahertz und Gigabytes ruckelt das Bild beim Fernsehen am Computer wie eh und je. Woran das liegt und was experimentierfreudige User dagegen unternehmen, erfahren Sie hier.

Linux ist einfach zu gerecht. Als klassisches Multiuser-System war es lange Zeit Windows überlegen, weil auch die Anwendungen mehrerer Nutzer gleichberechtigt ihre Arbeit taten. Heute sitzt vor einem Linux-Computer oft nur ein einzelner Mensch und möchte die ganze Rechenleistung für sich haben. Da fällt es schwer, zu akzeptieren, dass die Sound-Wiedergabe oder das Videobild aussetzen, nur weil im Hintergrund ein paar Systemprozesse laufen und sich vordrängeln.

So gut es geht

Moderne Linux-Kernel bieten an, einzelnen Anwendungen höhere Prioritäten zuzuweisen, sodass sie bei der Zuteilung von Rechenzeit bevorzugt werden. Die ist letztlich begrenzt, und so ist das Ergebnis solchen Tunings stark von der tatsächlichen Auslastung abhängig. So genannte Echtzeit-Priorität ist also hier zu verstehen als „so gut wie möglich“. Für viele Multimedia-Anwendungen bringen die hier beschriebenen Methoden jedenfalls unter normalen Umständen eine deutliche Beschleunigung bzw. größere Stabilität.

Die Lösungen variieren in ihren Ergebnissen wie im erforderlichen Aufwand. Wer die neueste Version seiner Distribution verwendet, wird viele Features schon im Standard-Kernel finden, so etwa ab Kernel-Version 2.6.14 (Rlimits). Der Kernel-Patch von Con Kolivas [1] ist mächtiger, erfordert aber die Übersetzung der gepatchten Kernel-Sourcen. Hinweise dazu gibt der Artikel [2].

In jedem Fall empfiehlt es sich, beim Kompilieren eines Kernels die so genannte Kernel-Preemption einzuschalten. Ob Ihr Distributor dieses Feature einkompiliert hat, erfahren Sie durch einen Blick in die Config-Datei des Kernels, die sie meist im Verzeichnis /boot/grub finden, zum Beispiel bei Ubuntu config-2.6.12-9-k7. Mit Grep suchen Sie dort nach dem String PREEMPT. Stoßen Sie dabei auf CONFIG_PREEMPT is not set oder PREEMPT_NONE, kompilieren Sie den Kernel besser mit geänderten Einstellungen neu (Abbildung 1). Akzeptabel ist dagegen CONFIG_PREEMPT_VOLUNTARY=y, am besten PREEMPT.

Abbildung 1: Wer ein reaktionsschnelles System möchte, sollte beim Kernel-Compile die Option "CONFIG_PREEMPT" einschalten.
Abbildung 1: Wer ein reaktionsschnelles System möchte, sollte beim Kernel-Compile die Option „CONFIG_PREEMPT“ einschalten.

Stellt der Kernel Echtzeitprioritäten zur Verfügung, bleibt noch die Frage, wie man sie einschaltet. Normalerweise darf nur Root ein Programm mit Echtzeit-Priorität laufen lassen. Schließlich soll nicht jeder Anwender mit seiner Software den Rechner zum Stillstand bringen können. Der selbst verantwortliche Desktop-User muss aber erst wieder sein Linux-System einstellen, um auch ohne Root-Rechte seine Programme zu beschleunigen.

Echtzeit ohne Root.

Die Community ambitionierter Audionutzer hat schon vor längerer Zeit eine Lösung für die Echtzeitanforderungen des Audioservers Jack [3] gefunden: das Kernel-Modul Realtime-lsm [4]. Die Kernelentwickler haben bislang wegen verschiedener Bedenken das Modul nicht in den Standard-Kernel aufgenommen, es hat sich in der Audio-Praxis aber gut bewährt. Der Zweck des Moduls besteht darin, nicht mit Root-Rechten laufenden Programmen Echtzeitpriorität zuzuweisen. Das ist zum Beispiel bei Jack wichtig, da er mit der gleichen User-ID laufen muss wie die auf ihn zugreifenden Audio-Programme – jeden Synthesizer als Root zu starten, empfiehlt sich aber nicht unbedingt.

Realtime-LSM

Ubuntu führt realtime-lsm im Repository, Benutzer anderer Distributionen laden den Quellcode am besten von der Website herunter. Um Realtime-lsm zu verwenden, muss das Capabilities-Merkmal als Modul vorliegen, also nicht fest im Kernel einkompiliert sein. Das ist zum Beispiel bei Suse 9.3 der Fall, bei Fedora Core 4 nicht. Fedora-Benutzer müssen also den Kernel neu kompilieren und dabei Capabilities als Modul einstellen (Abbildung 2), die anderen brauchen je nach Distribution entweder die Kernel-Sourcen oder zumindest -Header.

Abbildung 2: Um Realtime-lsm zu benutzen, muss Capabilities als Modul kompiliert sein.
Abbildung 2: Um Realtime-lsm zu benutzen, muss Capabilities als Modul kompiliert sein.

Wenn die Voraussetzungen erfüllt sind, übersetzen und installieren Sie Realtime-LSM mit make und make install. Wenn Sie dann noch depmod -a ausführen, können Sie mit modprobe realtime-lsm das Modul laden. Es versteht einige Parameter, die sein Verhalten festlegen. So vergibt es mit any=1 Echtzeitpriorität an jedes Programm, das diese anfordert. Etwas mehr Kontrolle erlaubt der Parameter gid, der die Gruppen-ID autorisierter Programme festlegt. Gehören Sie zum Beispiel der Gruppe audio mit der ID 33 an, laden Sie das Kernel-Modul mit modprobe realtime-lsm gid=33. Nun können Sie auch ohne Root-Rechte Jackd mit der Option -R im Echtzeitmodus starten.

Rlimits

Statt der beschriebenen Lösung ziehen die meisten Kernel-Entwickler die Vergabe der Realtime-Priorität über den Rlimit-Mechanismus vor, der deshalb seit Version 2.6.14 Teil des Standard-Kernels ist. Das R in Rlimits steht allerdings nicht für Realtime, sondern für Ressource. Es erlaubt die Nutzung verschiedener Systemressourcen festzulegen, wie beispielsweise den Speicherverbrauch oder eben die Priorität.

Der von den Entwicklern vorgesehene Weg zur Steuerung von Rlimits führt über das PAM-Subsystem (Pluggable Authentication Module), das sich auf vielen Distributionen (Fedora, Suse, …) unter anderem um die Passwortverwaltung kümmert. Dummerweise beherrschen nur neue (ab 0.79) und gepatchte PAM-Versionen die Rlimits. Haben Sie eine solche installiert, stellen Sie in der Datei /etc/security/limits.conf ein, welche Anwender bzw. Gruppen Echtzeitprioritäten zuweisen dürfen. An erster Stelle steht die berechtigte Gruppe, dann die Ressource und der Wert. Die zweite Spalte legt normalerweise fest, ob der Benutzer den vorgegebenen Wert verändern darf (soft) oder nicht (hard). Ressourcen sind zum Beispiel die Realtime-Priorität rt_priority, der Nice-Level nice und die Menge zu sperrenden Speichers memlock.

@audio hard rt_priority 80
@audio hard nice -10

Wer nicht das komplette PAM seiner Distribution aktualisieren möchte, kann auf ein spezielles Utility zurückgreifen, das sich nur um die Echtzeitpriorität kümmert und entsprechend set_rtlimits heißt [5]. Damit nicht jeder nach Lust und Laune priorisiert, legt der Administrator über die Konfigurationsdatei /etc/set_rtlimits.conf fest, welche Benutzer oder Gruppen das dürfen. Zusätzlich führt die Datei die Programme selbst auf, die Echtzeitpriorität erhalten können. Folgende Zeile erlaubt das dem Benutzer joey für den Jack-Server /usr/bin/jackd:

LinuxUser 01/2006 KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland

Hinterlasse einen Kommentar

  E-Mail Benachrichtigung  
Benachrichtige mich zu: