A.3. Fsync


Fsync è conosciuto come operazione I/O molto esigente, ma ciò non è assolutamente vero. Per esempio, consultate l'articolo scritto da Theodore Ts'o Don't fear the fsync! [5] insieme alla discussione relativa.
Firefox chiamava la libreria sqlite ogni qualvolta l'utente selezionava un link per andare su di una nuova pagina. Sqlite chiamava fsync e a causa delle impostazioni del file system (principalmente ext3 con modalità data-ordered), era presente un latenza lunga quando non accadeva nulla. Tale periodo poteva essere molto lungo (fino a 30 secondi) se un altro processo copiava contemporaneamente un file molto grande.
Tuttavia in altri casi dove fsync non era usato si potevano verificare alcuni problemi smistandosi sul file system ext4. Ext3 era stato impostato in modalità data-ordered, la quale ripuliva la memoria ogni pochi secondi salvandola sul disco, Con ext4 e laptop_mode, l'intervallo tra i processi di archiviazione era più lungo con una potenziale perdita dei dati se il sistema veniva improvvisamente arrestato. Ora ext4 è stato aggiornato, ma anche in questo caso sarà necessario considerare con attenzione il design delle applicazioni ed usare fsync in modo appropriato.
Il seguente esempio di lettura e scrittura in un file di configurazione mostra com'è possibile eseguire un backup di un file o perdere i dati:
/* open and read configuration file e.g. ~/.kde/myconfig */
fd = open("./kde/myconfig", O_WRONLY|O_TRUNC|O_CREAT);
read(myconfig);
...
write(fd, bufferOfNewData, sizeof(bufferOfNewData));
close(fd);
Un approccio migliore potrebbe essere:
open("/.kde/myconfig", O_WRONLY|O_TRUNC|O_CREAT);
read(myconfig);
...
fd = open("/.kde/myconfig.suffix", O_WRONLY|O_TRUNC|O_CREAT);
write(fd, bufferOfNewData, sizeof(bufferOfNewData));
fsync; /* paranoia - optional */
...
close(fd);
rename("/.kde/myconfig", "/.kde/myconfig~"); /* paranoia - optional */
rename("/.kde/myconfig.suffix", "/.kde/myconfig");
Red Hat logoGithubRedditYoutubeTwitter

Formazione

Prova, acquista e vendi

Community

Informazioni sulla documentazione di Red Hat

Aiutiamo gli utenti Red Hat a innovarsi e raggiungere i propri obiettivi con i nostri prodotti e servizi grazie a contenuti di cui possono fidarsi.

Rendiamo l’open source più inclusivo

Red Hat si impegna a sostituire il linguaggio problematico nel codice, nella documentazione e nelle proprietà web. Per maggiori dettagli, visita ilBlog di Red Hat.

Informazioni su Red Hat

Forniamo soluzioni consolidate che rendono più semplice per le aziende lavorare su piattaforme e ambienti diversi, dal datacenter centrale all'edge della rete.

© 2024 Red Hat, Inc.