PIPESZ(1)

BEZEICHNUNG
pipesz - Pipe- und FIFO-Puffergrößen festlegen oder untersuchen

ÜBERSICHT

pipesz [Optionen] [--set Größe] [--] [Befehl [Argument …]]

pipesz [Optionen] --get

BESCHREIBUNG

Pipes und FIFOs verwalten einen internen Puffer, der zum Übertragen von Daten zwischen der Leseseite und der Schreibseite verwendet wird. In einigen Fällen kann die Standardgröße dieses internen Puffers den Erfordernissen nicht entsprechen. Dieses Programm bietet Möglichkeiten, die Größe dieser Puffer zu setzen und zu untersuchen.

Die Aktion --set legt die Pipe-Puffergrößen fest. Falls angegeben, muss sie mit einer expliziten Größe angegeben werden. Andernfalls wird sie implizit übernommen und die Größe wird aus /proc/sys/fs/pipe-max-size gelesen. Der Kernel kann die Größe wie in fcntl(2) beschrieben anpassen. Um die tatsächlich einzustellenden Puffergrößen anzuzeigen, verwenden Sie die Option --verbose. Wenn weder --file noch --fd angegeben sind, wirkt --set auf die Standardausgabe.

Die Option --set ermöglicht die Übergabe eines optionalen Befehls zur Ausführung nach dem Festlegen der Pipe-Puffergrößen. Dieser Befehl wird auf die angepassten Pipes angewendet.

Die Operation --get gibt Daten in tabellarischer Form aus. Die erste Spalte enthält den Namen der Pipe, wie sie an pipesz übergeben wurde. Dateideskriptoren werden als »fd N« bezeichnet. Die zweite Spalte gibt die Größe des internen Puffers der Pipe in Bytes an. Die dritte Spalte enthält die Anzahl der aktuell in der Pipe ungelesenen Bytes. Die Spalten sind durch Tabulatoren ('\t', ASCII 09h) getrennt. Bei Angabe von --verbose wird zusätzlich ein beschreibender Header ausgegeben. Sind weder --file noch --fd angegeben, verwendet --get die Standardeingabe.

Sofern die Option --check nicht angegeben ist, wird pipesz nicht beendet, wenn bei der Bearbeitung einer Datei oder eines Dateideskriptors ein Fehler auftritt. Dadurch kann pipesz generisch verwendet werden, ohne dass die Ausführung von Pipelines unterbrochen werden muss, falls sich der Typ bestimmter Dateien später ändert. Um Störungen zu minimieren, verhindert die Option --quiet in diesen Fällen die Ausgabe von Warnungen.

Der Kernel begrenzt den Pipe-Pufferspeicher, den nicht privilegierte Prozesse nutzen können (siehe FEHLER weiter unten). Der Kernel lehnt außerdem die Verkleinerung eines Pipe-Pufferspeichers ab, wenn dies zu einem Verlust gepufferter Daten führen würde. Weitere Informationen finden Sie unter pipe(7).

pipesz unterstützt die Angabe mehrerer kurzer Optionen nacheinander, wie es bei getopt(3) üblich ist. Das erste Argument ohne Option wird als Befehl interpretiert. Falls der Befehl mit »-« beginnen könnte, verwenden Sie »--«, um es von den Argumenten für pipesz zu trennen. In Shell-Skripten empfiehlt sich die Verwendung von »--«, wenn Parameter erweitert werden sollen. pipesz selbst liest nicht aus der Standardeingabe und schreibt nicht in die Standardausgabe, es sei denn, --get, --help oder --version sind angegeben.

OPTIONEN

-g, --get
    schreibt die Größe der Pipe-Puffer in die Standardausgabe und beendet das Programm. Falls weder --file noch --fd angegeben sind, wird versucht, aus der Standardeingabe zu lesen. die Angabe dieser Option zusammen mit --set verursacht einen Fehler.

-s, --set Größe
    legt die Größe der Pipe-Puffer in Bytes fest. Diese Option kann mit den Suffixen K, M, G, KiB, MiB oder GiB versehen werden, um Vielfache von 1024 anzugeben.Bruchwerte werden in diesem Fall unterstützt. Weitere Suffixe werden unterstützt, sind aber wahrscheinlich nicht sinnvoll. Wird diese Option nicht angegeben, wird ein Standardwert verwendet, wie oben beschrieben. Wird diese Option mehrfach angegeben, wird eine Warnung ausgegeben und nur die zuletzt angegebene Größe verwendet. Als besonderes Verhalten wird die Standardausgabe angepasst, wenn weder --file noch --fd angegeben sind. Die Angabe dieser Option in Kombination mit --get ist ein Fehler.

