
Actualicé mi Ubuntu de 13.04 a 14.04 LTS hace unos días. Ahora estoy usando libuuid-2.20.1. De todos modos, después de la actualización, mi UUID1 se volvió muy lento.
$ 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
Transcurrieron 0,7 segundos en uuidgen -t
. ¿Qué puede hacerlo lento?
-- actualizado --
Aquí está mi w
resultado:
$ 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
Respuesta1
Probablemente extrae aleatoriedad de/dev/aleatorio, (lo hace, miré) cuálVOLUNTADbloquear hasta que se acumule suficiente entropía para proporcionar aleatoriedad. La entropía se obtiene del uso del teclado, el mouse, el USB, la actividad del disco duro, ya sabes...aleatoriocosas.
/dev/urandom no bloquea, pero no puede proporcionar el nivel de aleatoriedad proporcionado por /dev/random. Lo sé, suena extraño, evidentemente alguien requiere una aleatoriedad extremadamente aleatoria, mientras que a mí siempre me he satisfecho con una simple aleatoriedad.
usos uuidgen/dev/aleatoriopara los uuid -r (aleatorios) y el reloj del sistema (y Ethernet MAC) para los uuid -t (hora). Si el reloj utilizado no es lo suficientemente granular, uuidgen puede bloquearse hasta que haya pasado un tiempo mínimo determinado para garantizar la unicidad. (especulación fundamentada de mi parte, sin hechos, disculpas).
Estoy usando la misma biblioteca libuuid1, v2.20-1 en mi sistema, y al ejecutar un bucle continuo se muestra que mi sistema genera uuids aleatorios (modo -r) a 0,002 s (2 ms) cada uno, y uuid basados en el tiempo a 0,004 s. (4 ms) cada uno, promedio. ¿Su sistema está haciendo muchos (¡muchos!) otras cosas actualmente? (Esos tiempos en una máquina de 2 GHz con carga ligera).
También probado en mis dos Raspberry Pi, tienen un promedio de aproximadamente 10 ms (0,010 s) tanto para tiempo como para uuid aleatorios... parece que su sistema está bastante ocupado. (O estás ejecutando Linux en un Atari 2600...)