mkfifo - L'I / O del disco si verifica effettivamente?


10

Ho 2 applicazioni:

  • Produttore (N istanze)
  • Consumatore (1 istanza)

Attualmente scrivo risultati intermedi dai produttori, quindi il consumatore legge questi file dal disco e produce un risultato finale .

Vorrei ridurre al minimo questo I / O "trasmettendo in streaming" gli output dei produttori direttamente al consumatore.

Mi sono imbattuto in named pipe (mkfifo) e in un esempio successivo qui . Sembra fantastico, ma ciò che non riesco a determinare è come questo è effettivamente implementato? La coda FIFO è stata appena bufferizzata attraverso un file? Se è così, probabilmente non mi aiuterebbe. Vorrei che i contenuti fossero trasmessi "attraverso la memoria" interamente senza utilizzare il disco. Forse questo non è possibile attraverso i processi?

Risposte:


10

Nessun I / O su disco (tranne forse durante la navigazione nel filesystem per aprire il file fifo.)

Dalla pagina man di fifo (7) Linux :

Un file speciale FIFO (una pipe denominata) è simile a una pipe, tranne per il fatto che si accede come parte del filesystem. [...] Quando i processi scambiano dati tramite FIFO, il kernel passa internamente tutti i dati senza scriverli nel filesystem. Pertanto, il file speciale FIFO non ha contenuti sul filesystem; la voce del filesystem funge semplicemente da punto di riferimento in modo che i processi possano accedere alla pipe usando un nome nel filesystem.


Perfetto. Ho letto la pagina man di mkfifo, ma non ho pensato di cercare una pagina su "fifo" - Grazie!
Jmoney38,

3

Non importa se il risultato è effettivamente il backup del disco oppure no, perché se è disponibile memoria sufficiente verrà comunque memorizzato nella cache e non verrà eseguito alcun IO effettivo del disco. Al contrario, se è supportato da memoria e non è disponibile memoria sufficiente, potrebbe essere scambiato su disco.

Se dovessi indovinare, direi che pipe è in realtà basato sulla memoria, ma quindi, ciò dovrebbe cambiare solo se i dati in coda vengono conservati tra i riavvii.

Ciò di cui dovresti occuparti è che, poiché hai più produttori, le tue scritture devono essere atomiche in modo che non siano intercalate nella coda. Vedi i man 7 pipedettagli su come assicurarsi che una scrittura sia atomica.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.