使用 if=/dev/zero

使用 if=/dev/zero

我有一个阿利克斯板我已经安装了debian4alix(挤压)。使用一段时间后,我发现该板的写入性能相当低。

我进行了以下测试:

dd count=100 bs=1M if=/dev/urandom of=/var/www/cgrid/test

这产生了以下结果:

100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 328.903 s, 319 kB/s

这与我在安装了操作系统的紧凑型闪存卡或闪存盘上运行测试时获得的速度相同。我在 Linux 台式电脑上测试了闪存盘的性能,并使用相同的测试获得了大约 15.3 MB/s 的速度。

我在 alix 板上的读取速度约为 9MB/s(使用 测试hdparm -t

我想知道我收到的写入速度慢是否是操作系统的结果(因为它不是直接在紧凑型闪存卡上运行,而是在虚拟磁盘上运行),还是嵌入式硬件解决方案非常慢。

答案1

我非常确定就硬件而言,该主板比台式机慢。但 urandom 使情况变得更糟。

该主板使用的是 500MHz CPU,而不是 2-3GHz 台式机 CPU。这样if=/dev/urandom,您的测试更多地是关于系统处理的速度urandom。您正在比较 CPU 性能,而不是 I/O。

另外,如果主板只有256M RAM,操作系统可能会在创建100M RAM磁盘文件时开始交换。如果发生这种情况,将对测试结果产生很大影响。也许用 50M 文件进行测试。

使用 if=/dev/zero

不要使用if=/dev/urandom.这项测试的成本非常高。而是使用if=/dev/zero.

测试 1 - 将 100M 写入磁盘

以下是我在虚拟机上的测试结果,同样写入100M。

如果=/dev/零

john@U64D211:~$ time dd count=100 bs=1M if=/dev/zero of=test
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.493612 s, 212 MB/s

real    0m0.540s
user    0m0.020s
sys 0m0.516s

if=/dev/urandom

john@U64D211:~$ rm test
john@U64D211:~$ time dd count=100 bs=1M if=/dev/urandom of=test
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 10.8723 s, 9.6 MB/s

real    0m10.909s
user    0m0.004s
sys 0m10.893s
john@U64D211:~$ 

测试 2 - 将 100M 写入 /dev/null

为了显示 urandom 的成本有多大,让我们写入 /dev/null,这样就不会写入磁盘。

如果=/dev/零

john@U64D211:~$ time dd count=100 bs=1M if=/dev/zero of=/dev/null
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.0240906 s, 4.4 GB/s

real    0m0.061s
user    0m0.012s
sys 0m0.052s

if=/dev/urandom

john@U64D211:~$ time dd count=100 bs=1M if=/dev/urandom of=/dev/null
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 10.4979 s, 10.0 MB/s

real    0m10.555s
user    0m0.024s
sys 0m10.513s

所以写入时/dev/null,几乎99%的时间都花在了urandom系统调用上。

PS1: VM 有 4G 内存。

PS2:文件缓存确实/可能在一定程度上影响测试结果,但选项之间的差异if如此巨大,因此可以安全地忽略缓存因素。无论如何,效果应该适用于这两种情况。

PS3:我没有平均测试结果。但我确实运行了多次,结果非常相似。

相关内容