me escribió un script para probar diferentes velocidades de funciones hash. Para esto, quería archivos de datos "aleatorios", y no quería usar el mismo archivo dos veces para que ninguna de las funciones tuviera una ventaja de memoria caché del núcleo sobre la otra. Descubrí que/dev/random y/dev/urandom eran dolorosamente lentos. Elegí usar dd para copiar datos de mi disco duro comenzando en desplazamientos aleatorios. NUNCA recomendaría usar esto si estás haciendo algo relacionado con la seguridad, pero si todo lo que necesitas es ruido, no importa dónde lo obtengas. En un Mac usar algo como/dev/disco0 en Linux utilice/dev/sda
Aquí está el script de prueba completa:
tests=3
kilobytes=102400
commands=(md5 shasum)
count=0
test_num=0
time_file=/tmp/time.out
file_base=/tmp/rand
while [[ test_num -lt tests ]]; do
((test_num++))
for cmd in "${commands[@]}"; do
((count++))
file=$file_base$count
touch $file
# slowest
#/usr/bin/time dd if=/dev/random of=$file bs=1024 count=$kilobytes >/dev/null 2>$time_file
# slow
#/usr/bin/time dd if=/dev/urandom of=$file bs=1024 count=$kilobytes >/dev/null 2>$time_file
# less slow
/usr/bin/time sudo dd if=/dev/disk0 skip=$(($RANDOM*4096)) of=$file bs=1024 count=$kilobytes >/dev/null 2>$time_file
echo "dd took $(tail -n1 $time_file | awk '{print $1}') seconds"
echo -n "$(printf "%7s" $cmd)ing $file: "
/usr/bin/time $cmd $file >/dev/null
rm $file
done
done
Aquí está el resultado "menos lentos"/dev/Disk0:
dd took 6.49 seconds
md5ing /tmp/rand1: 0.45 real 0.29 user 0.15 sys
dd took 7.42 seconds
shasuming /tmp/rand2: 0.93 real 0.48 user 0.10 sys
dd took 6.82 seconds
md5ing /tmp/rand3: 0.45 real 0.29 user 0.15 sys
dd took 7.05 seconds
shasuming /tmp/rand4: 0.93 real 0.48 user 0.10 sys
dd took 6.53 seconds
md5ing /tmp/rand5: 0.45 real 0.29 user 0.15 sys
dd took 7.70 seconds
shasuming /tmp/rand6: 0.92 real 0.49 user 0.10 sys
Éstos son los "lentos" resultados/dev/urandom:
dd took 12.80 seconds
md5ing /tmp/rand1: 0.45 real 0.29 user 0.15 sys
dd took 13.00 seconds
shasuming /tmp/rand2: 0.58 real 0.48 user 0.09 sys
dd took 12.86 seconds
md5ing /tmp/rand3: 0.45 real 0.29 user 0.15 sys
dd took 13.18 seconds
shasuming /tmp/rand4: 0.59 real 0.48 user 0.10 sys
dd took 12.87 seconds
md5ing /tmp/rand5: 0.45 real 0.29 user 0.15 sys
dd took 13.47 seconds
shasuming /tmp/rand6: 0.58 real 0.48 user 0.09 sys
Aquí es decir son los resultados "más lentos"/dev/random:
dd took 13.07 seconds
md5ing /tmp/rand1: 0.47 real 0.29 user 0.15 sys
dd took 13.03 seconds
shasuming /tmp/rand2: 0.70 real 0.49 user 0.10 sys
dd took 13.12 seconds
md5ing /tmp/rand3: 0.47 real 0.29 user 0.15 sys
dd took 13.19 seconds
shasuming /tmp/rand4: 0.59 real 0.48 user 0.10 sys
dd took 12.96 seconds
md5ing /tmp/rand5: 0.45 real 0.29 user 0.15 sys
dd took 12.84 seconds
shasuming /tmp/rand6: 0.59 real 0.48 user 0.09 sys
Notarás que/dev/random y/dev/urandom no fueron muy diferentes en velocidad. Sin embargo,/dev/disk0 tomó la mitad del tiempo.
PS.Disminuyo el número de pruebas y eliminé todas las órdenes excepto 2 por el bien de "brevedad" (no es que haya tenido éxito en ser breve).
Fue difícil elegir una respuesta aceptada ya que ambas son correctas y publicadas durante el mismo minuto. Elegí la que tenía más votos, desearía poder elegir ambas. –