GNU/Linux >> Tutoriels Linux >  >> Linux

Linux – Utilisation de O_direct sur Linux ?

Si cette question est trop orientée programmeur, faites le moi savoir. Je me demande s'il y a des gens qui connaissent le drapeau O_DIRECT pour l'appel système open() sous Linux 2.6 ? Linus dénigre son utilisation, mais l'écriture de fichiers haute performance semble indiquer son utilisation. J'aimerais connaître des expériences et des recommandations dans le monde réel.

Plus d'informations :
L'application que j'utilise fait maintenir son propre cache et, ce faisant, atteindre une vitesse moyenne de 5x ou plus. Lors de l'écriture dans un fichier, le contenu du cache doit être écrit dans le cache du système de fichiers, ce qui semble redondant et pose un problème de performances.

Réponse acceptée :

Ok, vous demandez des expériences, cela rend la question un peu subjective et argumentative, mais passable.

Linus a déclaré qu'en se référant aux utilisations que les gens attribuent généralement à O_DIRECT, et pour ces utilisations, IMO Linus est généralement correct. Même si vous effectuez des E/S directes, vous ne pouvez pas transférer de données vers/depuis des périphériques directement vers vos instructions de programme, vous avez besoin d'un tampon qui est rempli (par le programme ou le périphérique) et transféré via un appel système à l'autre extrémité. De plus, pour le rendre efficace, vous ne voudrez pas relire quelque chose que vous venez de lire, au cas où vous en auriez besoin à nouveau. Il faut donc une sorte de cache… et c'est exactement ce que le noyau fournit sans O_DIRECT, un cache de pages ! Pourquoi ne pas l'utiliser ? Cela présente également des avantages si plusieurs processus veulent accéder au même fichier simultanément, ce serait un désastre avec O_DIRECT.

Cela dit, O_DIRECT a ses utilisations :si pour une raison quelconque vous avez besoin d'obtenir des données directement à partir du périphérique de bloc. Cela n'a rien à voir avec les performances.

Les personnes utilisant O_DIRECT pour les performances proviennent généralement de systèmes avec de mauvais algorithmes de cache de page, ou sans mécanismes de conseil POSIX, ou même des personnes répétant sans réfléchir ce que d'autres personnes ont dit. Pour éviter ces problèmes, O_DIRECT était une solution. Linux, OTOH, a pour philosophie de résoudre le vrai problème sous-jacent, et le problème sous-jacent était les systèmes d'exploitation qui faisaient un mauvais travail avec la mise en cache des pages.

J'ai utilisé O_DIRECT pour une implémentation simple de cat pour trouver une erreur de mémoire dans ma machine. C'est une utilisation valide pour O_DIRECT. Cela n'avait rien à voir avec les performances.

Connexe :OpenVPN - Échec de la liaison de socket sur l'adresse locale [AF_INET] IP :1194 :Impossible d'attribuer l'adresse demandée ?
Linux
  1. Comment utiliser BusyBox sous Linux

  2. 5 raisons d'utiliser Linux en 2020

  3. Comment j'utilise cron sous Linux

  4. O_DIRECT contre O_SYNC sous Linux/FreeBSD

  5. Utiliser une bibliothèque C dans Swift sous Linux

Comment utiliser la commande Disown sous Linux

Comment utiliser la commande Linux SS

Comment utiliser la commande Linux nohup

Comment utiliser traceroute sur Kali Linux

Comment utiliser l'écran Linux

Comment utiliser du Command sous Linux