Linux的兩種隨機數生成器

Linux下有兩個特殊設備文件/dev/random/de/urandom,用於生成隨機數。

  1. /dev/random生成的隨機數與當前使用的計算機硬件狀態相關,提高了安全性,非常適合對隨機數質量要求很高的場景。但是,如果硬件狀態改變不足以提供足夠多的信息給這個隨機數生成器,讀它產生的隨機數的程序就會block住,一直等到有足夠多的硬件狀態改變導致數據生成爲止。

  2. /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




 

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章