-f, --file Pfad
    setzt die Puffergröße der Pipe oder FIFO auf Pfad, relativ zum aktuellen Arbeitsverzeichnis. Sie können für verschiedene Dateien diese Option mehrfach angeben, auch in Kombination mit --file. Im Allgemeinen wird diese Option mit FIFOs verwendet, ist aber auch mit anonymen Pipes verwendbar, wie jenen in /proc/PID/fd. Änderungen der Puffergröße von FIFOs sind nach einem Systemneustart nicht mehr wirksam.

-n, --fd Nummer
    setzt die an pipesz übergebene Puffergröße der Pipe oder FIFO auf die angegebene Nummer des Dateideskriptors. Sie können für verschiedene Dateideskriptoren diese Option mehrfach angeben, auch in Kombination mit --file. Für häufig vorkommende Fälle werden kürzel angeboten: fd 0 (Standardeingabe, stdin), fd 1 (Standardausgabe, stdout) und fd 2 (Standardfehlerausgabe, stderr). Dies sollte in den meisten Fällen genügen.

-i, --stdin
    Kürzel für --fd 0.

-o, --stdout
    Kürzel für --fd 1.

-e, --stderr
    Kürzel für --fd 2.

-c, --check
    beendet das Programm, ohne den Befehl auszuführen, falls beim Manipulieren einer Datei oder eines Dateideskriptors ein Fehler auftrat. Falls diese Option nicht angegeben ist, wird standardmäßig eine Warnung in die Standardfehlerausgabe geschrieben und die Programmausführung fortgesetzt.

-q, --quiet
    schreibt keine nicht-schwerwiegenden Diagnosemeldungen in die Standardfehlerausgabe. Die normale Ausgabe von --get, --verbose, --help oder --version wird hiervon nicht beeinflusst.

-v, --verbose
    veranlasst pipesz, eine beschreibende Überschrift über der Tabelle auszugeben, wenn dies mit --get angegeben wird. Wenn Sie es ansonsten angeben, schreibt pipesz die vom Kernel festgelegten tatsächlichen Puffergrößen in die Standardfehlerausgabe.

-h, --help
    zeigt einen Hilfetext an und beendet das Programm.

-V, --version
    zeigt Versionsinformationen an und beendet das Programm.

BEISPIELE

pipesz dd if=Datei bs=1M | ...
    führt dd(1) mit einer erweiterten Standard-Ausgabepipe aus, was es ermöglicht, Kontextschalter beim Pipen um große Blöcke zu vermeiden.

pipesz -s1M -cf /run/mein-dienst.fifo
    Setzt die Pipe-Puffergröße einer Dienst-FIFO auf 1.048.576 Byte. Falls die Puffergröße nicht gesetzt werden kann, wird pipesz mit einem Fehler beendet.

echo hello | pipesz -g
    gibt die Größe der Pipe aus, die von der Shell verwendet wird, um Eingaben an pipesz zu übergeben. Da pipesz nicht aus der Standardeingabe liest, können auch 6 ungelesene Bytes in die Pipe gelangen, abhängig von relativen Timings.

find /proc/PID/fd -exec pipesz -gqf '{}' ';'
    gibt die Größe und Anzahl ungelesener Bytes aller Pipes aus, die von PID verwendet werden. Falls einige Pipes routinemäßig voll sind, kann pipesz einen Flaschenhals bei der Verarbeitung mildern.

ANMERKUNGEN

Linux unterstützt die Größenanpassung von Pipe-Puffern seit Kernel 2.6.35. In dieser Version wurde außerdem /proc/sys/fs/pipe-max-size eingeführt.

Dieses Programm verwendet F_GETPIPE_SZ/F_SETPIPE_SZ aus fcntl(2), um die Pipe-Puffergrößen zu ermitteln und zu setzen.

Dieses Programm verwendet FIONREAD aus ioctl(2), um die Menge der ungelesenen Daten in Pipes zu ermitteln. Falls dies aus irgendeinem Grund fehlschlägt, wird die Menge der ungelesenen Daten als 0 gemeldet.

FEHLER

Vor Linux 4.9 beeinträchtigten einige Fehler das Erzwingen bestimmter Ressourcenbeschränkungen beim Setzen von Pipe-Puffergrößen. In pipe(7) finden Sie Details hierzu.

AUTOREN

SIEHE AUCH

pipe(7)

FEHLER MELDEN

Nutzen Sie zum Melden von Fehlern das

VERFÜGBARKEIT

Der Befehl pipesz ist Teil des Pakets util-linux, welches aus dem heruntergeladen werden kann.