5 points par GN⁺ 2023-07-23 | 1 commentaires | Partager sur WhatsApp
  • Sur les systèmes modernes, les collisions de timestamps à la nanoseconde sont fréquentes et apparaissent dans environ 5 % des échantillons lorsque l’on lit l’horloge simultanément sur 4 cœurs physiques.
  • Il n’est pas prudent de supposer qu’un timestamp brut à la nanoseconde constitue un identifiant unique.
  • À l’aide d’un programme de test écrit en Go, l’auteur a comparé les différences relatives entre des timestamps consécutifs et des timestamps absolus.
  • Le comportement des collisions de timestamps varie selon les systèmes, et des résultats différents ont été observés sur Mac OS X et Linux.
  • Sous Linux, au sein d’un seul thread, le temps absolu et le temps monotone augmentent toujours, avec un incrément minimal de 32 ns. Entre les threads, environ 5 % des temps absolus sont identiques à ceux d’un autre thread, et même avec 2 threads sur un système à 4 cœurs, on observe encore environ 2 % de collisions de timestamps.
  • Sur Mac OS X, le temps absolu a une résolution à la microseconde, ce qui provoque de nombreuses collisions lors de la répétition du même test. Même à l’intérieur d’un thread, l’horloge monotone peut parfois ne pas augmenter.
  • Le programme de test est disponible sur Github pour poursuivre l’exploration.

1 commentaires

 
GN⁺ 2023-07-23
Avis sur Hacker News
  • L’utilisation d’identifiants combinant une composante temporelle et un numéro de séquence permet d’éviter les collisions.
  • UUIDv7 est un exemple d’identifiant combinant une composante temporelle et un numéro de séquence.
  • L’ordonnancement des threads peut affecter la précision des horodatages sur les systèmes multicœurs.
  • Les UUID version 4 (aléatoires) peuvent être utilisés pour garantir des identifiants uniques.
  • Certaines personnes résolvent le problème des collisions avec une vérification du temps et un test-and-set atomique sur une variable globale.
  • Erlang/Elixir distingue le temps monotone du temps strictement monotone.
  • Les horloges informatiques n’ont pas forcément une précision à la nanoseconde.
  • Une légende veut que Lotus Notes utilise des horodatages à résolution d’une seconde comme identifiants uniques.
  • Les cycles d’horloge CPU et les optimisations du compilateur peuvent affecter la précision des horodatages.
  • L’heure précise peut poser un problème de sécurité, donc les concepteurs de CPU introduisent délibérément du jitter d’horloge.