5 ポイント 投稿者 GN⁺ 2023-07-23 | 1件のコメント | WhatsAppで共有
  • 現代のシステムではナノ秒タイムスタンプの衝突は珍しくなく、4つの物理コアで同時にクロックを読むと、約5%のサンプルで発生します。
  • 生のナノ秒タイムスタンプが一意な識別子であると仮定するのは安全ではありません。
  • Goで書かれたテストプログラムを使って、連続するタイムスタンプと絶対タイムスタンプの相対的な差を比較しました。
  • タイムスタンプ衝突の挙動はシステムによって異なり、Mac OS XとLinuxで異なる結果が観察されました。
  • Linuxでは、単一スレッド内で絶対時間と単調時間は常に増加し、最小増分は32 nsです。スレッド間では約5%の絶対時間が他のスレッドと同一であり、4コアシステムで2つのスレッドで実行した場合でも約2%のタイムスタンプ衝突が発生します。
  • Mac OS Xでは、絶対時間がマイクロ秒解像度を持つため、同じテストを繰り返すと多くの衝突が発生します。さらに、スレッド内であっても単調クロックが増加しないことがあります。
  • 追加の調査のためのテストプログラムはGithubで見つけられます。

1件のコメント

 
GN⁺ 2023-07-23
Hacker Newsの意見
  • 時刻要素と連番を組み合わせたIDを使えば、衝突を防げます。
  • UUIDv7は、時刻要素と連番を組み合わせたIDの例です。
  • スレッドスケジューリングは、マルチコアシステムでタイムスタンプの正確性に影響を与える可能性があります。
  • バージョン4(ランダム)UUIDは、一意識別子を保証するために使えます。
  • 衝突問題を、時刻確認とグローバル変数のアトミックなテスト・アンド・セットで解決する人もいます。
  • Erlang/Elixirは、単調時間と厳密単調時間を区別します。
  • コンピュータの時計は、ナノ秒精度を持たない場合があります。
  • Lotus Notesが、一意IDとして1秒解像度のタイムスタンプを使っていたという逸話があります。
  • CPUクロックサイクルとコンパイラ最適化は、タイムスタンプの精度に影響を与える可能性があります。
  • 正確な時刻はセキュリティ上の問題になり得るため、CPU設計者は意図的にクロックジッタを導入します。