Die Generierung von UUID1 ist zu langsam

Die Generierung von UUID1 ist zu langsam

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 wErgebnis:

$ 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 ...)

verwandte Informationen