GNU/Linux >> Linux Esercitazione >  >> Linux

Linux – Uso di O_direct su Linux?

Se questa domanda è troppo orientata al programmatore, fammi sapere. Mi chiedo se ci sono persone che hanno familiarità con il flag O_DIRECT per la chiamata di sistema open() su Linux 2.6? Linus denigra il suo utilizzo, tuttavia la scrittura di file ad alte prestazioni sembra indicarne l'uso. Vorrei conoscere eventuali esperienze e consigli nel mondo reale.

Ulteriori informazioni:
L'applicazione che sto utilizzando lo fa mantiene la propria cache e, così facendo, raggiunge una velocità media di 5 volte o più. Quando si scrive su file, il contenuto della cache deve essere scritto nella cache del filesystem, il che sembra ridondante e rappresenta un problema di prestazioni.

Risposta accettata:

Ok, chiedi esperienze, questo rende la domanda un po' soggettiva e argomentativa, ma passabile.

Linus ha detto che riferendosi agli usi che le persone di solito attribuiscono a O_DIRECT, e per quegli usi, IMO Linus è per lo più corretto. Anche se si esegue l'I/O diretto, non è possibile trasferire i dati da/verso i dispositivi direttamente alle istruzioni del programma, è necessario un buffer che venga riempito (dal programma o dal dispositivo) e trasferito tramite una chiamata di sistema all'altra estremità. Inoltre, per renderlo efficiente, non vorrai rileggere qualcosa che hai già letto, nel caso ne avessi bisogno di nuovo. Quindi hai bisogno di una sorta di cache... ed è esattamente quella che fornisce il kernel senza O_DIRECT, una cache di pagina! Perché non usarlo? Inoltre offre vantaggi se più processi desiderano accedere allo stesso file contemporaneamente, sarebbe un disastro con O_DIRECT.

Detto questo, O_DIRECT ha i suoi usi:se per qualche motivo è necessario ottenere dati direttamente dal dispositivo a blocchi. Non ha nulla a che fare con le prestazioni.

Le persone che usano O_DIRECT per le prestazioni di solito provengono da sistemi con algoritmi di cache di pagina difettosi, o senza meccanismi di consulenza POSIX, o anche da persone che ripetono senza pensare ciò che altre persone hanno detto. Per evitare questi problemi, O_DIRECT è stata una soluzione. Linux, OTOH, ha la filosofia che dovresti risolvere il vero problema di fondo e il problema di fondo erano i sistemi operativi che hanno fatto un pessimo lavoro con la memorizzazione nella cache delle pagine.

Ho usato O_DIRECT per una semplice implementazione di cat per trovare un errore di memoria nella mia macchina. Questo è un uso valido per O_DIRECT. Non aveva nulla a che fare con le prestazioni.

Correlati:OpenVPN – Collegamento socket non riuscito sull'indirizzo locale [AF_INET] IP:1194:Impossibile assegnare l'indirizzo richiesto?
Linux
  1. Come usare BusyBox su Linux

  2. 5 motivi per usare Linux nel 2020

  3. Come uso cron in Linux

  4. Come usare TROVA in Linux

  5. Come usare Unzip in Linux

Come usare il comando Disown in Linux

Come utilizzare il comando SS di Linux

Come usare il comando nohup di Linux

Come usare traceroute su Kali Linux

Come utilizzare lo schermo Linux

Come usare du Command in Linux