Linux下有兩個特殊設備文件/dev/random和/de/urandom,用於生成隨機數。
/dev/random生成的隨機數與當前使用的計算機硬件狀態相關,提高了安全性,非常適合對隨機數質量要求很高的場景。但是,如果硬件狀態改變不足以提供足夠多的信息給這個隨機數生成器,讀它產生的隨機數的程序就會block住,一直等到有足夠多的硬件狀態改變導致數據生成爲止。
/dev/urandom又稱爲“無限”或者“非堵塞”("unlimited"[5]/non-blockingrandom source[4])隨機數生成器,它生成隨機數的機制與硬件狀態無關,所以速度比/dev/random快的多。在我的筆記本虛機上測試的結果是生成160M大小的隨機數需要大約25秒
用隨機數生成器生成內容全是隨機數的文件:
dd if=/dev/urandom of=/test/random bs=1024k count=10
由於隨機數生成器速度有限,如果要用它生成隨機數去測試磁盤寫性能,可以先生成一箇中間文件存放隨機數,然後再去寫入磁盤測試性能。
與/dev/zero相比,/dev/urandom生成數據的速度要慢很多,在我的筆記本虛機上測試的結果是慢~20倍,結果如下:
[lb@centos-i1~]$ time dd if=/dev/zero of=/dev/nullbs=160M count=1
1+0 records in
1+0 records out
167772160 bytes(168 MB) copied, 1.28577 s, 130 MB/s
real 0m1.289s
user 0m0.000s
sys 0m1.278s
[lb@centos-i1~]$ time dd if=/dev/urandom of=/dev/nullbs=160M count=1
1+0 records in
1+0 records out
167772160 bytes(168 MB) copied, 23.488 s, 7.1 MB/s
real 0m23.491s
user 0m0.000s
sys 0m22.569s
在我的筆記本虛機上測試隨機數生成器速度測試結果如下(供參考):
框中用幾種不同的方法生成填滿160M文件大小的隨機數,耗時都24秒左右。
[lb@centos-i1~]$ time dd if=/dev/urandom of=/dev/nullbs=16M count=10
10+0 records in
10+0 records out
167772160 bytes(168 MB) copied, 24.4058 s, 6.9 MB/s
real 0m24.409s
user 0m0.000s
sys 0m24.177s
[lb@centos-i1~]$ time dd if=/dev/urandom of=/dev/nullbs=16k count=10000
10000+0 records in
10000+0 records out
163840000 bytes(164 MB) copied, 24.9815 s, 6.6 MB/s
real 0m24.982s
user 0m0.036s
sys 0m24.685s
[lb@centos-i1~]$ time dd if=/dev/urandom of=/dev/nullbs=160M count=1
1+0 records in
1+0 records out
167772160 bytes (168MB) copied, 25.9681 s, 6.5 MB/s
real 0m25.971s
user 0m0.000s
sys 0m25.694s