ubuntuusers.de

Konfiguration

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/sound.png Dieser Artikel befasst sich mit Anpassungen für eine spezialisierte Audio-Workstation, die Klangwiedergabe mit niedrigen Latenzen ermöglichen. Das ist für Normalanwender irrelevant, kann aber für die Musikproduktion von entscheidender Bedeutung sein. Die einfachste und in den meisten Fällen ausreichende Vorgehensweise ist die Installation und Nutzung von Ubuntu Studio. Die wichtigsten der in diesem Artikel erwähnten Konfigurationsschritte werden dabei automatisch vorgenommen.

Kernel

Es gibt spezielle Kernel, die auf niedrige Latenzen optimiert sind. Das können entweder Echtzeitkernel sein oder als gemäßigte Variante sog. Lowlatency-Kernel, wie sie z.B. unter Ubuntu Studio eingesetzt werden. Beide Kerneltypen können zu erhöhtem Stromverbrauch und verminderter Batterielaufzeit führen, sind aber für sehr niedrige Latenzen unabdingbar. In der Praxis genügen dabei allerdings Lowlatency-Kernel den meisten Anforderungen, so dass man nur sehr selten auf Echtzeitkernel zurückgreifen muss.

Wer für Audiozwecke zwingend kleinstmögliche Latenzen benötigt, sollte ggf. sicherstellen, dass er speziell für den Audioeinsatz optimierte Kernel verwendet. Diese können sich - wie hier 🇫🇷 erläutert - im Detail von herkömmlichen Lowlatency- und Echtzeitkerneln unterscheiden.

Echtzeitrechte für die Benutzergruppe Audio

Der Soundserver Jackd benötigt zum zuverlässigen Betrieb besondere Rechte. Diese Rechte kann man der Gruppe audio zuweisen, indem man mit einem Editor mit Root-Rechten [2] die Datei /etc/security/limits.conf bearbeitet. Vor Schluss sind zwei Zeilen einzufügen, das sieht dann so aus:

@audio          -       rtprio          99
@audio          -       memlock         unlimited

Die Rechte stehen erst nach einer Neuanmeldung am System zur Verfügung.

Der Gruppe Audio tritt man dann mit dem Befehl [1]

sudo usermod -a -G audio BENUTZERNAME 

bei.

Optionale Anpassungen bei Problemen

Die folgenden zusätzlichen Anpassungen sind in vielen Fällen überflüssig und sollten nur bei konkreten Problemen versucht werden.

Xruns bei Verwendung von JaMin

JaMin ist ein sehr anspruchsvolles Werkzeug. Unter Umständen funktioniert es selbst bei ansonsten aufwändig angepasstem System nicht einwandfrei. Es kann aber möglich sein, einen zuverlässigen Betrieb durch einfaches Abschalten des Duplexmodus in Jack zu erreichen - beim Mastern wird ja ohnehin keine Aufnahmefunktion benötigt.

Dateisysteme

Das standardmäßig verwendete ext4-Dateisystem kann beim Schreiben erhöhte Latenzen haben. Besser sind in dieser Hinsicht ext2 (dem allerdings die Journalfunktion fehlt), ReiserFS und das besonders bei großen Dateien sehr leistungsfähige XFS. Bei letzterem drohen allerdings nach einem Stromausfall größere Datenverluste als bei anderen Dateisystemen, da es besonders exzessiv von Puffermechanismen Gebrauch macht.

Ob die Leistungsunterschiede zwischen den Dateisystemen für den Lowlatency-Betrieb tatsächlich praktische Relevanz haben, scheint strittig.

noatime-Option für die Dateisysteme ext3 und ext4

Bei der Audioaufnahme ergeben sich immer wieder Performance-Probleme, wenn das Betriebssystem von der selben Festplatte läuft, auf die auch die Audiodateien geschrieben werden sollen (unabhängig von der Partition). Aufgrund des gleichzeitigen Zugriffs von Betriebssystem und Audiosoftware auf das Dateisystem können sich, vor allem bei Programmen, die nur geringe Puffer einsetzen, Probleme ergeben. Speziell Ardour ist hierfür anfällig und quittiert dies unter Umständen mit der Fehlermeldung:

"the disk system on your computer could not keep up with Ardour".

Eine Möglichkeit zu verhindern, dass sich Betriebssystem und Audioprogramm während Aufnahmen in die Quere kommen, ist die entsprechenden Partitionen mit der -noatime-Option einzuhängen. Wie dies umzusetzen ist und was -noatime genau bedeutet, kann im Wiki-Artikel Tuning (Abschnitt „noatime“) nachgelesen werden.

Priorisierung und Latenzanpassungen für Hardwarekomponenten

Anpassung der PCI-Latenzen (für Nvidia-Grafikkarten mit proprietärem Treiber)

Der Grafiktreiber von Nvidia beansprucht das System unter Umständen in einer Weise, die den Lowlatencybetrieb für andere PCI-Geräte beeinträchtigt (auch AGP gehört zum PCI-System). Dies äußert sich in Knistern, sobald ein 3D-Programm gestartet wird. Am sichersten lässt sich das Problem vermeiden, indem man konsequent auf 3D-Programme oder gar 3D-Desktops verzichtet oder gleich ganz auf den ohnehin optionalen 3D-Treiber verzichtet.

