几天前,我将 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...)