2015-10-30 2 views
3

La page de manuel pour open (2) suggère seulement que O_DIRECT contourne le cache de page, mais de nombreuses descriptions sur le réseau le décrivent comme provoquant le DMA'd tampon d'utilisateur directement sur le lecteur. Si tel est le cas j'imagine que cela contournerait également la journalisation effectuée par le système de fichiers (par exemple xfs, ext4, etc.). Est-ce le cas?O_DIRECT contourne-t-il la journalisation du système de fichiers?

Je ne trouve personne qui réclame d'une façon ou d'une autre. Il me semble que cela serait cohérent avec l'utilisation de O_DIRECT par les bases de données - l'exemple courant pour O_DIRECT est lorsqu'une application comme une base de données effectue sa propre mise en cache dans l'espace utilisateur, et je peux imaginer des bases de données.

Répondre

2

Est-ce que O_DIRECT contourne la journalisation du système de fichiers?

Habituellement, c'est le cas. Cependant, les données de fichier ne sont généralement pas incluses dans le journal d'un système de fichiers. Plus de détails ci-dessous (mais notez que cette réponse n'essaie pas de rendre compte des systèmes de fichiers CoW):

La plupart des systèmes de fichiers de journalisation Linux (Ext4 lorsque le journal est en écriture différée ou en ordre (par défaut), XFS, JFS, etc.) ne sont pas journalisés les données dans les fichiers - elles consignent la cohérence des structures de données du système de fichiers (métadonnées).

revues Filesystem de métadonnées uniquement (cas typique): données bien dans les fichiers ne vont pas dans le journal de toute façon à l'aide O_DIRECT ne change pas et les données continuent de ne pas aller dans le journal. Toutefois, les opérations O_DIRECT peuvent toujours déclencher des mises à jour de métadonnées, comme d'habitude, mais l'opération d'initialisation peut retourner avant la mise à jour des métadonnées. Voir le Ext4 wiki Clarifying Direct IO's Semantics page pour plus de détails.

Ext4 dans le journal = mode de données: C'est plus délicat - il y a un avertissement que le résultat souhaité avec O_DIRECT en mode journal=data pourrait ne pas être ce qu'on attend. De l'"data=journal" section of ext4.txt:

Activation ce mode [journal = données] désactive l'allocation retardée et O_DIRECT soutien.

Dans ce scénario O_DIRECT est regardé comme seulement un soupçon et le système de fichiers tombe silencieusement à bourrer les données dans le cache de pages (! Rendant plus direct). Donc, dans ce cas, oui, les données finiront dans le journal et le journal ne sera pas ignoré. Voir le fil "Re: [PATCH 1/1 linux-next] ext4: add compatibility flag check" pour où Ted Ts'o articule cela. Il y a des patches qui flottent autour ("ext4: refuse O_DIRECT opens for mode where DIO doesn't work") pour que le système de fichiers retourne une erreur à l'ouverture mais à partir de ce que je peux voir, ils ont été rejetés du noyau de la ligne principale.