
幾天前,我將 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...)