我正在编写一个脚本来测试网络存储的读/写性能,但我需要一些帮助来完成该脚本。
脚本很简单:
- 重新加载 nfs 挂载以清除缓存
- 将测试文件写入 nfs
- 记录时间
- 从 nfs 读取测试文件
- 记录时间
我还有一个问题需要解决:解析时间命令的输出并将其存储在文本文件中。
时间命令输出三个值:real 0m0.000s user 0m0.000s sys 0m0.000s
我只想要真实的时间。一个文件用于读取,一个文件用于写入。
这是我目前所拥有的:
#!/bin/bash
for i in [`seq 1 20`];
echo "remounting autofs"
/etc/init.d/autofs reload;
wait 5;
echo "write test"
#for write perf
do time dd if=/dev/zero of=/home/nfs_perf_testing/samplefile$i bs=1M count=1024 oflag=direct;
echo "write test done";
wait 5;
echo "read test";
#for read perf;
do time dd if=/home/nfs_perf_testing/samplefile of=/dev/null bs=1M count=1024 iflag=direct;
echo "read test done";
done;
谢谢你们
答案1
时间(1)打印到标准错误所以你需要将其输出重定向到标准输出 2>&1
,然后将其传输到grep找到你想要的行grep real
。最后使用awk打印您想要的列awk '{ print $2 }'
。
放在一起看起来应该是这样的:
(time command_to_time) 2>&1 | grep real | awk '{ print $2 }'
答案2
没错。很简单。
wait
没有达到您的预期。sleep
在此处使用。
for i in `seq 1 20`
省略括号--它们在这里混淆了外壳。
顺便说一句:下次考虑使用 iozone 或 bonnie++。我知道iozone
有一个选项可以在测试之间卸载/重新安装 NFS 分区。它还会生成可以导入 EXCEL 并制作漂亮的 3D 图表的数据。它还可以测试各种块大小。
此外,RAM 缓存也可能成为一个问题。您可能需要一个特殊的启动配置(在 grub 中),以便仅使用一定数量的 RAM(例如 1MB)进行启动。请参阅https://stackoverflow.com/questions/13484016/setting-limit-to-total-physical-memory-available-in-linux
答案3
很简单,使用 grep:
{ time command >/dev/null; } |& grep real
这将输出执行“命令”的实际时间