Linux AIO / io_submit / io_getevents / auf FIFO (benannte Pipes)

Linux AIO / io_submit / io_getevents / auf FIFO (benannte Pipes)

Ich muss eine große Menge an Daten in eine Pipe schreiben. Kann ich die Linux-Aufrufe io_submit/io_geteventszum Schreiben in Named Pipes verwenden oder ist dies nur für normale Dateien definiert? Ich habe versucht, ein Dokument zu finden, das AIO über Pipes erklärt, konnte aber keines finden. Kann mir hier jemand helfen?

Am meisten Sorgen mache ich mir um das aio_offsetFeld in struct iocb. Was passiert, wenn ein Datenpaket mit dem Offset 8096 vor einem Datenpaket mit dem Offset 4096 zum Lesen/Schreiben eingeplant ist?

Antwort1

Linux AIO ist nicht nur auf normale Dateien beschränkt - esdürfenkann auf speziellen Blockgerätedateien verwendet werden. Ich gehe jedoch davon aus, dass AIO-Schreibvorgänge nicht auf Pipes verwendet werden können, da Pipes nicht in der Lage sind, zu suchen.

IOCB_CMD_PWRITE

pwrite() schreibt count Bytes aus dem Puffer, beginnend bei buf, in den Dateideskriptor fd am Offset offset. Der Dateioffset wird nicht geändert.

Die von fd referenzierte Datei muss suchbar sein.

Der Sinn von AIO besteht darin, mehrere direkte IO-Schreib- (oder Lese-)Vorgänge auf einem Blockgerät in die Warteschlange stellen zu können, ohne Threads verwenden zu müssen.

Um die Leistung von Massenübertragungen über eine Pipe zu verbessern, würde ich vorschlagen, die Pipe-Puffergröße von 4 KB auf nicht mehr als 64 KB zu erhöhen … allerdings sind 64 KB unter modernen Linux-Systemen bereits die Standardeinstellung.

verwandte Informationen