GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Stellen Sie die Pipe-Kapazität in Linux ein

Schreibvorgänge über die Standard-Pipe-Kapazität erfordern immer noch das Aufwecken des Downstream-Befehls

Wenn Ihr Ziel darin besteht, den Downstream-Befehl nicht zu oft aufzuwecken, haben Sie versucht, -p zu verwenden Option auf buffer ? Es sollte buffer verursachen um Schreibvorgänge zu halten, bis der Puffer zu einem bestimmten Prozentsatz gefüllt ist. Möglicherweise benötigen Sie den -s Möglichkeit auch große Stücke zu schreiben.

Update:D'oh, die Pipes zwischen den Befehlen schränken die Dinge immer noch ein. Versuchen Sie es vielleicht mit dem folgenden Adapterprogramm:

#define _GNU_SOURCE
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, char** argv)
{
  fcntl(atoi(argv[1]), F_SETPIPE_SZ, atoi(argv[2]));
  execvp(argv[3],argv+3);
  while (1);
}

wie in:

adapter 1 (BIGSIZE) cmd1 | cmd2

oder sogar:

adapter 1 (BIGSIZE) cmd1 | adapter 1 (BIGSIZE) buffer [args] | cmd2

wenn cmd1 macht immer noch kleine Schreibvorgänge.


Basierend auf den Vorschlägen von DepressedDaniel und Stéphane Chazelas entschied ich mich für das, was einem Einzeiler am nächsten kam, den ich finden konnte:

function hugepipe {
  perl -MFcntl -e 'fcntl(STDOUT, 1031, 1048576) or die $!; exec { $ARGV[0] } @ARGV or die $!' "[email protected]"
}

Dies ermöglicht:

hugepipe <command> | <command>

und die Pipe zwischen den beiden Befehlen wird die über fcntl angegebene Kapazität haben im Perl-Skript.


Linux
  1. Chattr-Befehl in Linux (unveränderliches Bit setzen)

  2. Linux-dmesg-Befehl - Kernel-Ringpuffer drucken

  3. Linux-IP-Befehl

  4. Linux-cd-Befehl

  5. Linux:Datum über die Befehlszeile festlegen

Linux Watch-Befehl

Xargs-Befehl unter Linux

Linux Nohup-Befehl

Linux-Typ-Befehl

W-Befehl unter Linux

Bei Befehl unter Linux