時間、メモリ、およびディスク使用に関して、開発中のツールのベンチマークを実行しようとしています。基本的に最初の2つに必要なものが得られることはわかって/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"
残念ながら、次の 2 つの問題に直面しています。
- 1 つ目は、このスクリプトの出力と、ベンチマークしたいツールの出力をファイルにパイプしていることです。これらのストリームが干渉することがあり、ディスクの使用量が 0 またはディスク使用量が少なすぎることが報告されています。このファイル。
- 2 つ目の問題は、プロセスの一部として一時ファイルを削除するプロセスをどうすればよいかわかりません。この場合、公正なベンチマークはネットディスクの最大使用量 (つまり、書き込みバイト数のピーク - 消去バイト数) を記録することだと思いますが、この差の 2 番目の部分がどこにあるのかわかりません。
これらの問題を解決するにはどうすればよいですか?