Se chiamo gatto / dev / null due volte in successione su un file, la seconda chiamata sarà un no-op?

StackOverflow https://stackoverflow.com/questions/6088169

  •  09-09-2020
  •  | 
  •  

Domanda

Voglio usare cat filepath > /dev/null come meccanismo di memorizzazione nella cache di memoria a buon mercato. Quello che mi sto chiedendo è: se lo chiamo una seconda volta e il file è già nella cache del disco, è il sistema operativo intelligente per non fare nulla?

Aggiornamento: ho testato questo su un volume CIFS, usando Fadvise Posix_Fadv_Willneed per cache il file localmente (utilizzando Linux-ftools sulla riga di comando).Risulta Il volume deve essere montato in modalità di lettura-scrittura per funzionare.Solo in lettura Modalità, la fdisposizione sembra essere ignorata.Questo deve avere qualcosa a che fare con il samba Meccanismo Oplock.

È stato utile?

Soluzione

È meglio posizionare il posix_fadvise (..., posix_fadv_willneed) che per gatti il file in / dev / null - richiede IO meno reale e non ha bisogno del contenuto del file da leggere in Userspace RAM, distruggendo le cache della CPU.

Inoltre, se la parte rilevante del file è già nella cache, il Posix_Fadvise farà in modo proabitamente molto meno lavoro del file Cat> / dev / null

Se ritieni di aver davvero bisogno delle pagine da essere in core solo ora , quindi mmap la sezione pertinente del file e Mlock IT (sbloccarlo in seguito; potrebbe essere scartato immediatamente se la pressione della memoriaè stretto).Che ha bisogno di privilegi di root.

In generale a fare questo tipo di cosa è una pessimizzazione e dovrebbe essere evitata, comunque.Forzare il kernel a comportarsi come si desidera ridurre la sua capacità di ottimizzare il carico di lavoro effettivo proprio ora.

Altri suggerimenti

No, e non può.

Determinazione Se un programma farà nulla è solitamente più complesso che semplicemente eseguirlo.

Perché è necessario controllare comunque la memorizzazione nella cache?Se assolutamente necessario, prendere in considerazione l'utilizzo di un filesystem TMPFS o utilizzando Compcache (un dispositivo di blocco RAM compresso)

Non farà niente , come hanno detto le altre risposte.Ma se ciò che you veramente significava:

.

Se lo chiamo una seconda volta e il il file è già nella cache del disco, è il sistema operativo intelligente da non leggilo dal disco una seconda volta?

... Quindi la risposta è sì 1 .Ecco come funziona la cache del disco, dopo tutto.


.

1.Finché il filesystem in questione utilizza la cache della pagina, comunque.

It will be fast as hell, but it won't be a no-op (if it were, there would be legit reasons for syscalls to do unexpected things instead of their promised functions...). However, depending on the filesystem driver used, and the kernel options, you could be running close to the memory bandwidth.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top