アルゴリズムを実装しており、その時間とメモリ消費量を測定したいと考えています。参考までに、私は独自の測定ユーティリティを作成しました。このユーティリティは、/proc/[pid]/stat
消費されたユーザー時間とシステム時間、および仮想メモリと常駐セットのピーク サイズから読み取ります。(これら 2 つのメモリ統計の違いについては 100% 明確ではありませんが、それは当面の問題ではありません。)
ここまでは順調ですが、自分のプログラムと比較したいサードパーティの実装も出てきました。ソースをいじりたくないので、独自の測定プログラムを使用して効率に関するデータを収集することはできません (できるかもしれませんが、測定スキームを再考する必要があります)。だから私/usr/bin/time
もこれらの対策を講じていることがわかります。
出力を比較すると/usr/bin/time
、自分のツールと同じ時間使用量が報告されていることがわかりましたが、メモリ データは大きく異なります。まず第一に、/usr/bin/time
仮想メモリの使用量については何も報告せず、常駐セットの最大サイズに関する投稿のみを提供します。第二に、によって報告された常駐セットのサイズは/usr/bin/time
、私自身の測定値の約 6 ~ 8 倍です。
/usr/bin/time
そこで、が実際にどのように測定を行っているのか、なぜその違いがそれほど根本的なものなのかを調べようとしています。また、正しい値はどれですか。
出力例 (単位は MB):
<program>: <virtual mem> <resident set size>
autotest (my own utility): 23.2266 2.19531
/usr/bin/time: N/A 11.23437
GNU/Linux 3.8.13 Mageia 3 x86_64 を使用しています。
編集: 自信を高めるために、KDE システム モニターは、私自身のユーティリティが報告するデータをサポートしていることがわかりました。実際、私と同じ場所から情報を取得しています。したがって、からのデータを信頼する/proc/[pid]/stat
ことはかなり安全なはずです。しかし、疑問は残ります...
wait3()
EDIT2:以下の回答の助けから、それが GNU によって使用されるコマンドであると推測されますtime
。man ページ getrusage(2) で説明されている形式でデータを返します。RSS には、次のように書かれています。
これは、使用される常駐セットの最大サイズ (キロバイト単位) です。
マニュアルページも参照してproc/[pid]/stat
おり、次のように書かれています
Resident Set Size: プロセスが実メモリー内に持つページ数。これは、テキスト、データ、またはスタック領域にカウントされるページです。これには、デマンド ロードされていないページやスワップ アウトされたページは含まれません。
それで、私のプログラムのメモリ使用量を測定するだけで2番目のバージョンはより正確で、最初のバージョンはある種の外部ライブラリの使用量も測定しますか?