3

時間、メモリ、およびディスク使用に関して、開発中のツールのベンチマークを実行しようとしています。基本的に最初の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 番目の部分がどこにあるのかわかりません。

これらの問題を解決するにはどうすればよいですか?

4

3 に答える 3

1

BCC - Tools for BPF-based Linux IO analysis, networking, monitoring, and morefiletopから見てみたいと思うかもしれません:

tools/filetop: ファイル名とプロセスによるファイルの読み取りと書き込み。ファイルのトップ。

このスクリプトは、明示的な読み取りおよび書き込み呼び出しをインスツルメントするカーネル動的トレースを使用して関数vfs_read()と関数をトレースすることによって機能します。vfs_write()ファイルが別の手段 ( など) を使用して読み書きされた場合、mmap()このツールを使用してファイルを表示することはできません。

Brendan Gregg は、Linux パフォーマンス ツールに関する優れた講演とデモを行っています。これらは非常に有益です。

于 2017-01-10T16:06:53.680 に答える