我正在尝试在时间、内存和磁盘使用方面对我正在开发的工具进行基准测试。我知道/usr/bin/time
基本上给了我前两个想要的东西,但是对于磁盘使用,我得出的结论是我必须推出自己的 bash 脚本,该脚本会定期从/proc/<my_pid>/io
. 基于这个脚本,这就是我想出的:
"$@" &
pid=$!
status=$(ps -o rss -o vsz -o pid | grep $pid)
maxdisk=0
while [ "${#status}" -gt "0" ];
do
sleep 0.05
delta=false
disk=$(cat /proc/$pid/io | grep -P '^write_bytes:' | awk '{print $2}')
disk=$(disk/1024)
if [ "0$disk" -gt "0$maxdisk" ] 2>/dev/null; then
maxdisk=$disk
delta=true
fi
if $delta; then
echo disk: $disk
fi
status=$(ps -o rss -o vsz -o pid | grep $pid)
done
wait $pid
ret=$?
echo "maximal disk used: $maxdisk KB"
不幸的是,我遇到了两个问题:
- 首先是我将此脚本的输出与我想对文件进行基准测试的工具的输出一起通过管道传输,似乎这些流偶尔会干扰,导致我看到底部报告的磁盘使用为 0 或过低这个文件。
- 第二个问题是我不知道如何处理将临时文件作为其进程的一部分删除的进程。在这种情况下,我认为公平的基准是记录最大的净磁盘使用量(即写入的字节数峰值 - 擦除的字节数),但我不知道在哪里可以找到这种差异的第二部分。
我该如何解决这些问题?