生成UUID1太慢

生成UUID1太慢

几天前,我将 Ubuntu 盒子从 13.04 升级到 14.04 LTS。现在我使用的是libuuid-2.20.1。不管怎样,升级后,我的UUID1变得非常慢。

$ time uuidgen -t
f22c36aa-f511-11e3-9437-080027e59ea0
uuidgen -t  0.71s user 0.67s system 99% cpu 1.387 total

$ time uuidgen -t
fea4537c-f511-11e3-a6d5-080027e59ea0
uuidgen -t  0.72s user 0.67s system 99% cpu 1.394 total

0.7秒过去了uuidgen -t。什么可以使它变慢?

- 更新 -

这是我的w结果:

$ w
 09:48:55 up 5 days, 22:56,  3 users,  load average: 0.37, 0.43, 0.43
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
sub      :0       :0               Wed10   ?xdm?   2days 22.69s init --user --state-fd 41 --re
sub      pts/26   sub.local        Wed18   16:47  17.00s 10.07s vim -b -b test/test_item.py
sub      pts/27   sub.local        Wed18    7.00s  8.63s  0.02s w

答案1

它可能会带来随机性/dev/随机,(确实如此,我看了)将要阻塞直到积累足够的熵以提供随机性。熵是从键盘使用、鼠标、USB、硬盘活动中获得的,你知道......随机的事物。

/dev/urandom 不会阻塞,但无法提供 /dev/random 提供的随机性级别。我知道,听起来很奇怪,显然有人需要极其随机的随机性,而我一直对简单的随机性感到满意。

uuidgen 使用/dev/随机对于-r(随机)uuid,以及系统时钟(和以太网MAC)对于-t(时间)uuid。如果使用的时钟不够精细,uuidgen 可能会阻塞,直到经过某个最小时间以确保唯一性。 (我的猜测是有根据的,没有事实,抱歉)。

我在我的系统上使用相同的 libuuid1 库 v2.20-1,并且运行连续循环显示我的系统以 0.002 秒(2 毫秒)的速度生成随机 uuid(-r 模式),并以 0.004 秒的速度生成基于时间的 uuid每个(4 毫秒),平均值。您的系统是否做了很多(许多!)目前还有其他事情吗? (那些时间是在轻负载的 2GHz 机器上。)

还在我的两个 Raspberry Pi 上进行了测试,它们的时间或基于随机的 uuid 的平均时间约为 10 毫秒(0.010 秒)...听起来您的系统非常繁忙。 (或者您在 Atari 2600 上运行 Linux...)

相关内容