Ho scritto uno script per testare diverse velocità funzioni di hashing. Per questo volevo file di dati "casuali" e non volevo utilizzare lo stesso file due volte in modo che nessuna delle funzioni avesse un vantaggio della cache del kernel rispetto all'altra. Ho scoperto che sia/dev/random che/dev/urandom erano dolorosamente lenti. Ho scelto di usare dd per copiare i dati del mio hard disk a partire da offset casuali. Non consiglierei MAI di usarlo se stai facendo qualcosa di relativo alla sicurezza, ma se tutto ciò di cui hai bisogno è rumore, non importa dove lo ottieni. Su un Mac usare qualcosa come/dev/disk0 su Linux uso/dev/sda
Ecco lo script di test completo:
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
Qui è il "meno lenti" risultati/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
Qui ci sono le "lenti" risultati/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
Ecco sono i "più lenti"/dev/risultati casuali:
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
Si noterà che/dev/random e/dev/urandom non erano molto diversi nella velocità. Tuttavia,/dev/disk0 ha impiegato 1/2 tempo.
PS.Riduco il numero di test e rimossi tutti tranne 2 comandi per motivi di "brevità" (non che io sia riuscito a essere breve).
fonte
2011-09-04 19:24:00
È stato difficile scegliere una risposta accettata poiché entrambi sono corretti e pubblicati nello stesso minuto. Ho scelto quello con più voti, vorrei poter scegliere entrambi. –