linux: précision de la date tactile

Sur mon système Linux si j'affiche la date actuelle "t1", touchez un file "f" puis affichez l'heure de modification "t2" de ce "f" je m'attendrais à t1 <t2.

Mais ce n'est pas ce que j'ai toujours quand j'exécute ceci sur mon système:

date +'%Y-%m-%d %H:%M:%S.%N'; \ touch f; \ stat -c %yf 

Exemple de sortie:

 2017-09-18 21:47:48.855229801 2017-09-18 21:47:48.853831698 +0200 

Notez que le deuxième horodatage (stat) est avant le premier (date): 855229801> 853831698

Mon fs est ext4, mais j'ai aussi essayé avec un file sur tmpfs, même effet. Pourquoi est-ce le cas?

Merci


Quelques informations sur la configuration

 % which date /usr/bin/date % which touch /usr/bin/touch % pacman -Qo /usr/bin/date /usr/bin/touch /usr/bin/date is owned by coreutils 8.28-1 /usr/bin/touch is owned by coreutils 8.28-1 % uname -a Linux machine 4.12.12-1-ARCH #1 SMP PREEMPT Sun Sep 10 09:41:14 CEST 2017 x86_64 GNU/Linux % findmnt TARGET SOURCE FSTYPE OPTIONS / /dev/sda1 ext4 rw,relatime,data=ordered └─/tmp tmpfs tmpfs rw,nosuid,nodev 

Par https://stackoverflow.com/questions/14392975/timestamp-accuracy-on-ext4-sub-millsecond :

Le code du système de files ext4 appelle current_fs_time() qui est l'heure actuelle du kernel mis en cache tronquée à la granularité temporelle spécifiée dans le superbloc du système de files qui pour ext4 est 1ns.

L'heure actuelle dans le kernel Linux est caching et généralement mise à jour uniquement lors d'une interruption de la temporisation. Donc, si votre interruption de temporisation est en cours d'exécution à 10 millisecondes, le time mis en cache ne sera mis à jour qu'une fois toutes les 10 millisecondes. Lorsqu'une mise à jour se produit, la précision du time résultant dépendra de la source d'horloge disponible sur votre matériel.