我已经看到使用以下命令对一个人的 HDD 进行基准测试dd:
$ time sh -c "dd if=/dev/zero of=ddfile bs=8k count=250000 && sync"
Run Code Online (Sandbox Code Playgroud)
还有比这更好的方法吗?
我想对 ssd(可能使用加密文件系统)进行基准测试,并将其与由 Crystaldiskmark 在 Windows 上完成的基准测试进行比较。

那么我怎样才能测量出与 Crystaldiskmark 大致相同的东西呢?
对于第一行(Seq),我想我可以做类似的事情
LC_ALL=C dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc
sudo su -c "echo 3 > /proc/sys/vm/drop_caches"
LC_ALL=C dd if=tempfile of=/dev/null bs=1M count=1024
Run Code Online (Sandbox Code Playgroud)
但我不确定dd参数。
对于随机 512KB、4KB、4KB(队列深度=32)读/写速度测试,我不知道如何在 linux 中重现测量结果?那么我该怎么做呢?
为了测试阅读速度,类似的东西sudo hdparm -Tt /dev/sda对我来说似乎没有意义,因为我想要例如基准测试之类的东西encfs。
编辑
@Alko,@iain
也许我应该写一些关于这个问题的动机:我正在尝试对我的 ssd 进行基准测试并比较一些加密解决方案。但这是另一个问题(在我的系统上对不同加密解决方案进行基准测试的最佳方法)。在网上浏览有关 ssd 和基准测试的信息时,我经常看到用户在论坛上发布他们的 CrystelDiskMark 结果。所以这是这个问题的唯一动机。我只想在 linux 上做同样的事情。对于我的特定基准测试,请参阅我的其他问题。
我正在执行time一些命令。现在为了平均测量值,我想按照指定的次数运行和计时我的命令,并获得具有计算平均值和标准偏差的结果。结果是这样的:
avgtime -n 100 my_command
real 0m5.388s stdev 0m0.068s
user 0m5.380s stdev 0m0.067s
sys 0m0.004s stdev 0m0.000s
Run Code Online (Sandbox Code Playgroud)
是否有用于此的 UNIX 工具?GNU/Linux 有吗?
我编写了以下脚本来测试 Python 排序功能的速度:
from sys import stdin, stdout
lines = list(stdin)
lines.sort()
stdout.writelines(lines)
Run Code Online (Sandbox Code Playgroud)
然后,我将其与sort包含 1000 万行的文件上的 coreutils命令进行了比较:
$ time python sort.py <numbers.txt >s1.txt
real 0m16.707s
user 0m16.288s
sys 0m0.420s
$ time sort <numbers.txt >s2.txt
real 0m45.141s
user 2m28.304s
sys 0m0.380s
Run Code Online (Sandbox Code Playgroud)
内置命令使用了所有四个 CPU(Python 只使用了一个),但运行时间大约是其 3 倍!是什么赋予了?
我使用的是 Ubuntu 12.04.5(32 位)、Python 2.7.3 和sort8.13
请问write-benchmark的gnome-disks测试后写回原来的数据?它是破坏性的吗?
“基准设置”窗口仅说明了这一点:Please back up important data before using the write benchmark.
此外,它如何处理测试磁盘上挂载的文件系统?
我有一个嵌入式 Linux ARM 系统,它在以太网和 USB 上的吞吐量明显低于预期。我怀疑记忆可能有所贡献。有没有办法观察在以太网或 USB 上运行吞吐量测试时消耗的内存带宽?
对于外部服务器环境中的灾难测试场景,我们正在寻找一种简单的方法来使进程陷入 D(不间断睡眠)状态。
有什么简单的方法吗?一个示例 C 示例代码将是一个加号:)
编辑- 第一个答案是半正确的,因为进程显示为处于 D 状态,但它仍然收到信号并且可以被杀死
为了比较不同 shell 之间脚本的运行时间,一些 SE 答案建议使用bash的内置 time命令,如下所示:
time bash -c 'foo.sh'
time dash -c 'foo.sh'
Run Code Online (Sandbox Code Playgroud)
...等,用于每个要测试的外壳。此类基准测试无法消除每个 shell 加载和初始化自身所需的时间。例如,假设上述两种命令被存储在一缓慢的设备具有早期软盘的读取速度,(124KB /秒), dash(一〜150K可执行程序)将加载大约7倍的速度比bash(〜1M),所述壳加载时间会扭曲time数字——这些炮弹的预装载时间与测量炮弹加载后foo.sh每个炮弹下方的运行时间无关。
什么是最好的可移植和通用的 util 来运行脚本计时,可以从每个 shell内运行?所以上面的代码看起来像:
bash -c 'general_timer_util foo.sh'
dash -c 'general_timer_util foo.sh'
Run Code Online (Sandbox Code Playgroud)
注意:没有 shell内置 time命令,因为没有一个是可移植的或通用的。
如果 util 还能够对 shell 的内部命令和管道所花费的时间进行基准测试,而无需用户首先将它们包装在脚本中,那就更好了。像这样的人工语法会有所帮助:
general_timer_util "while read x ; do echo x ; done < foo"
Run Code Online (Sandbox Code Playgroud)
一些shell' …
我有这个简单的 bash 脚本:
\n#!/bin/bash\n\nfor i in {1..1000000}\ndo\n echo "hello ${i}"\ndone\nRun Code Online (Sandbox Code Playgroud)\n这会打印一条消息一百万次。
\ntee我尝试比较将所有输出转储到单个文件 \xe2\x80\xaf\nvs.\xe2\x80\xaf 使用将输出拆分为两个文件的性能。
$ time ./run.sh > out1.txt\n\nreal 0m9.535s\nuser 0m6.678s\nsys 0m2.803s\n$ \n$ time ./run.sh | tee out2.txt > out1.txt\n\nreal 0m6.705s\nuser 0m6.895s\nsys 0m5.214s\nRun Code Online (Sandbox Code Playgroud)\n事实证明,同时写入两个文件比仅写入一个文件更快(这些结果在多次运行中是一致的)。
\n任何人都可以解释这是怎么可能的?\n另外,我应该如何解释user和 的sys输出time?\xc2\xa0\n为什么sys使用时时间会更长tee?
benchmark ×10
performance ×3
linux ×2
time ×2
bash ×1
coreutils ×1
dd ×1
dns ×1
embedded ×1
gnome-disks ×1
hard-disk ×1
memory ×1
pipe ×1
portability ×1
process ×1
python ×1
shell ×1
shell-script ×1
sort ×1
ssd ×1
tee ×1
time-utility ×1
timestamps ×1