Ist die Größe der FIFO-Pipe durch den zugewiesenen Speicherplatz im Festplatten-Cache begrenzt?

479
Emanuele

Unter Linux CentOS 7 verwende ich benannte FIFO-Pipes, die mit mkfifo erstellt wurden, um Daten zwischen Prozesspaaren zu verarbeiten, die auf einem Multiprozessor-Festplattenserver ausgeführt werden (Dell R730xd mit 132 GB RAM und 20 TB RAID-Festplatte).

Um einen Datenpuffer zwischen den beiden Prozessen zu haben, die an eine Pipe angeschlossen sind, stelle ich beim Öffnen der Pipe auch deren Größe auf einen großen Wert (z. B. 128 MB).

Um eine große Rohrgröße zu ermöglichen, musste ich Folgendes einstellen:

/proc/sys/fs/pipe-max-size = 134217728 /proc/sys/fs/pipe-user-pages-soft = 0 (i.e. no limit) 

In meinem Code verwende ich dann (Beispiel aus einem Perl-Skript)

fcntl(\*FD, F_SETPIPE_SZ, int($size)) 

Hin und wieder schlägt die Einstellung der Pipe-Größe mit der Meldung "Speicher kann nicht zugeordnet werden" fehl. Ich habe festgestellt, dass dies passiert, wenn die Festplattenaktivität auf dem Server sehr hoch ist. Beim Betrachten von / proc / meminfo sehe ich, dass der zwischengespeicherte Speicher den Großteil des Speichers meines Servers belegt und nur wenige MB als MemFree übrig lässt. Sobald die Festplattenaktivität nachlässt, nimmt der zwischengespeicherte Speicher langsam ab, und nach einer Weile beginnt der Vorgang der Leitungsgröße wieder zu funktionieren.

Meine Fragen sind:

  1. Warum kollidiert die Rohrgröße mit dem zwischengespeicherten Speicher? Sollte der zwischengespeicherte Speicher nicht freigegeben werden, sobald jemand ihn benötigt (z. B. habe ich keine Probleme beim Starten neuer Prozesse)?
  2. Wie kann ich die maximale Speichermenge beschränken, die für das Zwischenspeichern von Festplatten reserviert werden kann? Ich denke, dass die Beschränkung auf 100 GB statt 132 GB keinen großen Einfluss auf die Festplattenleistung haben sollte, und dies würde viel Speicher für meine Pipes übrig lassen ...

Vielen Dank im Voraus für jede Hilfe.

1
Vielleicht möchten Sie bei stackoverflow nach den Programmieraspekten der Rohrleitungseinstellungen fragen. Ich habe immer gelesen, dass Linux den zwischengespeicherten Speicher gut handhabt, er wird freigegeben und bei Bedarf verwendet. Ich kann mir vorstellen, dass eine Pipe bedeutet, dass er gebraucht wird ... Xen2050 vor 5 Jahren 0

0 Antworten auf die Frage