On 31/10/2013 22:04, Mehdi Sebbar wrote:
Merci pour ces infos, est ce que tu peux nous donner des liens ou tu les as obtenu? (Mis a part le code ;) )
J'ai trouve ça:
http://utcc.utoronto.ca/~cks/space/blog/solaris/ZFSTXGsAndZILs
Si tu vas voir les sources citées par ton article, tu remarqueras que l'une d'entre elles est en fait un de mes propres messages sur la mailing list de ZFS On Linux, qui fait partie d'un long thread sur le sujet: http://thread.gmane.org/gmane.linux.file-systems.zfs.user/9119/focus=9299 Si tu veux plus de détails, tu devrais lire le thread en question dans lequel moi-même et d'autres personnes débattent du sujet en citant directement le code.
Je vais juste mettre en garde contre une tournure dans l'article qui me semble un peu maladroite :
"If the ZIL is active for a dataset the dataset no longer has strong write ordering properties for data that is not explicitly flushed to disk via fsync() or the like."
Ce paragraphe laisse penser que si on désactive le ZIL alors on obtient subitement des garanties d'ordonnancement même si on n'utilise pas fsync(), ce qui est techniquement faux, principalement parce que rien n'empêche une couche au-dessus de ZFS (au hasard, le sous-système I/O du kernel) de réordonner les écritures lui-mêmes. Même avec le ZIL désactivé il y a toujours un intérêt à utiliser fsync() pour s'assurer que les écritures sont faites dans l'ordre (ce qui est indispensable pour éviter la corruption).
Il y a également une affirmation un peu déroutante : "A filesystem with 'sync=disabled' actually has stronger write ordering guarantees than a filesystem with the ZIL enabled" ce qui théoriquement parlant est vrai, mais pas en pratique puisqu'il faut que fsync() soit correctement utilisé de toute façon. L'article fait un peu du pinaillage à outrance en faisant une fixation sur un comportement un peu exotique de l’ordonnancement des écritures dans le ZIL lorsque ce dernier est activé, alors que cela ne fait aucune différence pratique au niveau des garanties offertes par fsync() (qui est la seule chose qui importe).
J'ai également repéré une erreur :
"A setting of 'disabled' disables ZIL commits but not the in-memory ZIL, which will continue to accumulate records between TXG commits and then drop the records when a TXG commits."
Cette affirmation est tout simplement fausse ; si sync=disabled alors rien n'est gardé en mémoire (et heureusement, sinon ce serait du gaspillage de RAM). Preuve : https://github.com/zfsonlinux/zfs/blob/master/module/zfs/zfs_log.c#L462 https://github.com/zfsonlinux/zfs/blob/master/module/zfs/zil.c#L2195