首頁 > 軟體

Linux的兩種亂數生成器

2020-06-16 17:17:48

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

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-04/142644.htm


IT145.com E-mail:sddin#qq.com