我有一个名为 tmpfs /rtmp/
,它在 Ubuntu 操作系统上分配了 1GB 的 RAM。
使用 bash 脚本,我正在测试将一个小文本文件写入硬盘是否更快,或者写入此 RAM 驱动器是否更快/rtmp/
。
Bash 脚本写入硬盘
#!/bin/bash
URL="http://some.website/some.txt"
wget -O ~/current/axis_tmp ${URL}
cat ~/current/axis_tmp | grep "^pattern" | tail -n 1 | awk -F',' '{printf("%.0f\n", $3)}' | sed 's/ //g' > ~/current/tmp.txt
sed -i 's/^/X,/' ~/current/tmp.txt
sed -i 's/$/,Y/' ~/current/tmp.txt
exit 0
写入 tmpfs 的 Bash 脚本
#!/bin/bash
URL="http://some.website/some.txt"
wget -O /rtmp/axis_tmp ${URL}
cat /rtmp/axis_tmp | grep "^pattern" | tail -n 1 | awk -F',' '{printf("%.0f\n", $3)}' | sed 's/ //g' > /rtmp/tmp.txt
sed -i 's/^/X,/' /rtmp/tmp.txt
sed -i 's/$/,Y/' /rtmp/tmp.txt
exit 0
运行time
命令后,我有以下结果:
写入磁盘
real 0m0.554s
user 0m0.022s
sys 0m0.003s
写入 tmpfs
real 0m0.614s
user 0m0.023s
sys 0m0.002s
为什么写入文本文件tmpfs
比将文件写入磁盘慢?处理时间不应该更快写入tmpfs
吗?
您的脚本不是测试 I/O 的正确方法。正如hardillb指出的那样,其中一些,还有更多。这就是为什么有专门的工具来解决这个问题。最好的工具可能是恕我直言
fio
。你可以这样试试您只需
cd
进入要测试的分区中的文件夹,例如/rtmp
并启动命令。随意阅读它的文档或这里的其他线程以获取更多信息。一个脚本在完成请求的工作之前/之后做了很多工作(这里写一点数据):需要启动 shell 程序(可能已经在内存中,没什么大不了的),初始化它的数据区域,定位,读取和解释启动文件(
.bashrc
在.bash_profile
你的家中,系统范围的文件,...),读取和解释其中给出的命令,读取和解释脚本中的命令,依次运行调用的程序,撕裂之后放下一切。您测量的主要是开销,而不是工作本身。Shell 用于直接的用户交互,并具有一些基本的编程工具(我经常编写单行代码,例如一次性处理多个文件),您也可以编写更多实质性的程序(只要性能不重要)这可以)。但对于严肃的脚本,最好使用专为该任务设计的语言,如 Python、Perl 或 Raku。这两种脚本替代方案都不是进行严肃基准测试的正确工具。至少不是没有很多照顾。