La generación de UUID1 es demasiado lenta

La generación de UUID1 es demasiado lenta

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

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

información relacionada