GNU/Linux >> Linux Esercitazione >  >> Linux

O_DIRECT contro O_SYNC su Linux/FreeBSD

Con gli hard disk attuali, no garanzia che un file sia effettivamente scritto su disco anche se il disco riporta la scrittura come completa al sistema operativo! Ciò è dovuto alla cache integrata nell'unità.

Su freeBSD puoi disabilitarlo impostando kern.cam.ada.write_cache sysctl a 0. Questo degraderà scrivere le prestazioni in modo significativo . L'ultima volta che l'ho misurato (disco rigido WDC WD5001ABYS-01YNA0 su un chipset ICH-7, FreeBSD 8.1 AMD64), prestazioni di scrittura continua (misurate con dd if=/dev/zero of=/tmp/foo bs=10M count=1000 ) è sceso da 75.000.000 byte/sec a 12.900.000 byte/sec.

Se vuoi essere assolutamente sicuro che i tuoi file siano scritti;

  • Disabilita la cache in scrittura con sysctl kern.cam.ada.write_cache=0 seguito da camcontrol reset <bus>:<target>:<lun> .
  • Apri il file con O_SYNC opzione.

Nota:

  • Le tue prestazioni di scrittura (su un HDD) ora faranno assolutamente schifo.
  • Non montare la partizione con sync opzione; questo causerà tutto I/O (incluse le letture) da eseguire in modo sincrono.
  • Non utilizzare O_DIRECT . Proverà a bypassare del tutto la cache. Questo probabilmente influenzerà anche le letture.

O_DIRECT fondamentalmente esiste solo per Oracle per bypassare il livello della cache del buffer del kernel e fare il proprio caching. Ha una semantica mal definita, limitazioni arbitrarie sulla dimensione e l'allineamento delle letture che è possibile eseguire e generalmente non dovrebbe essere utilizzato. O_SYNC dovrebbe darti gli effetti che desideri, ma senza un filesystem sottostante che sia robusto contro interruzioni di corrente o arresti anomali, potrebbe comunque non essere sufficiente per le tue esigenze.


Linux
  1. Come scrivere testo sull'immagine usando il comando Linux

  2. Linux – Uso di O_direct su Linux?

  3. Come usare i comandi Grep su Linux o FreeBSD

  4. Controlla la connessione aperta o chiusa? (in C in Linux)

  5. appunti di linux leggi/scrivi in ​​C

Scrivi un gioco di indovinelli in ncurses su Linux

Come cancellare o svuotare la cache DNS in Linux

Come svuotare la cache DNS su Linux

Come svuotare la cache DNS su Linux?

Come scrivere ed eseguire un programma C in Linux

scrivi comando in Linux con esempi