数日前、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の場合 -t(時間)uuidの場合はシステムクロック(およびEthernet MAC)です。使用された時計が十分に細分化されていない場合、uuidgenは一意性を確保するために最小時間が経過するまでブロックできます。 (私の推測は情報です。実はありません。申し訳ありません。)
私のシステムは同じlibuuid1ライブラリv2.20-1を使用しており、連続ループを実行すると、私のシステムはそれぞれ0.002秒(2ms)と時間ベースのuuidで0.004秒以内に任意のuuid(-rモード)を生成することを示していますになります。 (4ms)、平均。システムで多くのことを行いますか(たくさん!)現在、他に何かありますか? (その時間は負荷の少ない2GHzシステムでした。)
また、2つのRaspberry Piでテストしましたが、任意のUUIDに基づいた時間または平均は約10ms(0.010秒)でした...システムは非常に忙しいようです。 (またはAtari 2600でLinuxを実行しています...)