
Ich habe meine Ubuntu-Box vor ein paar Tagen von 13.04 auf 14.04 LTS aktualisiert. Jetzt verwende ich libuuid-2.20.1. Wie auch immer, nach dem Upgrade wurde meine UUID1 sehr langsam.
$ 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 Sekunden sind vergangen uuidgen -t
. Was kann es verlangsamen?
-- Aktualisiert --
Hier ist mein w
Ergebnis:
$ 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
Antwort1
Es zieht wahrscheinlich Zufälligkeit aus/dev/zufällig, (das stimmt, ich habe nachgeschaut), wasWILLEBlock, bis genügend Entropie angesammelt ist, um Zufälligkeit zu erzeugen. Entropie wird durch Tastaturbenutzung, Maus, USB, Festplattenaktivität usw. gewonnen.zufälligDinge.
/dev/urandom blockiert nicht, kann aber nicht den Grad an Zufälligkeit bieten, den /dev/random bietet. Ich weiß, das klingt komisch, offensichtlich verlangt jemand extrem zufällige Zufälligkeit, während ich immer mit schlichter zufälliger Zufälligkeit zufrieden war.
uuidgen verwendet/dev/zufälligfür die -r (zufälligen) UUIDs und die Systemuhr (und Ethernet-MAC) für die -t (Zeit) UUIDs. Wenn die verwendete Uhr nicht genau genug ist, kann uuidgen blockieren, bis eine bestimmte Mindestzeit verstrichen ist, um Eindeutigkeit sicherzustellen. (fundierte Spekulation meinerseits, keine Fakten, Entschuldigung).
Ich verwende dieselbe libuuid1-Bibliothek, v2.20-1, auf meinem System und führe eine Endlosschleife aus. Dabei zeigt sich, dass mein System zufällige UUIDs (-r-Modus) im Durchschnitt alle 0,002 s (2 ms) und zeitbasierte UUIDs im Durchschnitt alle 0,004 s (4 ms) generiert. Führt Ihr System viele (viele!) andere Dinge derzeit? (Diese Zeiten auf einer leicht ausgelasteten 2-GHz-Maschine.)
Auch auf meinen beiden Raspberry Pi's getestet, liegen sie im Durchschnitt bei etwa 10 ms (0,010 s) sowohl für zeit- als auch für zufällige UUIDs ... klingt, als wäre Ihr System ziemlich ausgelastet. (Oder Sie verwenden Linux auf einem Atari 2600 ...)