GNU/Linux >> Tutoriels Linux >  >> Linux

O_DIRECT contre O_SYNC sous Linux/FreeBSD

Avec les disques durs actuels, il n'y a pas l'assurance qu'un fichier est réellement écrit sur le disque même si le disque signale l'écriture comme terminée au système d'exploitation ! Cela est dû au cache intégré dans le lecteur.

Sur freeBSD, vous pouvez désactiver cela en définissant le kern.cam.ada.write_cache sysctl à 0. Cela va dégrader les performances d'écriture de manière significative . La dernière fois que je l'ai mesuré (disque dur WDC WD5001ABYS-01YNA0 sur un chipset ICH-7, FreeBSD 8.1 AMD64), performances en écriture continue (mesurées avec dd if=/dev/zero of=/tmp/foo bs=10M count=1000 ) est passé de 75 000 000 octets/s à 12 900 000 octets/s.

Si vous voulez être absolument sûr que vos fichiers sont écrits ;

  • Désactiver la mise en cache en écriture avec sysctl kern.cam.ada.write_cache=0 suivi de camcontrol reset <bus>:<target>:<lun> .
  • Ouvrir le fichier avec le O_SYNC option.

Remarque :

  • Vos performances d'écriture (sur un disque dur) vont maintenant être absolument nulles.
  • Ne montez pas la partition avec le sync option; qui causera tous Les E/S (y compris les lectures) doivent être effectuées de manière synchrone.
  • Ne pas utiliser O_DIRECT . Il essaiera de contourner complètement le cache. Cela influencera probablement aussi les lectures.

O_DIRECT existe essentiellement uniquement pour qu'Oracle contourne la couche de cache tampon du noyau et fasse sa propre mise en cache. Il a une sémantique mal définie, des limitations arbitraires sur la taille et l'alignement des lectures que vous pouvez effectuer, et ne doit généralement pas être utilisé. O_SYNC est censé vous donner les effets que vous souhaitez, mais sans un système de fichiers sous-jacent résistant aux pannes de courant ou aux plantages, il pourrait ne pas suffire à vos besoins.


Linux
  1. Linux – Utilisation de O_direct sur Linux ?

  2. Comment utiliser les commandes Grep sous Linux ou FreeBSD

  3. Vérifier la connexion ouverte ou fermée ? (en C sous Linux)

  4. presse-papiers linux lire/écrire en C

  5. Quel est l'équivalent de la commande 'free' de Linux sur FreeBSD v8.1

Écrire un jeu de devinettes dans ncurses sous Linux

Comment effacer ou vider le cache DNS sous Linux

Comment vider le cache DNS sous Linux

Comment vider le cache DNS sous Linux ?

Comment écrire et exécuter un programme C sous Linux

commande d'écriture sous Linux avec des exemples