Зіткнення наносекундних позначок часу є поширеними

Зіткнення міток часу на наносекундах є поширеними (evanjones.ca)

Наносекундні мітки часу є поширеними

про | архів

[ 2023-липень-20 17:39 ]

Мені було цікаво: як часто наносекундні мітки часу збігаються в сучасних системах? Відповідь така: дуже часто, як 5% усіх зразків, при зчитуванні годинника на всіх 4 фізичних ядрах одночасно. Тому я вважаю, що небезпечно припускати, що необроблена наносекундна позначка часу є унікальним ідентифікатором.

Я написав невелику тестову програму, щоб перевірити це. Я використовував Go, який записує як «абсолютний» час, так і відносний час «монотонного годинника» з кожним викликом time.Now(), тому я порівняв як відносну різницю між послідовними часовими мітками, так і абсолютні часові позначки. Як і очікувалося, поведінка залежить від системи, тому я бачу дуже різні результати в Mac OS X і Linux. У Linux в межах одного потоку абсолютний і монотонний час завжди збільшується. У моїй системі мінімальний приріст становив 32 нс. Між потоками приблизно 5% абсолютного часу були точно такими ж, як і в інших потоках. Навіть з 2 потоками в 4-ядерній системі близько 2% часових позначок зіткнулися. У Mac OS X: абсолютний час має мікросекундну роздільну здатність, тому є астрономічне число колізій, коли я повторюю цей самий тест. Навіть у межах потоку я часто спостерігаю, що монотонний годинник не збільшується.

Якщо вам цікаво, перегляньте програму тестування на Github.

Зіткнення міток часу на наносекундах є поширеними (evanjones.ca)

Наносекундні мітки часу є поширеними

про | архів

[ 2023-липень-20 17:39 ]

Мені було цікаво: як часто наносекундні мітки часу збігаються в сучасних системах? Відповідь така: дуже часто, як 5% усіх зразків, при зчитуванні годинника на всіх 4 фізичних ядрах одночасно. Тому я вважаю, що небезпечно припускати, що необроблена наносекундна позначка часу є унікальним ідентифікатором.

Я написав невелику тестову програму, щоб перевірити це. Я використовував Go, який записує як «абсолютний» час, так і відносний час «монотонного годинника» з кожним викликом time.Now(), тому я порівняв як відносну різницю між послідовними часовими мітками, так і абсолютні часові позначки. Як і очікувалося, поведінка залежить від системи, тому я бачу дуже різні результати в Mac OS X і Linux. У Linux в межах одного потоку абсолютний і монотонний час завжди збільшується. У моїй системі мінімальний приріст становив 32 нс. Між потоками приблизно 5% абсолютного часу були точно такими ж, як і в інших потоках. Навіть з 2 потоками в 4-ядерній системі близько 2% часових позначок зіткнулися. У Mac OS X: абсолютний час має мікросекундну роздільну здатність, тому є астрономічне число колізій, коли я повторюю цей самий тест. Навіть у межах потоку я часто спостерігаю, що монотонний годинник не збільшується.

Якщо вам цікаво, перегляньте програму тестування на Github.

What's Your Reaction?

like

dislike

love

funny

angry

sad

wow