Scheint dies unzumutbar, lässt sich unter Umständen etwas durch Anpassung der PCI-Latenzeinstellungen erreichen.

Beispiel für PCI-Latenzanpassung

Achtung!

Änderungen am PCI-Subsystem können zu irreparablen Hardwareschäden führen und sollten absoluten Experten vorbehalten sein.

Mit dem folgenden Befehl [1] bekommt man eine ausführliche Auflistung des PCI-Bus:

lspci -v 

Der Abschnitt für die Grafikkarte sieht beispielsweise so aus:

01:00.0 VGA compatible controller: nVidia Corporation NV11 [GeForce2 MX/MX 400] (rev a1) (prog-if 00 [VGA])
        Subsystem: CardExpert Technology Unknown device 0001
        Flags: bus master, 66MHz, medium devsel, latency 176, IRQ 16
        Memory at f5000000 (32-bit, non-prefetchable) [size=16M]
        Memory at e8000000 (32-bit, prefetchable) [size=128M]
        [virtual] Expansion ROM at f6e00000 [disabled] [size=64K]
        Capabilities: <access denied>

Wichtig ist der Eintrag latency (hier 176) sowie die Adresse der Karte (hier 01:00.0).

Dieser Eintrag latency hat folgende Bedeutung:

  • je kleiner der Wert, umso schneller muss das Gerät den Bus freigeben. Umso kleiner sind dadurch aber auch die Datenpakete, die in einem "Burst" gesendet werden können.

  • je größer der Wert (maximal 255), umso länger kann das Gerät den Bus belegen, und umso größer sind die Datenpakete, die gesendet werden können.

Es handelt sich also immer um einen Kompromiss. Der Standardwert für die meisten Geräte ist 176, hexadezimal b0.

Möglicherweise kann durch eine Verringerung dieses Werts für die Grafikkarte erreicht werden, dass der Bus für die Soundkarte ausreichend verfügbar ist. Um nun den Wert für das PCI-Gerät 01:00.0 auf 128 zu setzen (hexadezimal 80), dient der folgende Befehl:

sudo setpci -v -s 01:00.0 latency_timer=80 

Möglicherweise muss mit den Werten experimentiert werden, um eine gute Balance zu finden. Auch eine Anpassung der Werte für die Grafikkarte kann sinnvoll sein, sie erfolgt entsprechend. Sind gute Werte gefunden, kann man die Schritte in einem Startskript [3] automatisieren.

Priorisierung von Hardwareinterrupts

Hinweis:

Dieser Abschnitt erfordert mehr Erfahrung im Umgang mit Linux und ist nur für fortgeschrittene Benutzer gedacht.

Bei Verwendung eines Echtzeitkernels ist es möglich, die Behandlung bestimmter Interrupts zu priorisieren. Dies ermöglicht eine besondere Bevorzugung der Soundkarte. Zunächst muss festgestellt werden, welcher Interrupt für die Soundkarte verwendet wird. Alle Interrupts sind in der Datei /proc/interrupts aufgelistet. Bei Verwendung eines Echtzeitkernels werden Interrupts von Threads im Userspace behandelt. Diese tragen zum Beispiel den Namen IRQ-xx, wobei xx durch eine Ganzzahl zu ersetzen ist.

Mit Hilfe des Befehls chrt kann nun einem Interrupt eine höhere Echtzeitpriorität zugewiesen werden. Beispiel:

sudo chrt -p 80 `pidof "IRQ-11"` 

Dieser Befehl sorgt dafür, dass der für die Behandlung des Interrupts 11 zuständige Thread die recht hohe Echtzeitpriorität 80 bekommt.

Weitere Hinweise

  • Mehrprozessorsysteme können zu deutlicher Leistungssteigerung führen.

  • Bestimmte ältere VIA- und NVidia-Chipsätze haben Probleme mit gleichzeitigen PCI- und IDE-Transfers und sind insofern schlecht geeignet.

  • DDRAM und Nachfolger sind als Arbeitsspeicher zu bevorzugen. Weniger als 256 MiB sind nur bei reduzierten Anforderungen und mit einer besonders ressourcensparenden Installation möglich, mehr als 512 MiB sind immer gut.

  • Für zuverlässigen Betrieb mit niedrigsten Latenzen sind hochwertige Soundkarten nötig, beispielsweise von RME 🇩🇪 oder M-Audio 🇩🇪. Das bedeutet aber nicht, dass man mit anderen Karten kein Glück haben kann - selbst mit USB-Karten wurden schon erstaunlich niedrige Latenzen erreicht. Es sind prinzipiell alle Karten verwendbar, die von ALSA, Open_Sound_System oder Freebob 🇬🇧 unterstützt werden.

Wichtiger als die "Leistung" der Hardware ist ihre Qualität. So kann ein altes Notebook mit Pentium 3-600, 192 MiB RAM und USB-Soundkarte innerhalb gewisser Grenzen (Spuranzahl) absolut zuverlässig laufen, während ein schlechter VIA-Chipsatz und eine Nvidia-Grafikkarte die Vorteile eines an sich schnellen Systems und einer PCI-Soundkarte zunichte machen können und im schlimmsten Fall überhaupt keinen zuverlässigen Betrieb erlauben.

Diese Revision wurde am 29. April 2019 14:26 von mk1967 erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Tonstudio, Multimedia