Tôi đã viết một kịch bản để kiểm tra chức năng băm khác nhau tốc độ. Đối với điều này tôi muốn các tập tin của dữ liệu "ngẫu nhiên", và tôi không muốn sử dụng cùng một tập tin hai lần để không ai trong số các chức năng có một lợi thế bộ nhớ cache hạt nhân hơn khác. Tôi thấy rằng cả hai/dev/random và/dev/urandom đều rất chậm. Tôi đã chọn để sử dụng dd để sao chép dữ liệu của đĩa cứng của tôi bắt đầu từ offsets ngẫu nhiên. Tôi sẽ KHÔNG BAO GIỜ đề nghị sử dụng này nếu bạn đang làm bất cứ điều gì liên quan đến an ninh, nhưng nếu tất cả bạn cần là tiếng ồn nó không quan trọng, nơi bạn nhận được nó. Trên máy Mac sử dụng một cái gì đó giống như/dev/disk0 trên Linux sử dụng/dev/sda
Đây là kịch bản thử nghiệm hoàn chỉnh:
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
Dưới đây là "ít chậm" Kết quả/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
Sau đây là các "chậm" Kết quả/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
Dưới đây là là những "chậm nhất"/dev/kết quả ngẫu nhiên:
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
Bạn sẽ nhận thấy/dev/random và/dev/urandom không có nhiều tốc độ khác nhau. Tuy nhiên,/dev/disk0 mất 1/2 thời gian.
PS.Tôi làm giảm số lượng các bài kiểm tra và loại bỏ tất cả, nhưng 2 lệnh vì lợi ích của "ngắn gọn" (không phải là tôi đã thành công trong ngắn gọn).
Nguồn
2011-09-04 19:24:00
Rất khó chọn câu trả lời được chấp nhận vì cả hai đều đúng và được đăng trong cùng một phút. Tôi chọn người có nhiều phiếu nhất, tôi ước tôi có thể chọn cả hai. –