19.4. Buffering und Latenzen

In diesem Abschnitt geht es um die Frage, wie man eine unterbrechungsfreie Audio-Wiedergabe sicherstellen kann. Die Problematik ist keineswegs Linux-spezifisch, sondern besteht bei sämtlichen Multitasking-Betriebssystemen. Bei einem Multitasking-Betriebssystem laufen normalerweise mehrere Prozesse gleichzeitig. Da der Prozessor stets nur einen Prozess bearbeiten kann, wird den Prozessen durch den so genannten Scheduler des Betriebssystems Prozessor-Zeit zugeteilt. Dieses Umschalten zwischen den Prozessen geschieht normalerweise so schnell, dass der Anwender davon nichts merkt.

Bei der Audio-Wiedergabe würden sich aber bereits kurze Unterbrechungen durch Klicks bemerkbar machen. Audio-Programme verwenden daher einen Puffer (Buffering) für die Wiedergabe. Die Audio-Daten, die sich im Puffer befinden, werden auch dann weiter von der Soundkarte ausgegeben, wenn das Audio-Programm vom Scheduler unterbrochen wurde. Die Wiedergabe ist also dann klickfrei, wenn der Puffer groß genug ist, um auch die größtmögliche Unterbrechung zu überbrücken.

Die Puffergröße bestimmt aber auch die Reaktionszeit (Latenz) des Programms. Besonders bei interaktiven Anwendungen, wie Echtzeit-Synthesizern und DJ-Mixer-Konsolen versucht man daher, die Puffergröße möglichst klein zu halten. Grundsätzlich hängt die Dauer der Unterbrechungen von der Systemauslastung und der Priorität des Prozesses ab. Daraus folgt, dass sich die Größe des für klickfreie Wiedergabe benötigten Puffers verringern lässt, indem die Priorität des Audio-Programms erhöht wird oder ein Echtzeit-Scheduler verwendet wird. Viele Audio-Programme versuchen daher, ihren Prozess auf einen Echtzeit-Scheduler umzustellen. Die Umstellung eines Prozesses auf einen anderen Scheduler ist jedoch nur mit root-Privilegien möglich. Benötigt wird hierzu das Programm setpriority aus dem Paket rtstools.

Um zum Beispiel das Programm timidity mit dem FIFO-Scheduler laufen zu lassen können Sie folgendermaßen vorgehen:

  1. Starten Sie das Programm timidity

  2. Starten Sie eine root-Konsole

  3. Finden Sie die Prozessnummer von timidity mit dem Befehl

    pidof timidity
  4. Ändern Sie den Scheduler mit Hilfe des Befehls

    setpriority <Prozessnummer> fifo 10

Sie können diesen Vorgang in einer root-shell auch mit folgendem Befehl beschleunigen:

for i in `pidof timidity`; do setpriority $i fifo 10; done

Es ist immer ein Risiko, ein Programm im root-Modus laufen zu lassen, da dem Programm in diesem Fall alles erlaubt ist. Ein nicht vertretbares Sicherheitsrisiko ergibt sich, wenn der Rechner mit dem Internet verbunden ist. In diesem Fall können Sicherheitslücken des Programms ausgenutzt werden, um sich Zugang zum System zu verschaffen.

[Warning]Warnung

Die im Folgenden beschriebenen Befehle sollten niemals auf Rechnern ausgeführt werden, auf die vom Internet aus zugegriffen werden kann, oder bei denen ein Systemabsturz oder Datenverlust schwerwiegende Folgen hätte.

Um ein Programm im root-Modus auszuführen, sollte man den sudo-Mechanismus verwenden. Dieser wird am Beispiel des Programms timidity++ erläutert. Um allen Benutzern auf ihrem System die Ausführung von timidity++ mit root-Privilegien zu ermöglichen, müssen Sie die Datei /etc/sudoers anpassen; zum Vorgehen vgl. sudo und sudoers. Falls Sie nicht mit dem Editor vi vertraut sind, können Sie mit dem Befehl export EDITOR=joe einen anderen Editor, hier zum Beispiel joe, wählen. Rufen Sie dann als root visudo auf und fügen Sie die folgende Zeile am Ende der /etc/sudoers ein:

ALL ALL=(ALL) /usr/bin/timidity

Es ist nun jedem Benutzer des Systems erlaubt, mit dem Befehl sudo timidity timidity im root-Modus zu starten. Dabei wird die Eingabe eines Passworts verlangt (dies ist das Passwort des jeweiligen Benutzers), falls seit dem letzten sudo-Kommando mehr als fünf Minuten vergangen sind.