Drahtlose Netzwerke sind überall: Zu Hause, im Café und in der Firma. Im Gegensatz zu Kabelnetzen verliert der Admin bei WLANs allerdings schnell die ... (mehr)

Parallele Linux-Shell

Prozessoren mit mehreren Kernen statt immer höherer Taktfrequenz beschleunigen inzwischen selbst Smartphones und Laptops der unteren Preisklasse. Betriebssysteme, Benutzeroberflächen und viele Anwendungen setzen fast selbstverständlich auf Parallelbetrieb. Nur die Linux-Shell läuft nach wie vor im alten, sequenziellen Betrieb: Ein Befehl folgt brav dem anderen.

Das Gnu-Werkzeug Parallel [2] schafft jedoch Abhilfe. Ohne dass der Anwender sich um die Verwaltung von Ressourcen oder um die Aufteilung von Eingabedaten kümmern muss, nutzt das Werkzeug die über die Prozessorkerne verteilte Rechnerleistung aus.

Das Perl-Skript Parallel findet sich bei den meisten Distributionen in einem eigenen, gleichnamigen Paket. Beim Aufruf liest es die auszuführenden Kommandos von STDIN; alternativ teilt es eine zu verarbeitende Datei auf und wendet einen Befehl auf die einzelnen Bestandteile an.

Beispielsweise komprimiert der folgende Befehl mehrere Dateien in einem Verzeichnis gleichzeitig:

$ ls | parallel gzip {}

Die Ausgabe von ls lässt sich hierbei beliebig einschränken oder durch ein anderes Werkzeug wie find ersetzen. Ein Paar geschweifter Klammern »{}« steht als Platzhalter für eine Eingabezeile zur Verfügung, sodass sie sich als Argument für einen Befehl verwenden lässt. Eine alternative Schreibweise nimmt Eingabeargumente direkt entgegen:

$ parallel gzip ::: datei1 datei2 datei3

Das Kommandozeilenargument »-j« definiert die Anzahl der nebenläufig auszuführenden Jobs. Standardmäßig startet Parallel so viele Prozesse gleichzeitig, wie Prozessoren beziehungsweise Kerne zur Verfügung stehen. Die Angabe lässt sich auch in Prozent und relativ zur Anzahl der Prozessoren definieren, beispielsweise führt die Angabe von »-j 150%« dazu, dass jede CPU mit 1,5 Jobs versorgt wird. Diese Zahl gilt als gute Faustregel, um eine dauerhafte Vollauslastung zu erzielen, da die leichte Überbelegung dem Prozessorleerlauf während längerer Festplattenzugriffe entgegenwirkt.

Falls bei der Ausgabe der parallelen Jobs die Reihenfolge wichtig ist, sorgt das Argument »-k« dafür, dass diese der Eingabereihenfolge entspricht, egal wie schnell die Teilprozesse die Verarbeitung abschließen. Ohne diese Angabe lässt sich nicht vorhersagen, in welcher Reihenfolge die Einzelergebnisse eintreffen, da viele, praktisch unberechenbare Faktoren einzelne Prozesse verzögern oder beschleunigen können.

Soll ein Befehl eine oder mehrere Dateien abarbeiten, hilft das Argument »--pipe« . Der folgende Befehl zerlegt beispielsweise eine Datei zeilenweise und füttert sie an mehrere nebeneinander laufende grep-Prozesse:

$ parallel -j 150% -k --pipe grep "ERROR" programm.log

Im Fall von grep bietet sich die zeilenweise Verarbeitung zwar an, aber andere Befehle bevorzugen möglicherweise andere Eingabeblöcke. In diesem Fall definieren die Argumente »--recstart« und »--recend« die Zeichen, die anstelle von Zeilenumbrüchen als Markierungen für Beginn beziehungsweise Ende einer Einheit dienen.

Bei der Parallelisierungswut darf ein Hinweis jedoch nicht fehlen: In vielen Fällen, in denen Bash-Prozesse viel Zeit benötigen, liegt das gar nicht am Prozessor. Der Flaschenhals ist häufig die Festplatte mit ihren vergleichsweise langen Lese- und Schreibzugriffszeiten. In diesem Fall hilft es leider nichts, die eingehenden Daten auf mehrere Prozessoren zu verteilen.

Neue Tipps im Newsletter

Jede Woche erscheint in unserem Newsletter ein neuer ADMIN-Tipp. Eine Sammlung aller Tipps finden Sie im Archiv der ADMIN-Tipps unter http://www.admin-magazin.de/News/Tipps/ . Den Newsletter können Sie unter http://www.admin-magazin.de/newsletter abonnieren.

Infos

  1. Enterprise Drives: Fact or Fiction? (Englisch) http://blog.backblaze.com/2013/12/04/enterprise-drive-reliability/
  2. Gnu Parallel: http://www.gnu.org/software/parallel/

Ähnliche Artikel

comments powered by Disqus
Mehr zum Thema

ADMIN-Tipp: Lohnen Enterprise-Platten?

Brian Beach vom Online-Backup-Anbieter Backblaze hat untersucht, ob sich die angeblich langlebigeren, aber viel teureren Enterprise-Festplatten tatsächlich lohnen. Sein Blog-Eintrag   enthüllt Bemerkenswertes.

Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023