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.

The --set operation sets pipe buffer sizes. If it is specified, it must be specified with an explicit size. Otherwise, it is implied and the size is read from /proc/sys/fs/pipe-max-size. The kernel may adjust size as described in fcntl(2). To determine the actual buffer sizes set, use the --verbose option. If neither --file nor --fd are specified, --set acts on standard output.

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.

The --get operation outputs data in a tabular format. The first column is the name of the pipe as passed to pipesz. File descriptors are named as "fd N". The second column is the size, in bytes, of the pipe’s internal buffer. The third column is the number of unread bytes currently in the pipe. The columns are separated by tabs ('\t', ASCII 09h). If --verbose is specified, a descriptive header is also emitted. If neither --file nor --fd are specified, --get acts on standard input.

Unless the --check option is specified, pipesz does not exit if it encounters an error while manipulating a file or file descriptor. This allows pipesz to be used generically without fear of disrupting the execution of pipelines should the type of certain files be later changed. For minimal disruption, the --quiet option prevents warnings from being emitted in these cases.

The kernel imposes limits on the amount of pipe buffer space unprivileged processes can use, though see BUGS below. The kernel will also refuse to shrink a pipe buffer if this would cause a loss of buffered data. See pipe(7) for additional details.

pipesz supports specifying multiple short options consecutively, in the usual getopt(3) fashion. The first non-option argument is interpreted as command. If command might begin with '-', use '--' to separate it from arguments to pipesz. In shell scripts, it is good practice to use '--' when parameter expansion is involved. pipesz itself does not read from standard input and does not write to standard output unless --get, --help, or --version are specified.

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
    Set the size of the pipe buffers, in bytes. This option may be suffixed by K, M, G, KiB, MiB, or GiB to indicate multiples of 1024. Fractional values are supported in this case. Additional suffixes are supported but are unlikely to be useful. If this option is not specified, a default value is used, as described above. If this option is specified multiple times, a warning is emitted and only the last-specified size is used. As a special behavior, if neither --file nor --fd are specified, standard output is adjusted. It is an error to specify this option in combination with --get.

-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 Dateideskriptor
    setzt die an pipesz übergebene Puffergröße der Pipe oder FIFO auf die angegebene Dateideskriptornummer. 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.