私の学術プロジェクトの一環として、C プログラムを実行する必要があります。
プログラムの実行時間を取得したい。そのために、Linux の他のすべてのプロセスを数秒間スリープ状態にする必要があります。それを行う方法はありますか?
(Linuxでコマンドを使ってみたのtime
ですが、うまくいきません。同じプログラムを実行しているのに実行時間が違うので、開始時間と終了時間の差を見て実行時間を計算しています)。
私の学術プロジェクトの一環として、C プログラムを実行する必要があります。
プログラムの実行時間を取得したい。そのために、Linux の他のすべてのプロセスを数秒間スリープ状態にする必要があります。それを行う方法はありますか?
(Linuxでコマンドを使ってみたのtime
ですが、うまくいきません。同じプログラムを実行しているのに実行時間が違うので、開始時間と終了時間の差を見て実行時間を計算しています)。
私が考えることができる最善の方法は、シングルユーザーモードにドロップすることです。
# init 1
ほとんどすべてのディストリビューションで。これにより X も停止し、未加工のコンソールになります。迷子のマウスの動きによる割り込みの処理は、表示されている変動の原因の 1 つである可能性が高いため、これは良いことです。
システム全体を元に戻したい場合init 3
は、おそらくそれかinit 5
.
スケジューラが 1 つのプロセスから別のプロセスに移動するシステムでは、プロセスの正確な実行時間を取得することはできません。
Intelプロセッサはクロック数をカウントするレジスタを挿入しましたが、それでも時間を測定することはできません.
Google で PDF として見つけることができる本「Computer Systems: A Programmer's Perspective」があります。この本では、章全体が時間測定に専念しています。
これを行う通常の方法は、マシンを可能な限り静止させてから、いくつかの測定を行い、それらを平均化することです。最初の読み取りは、キャッシュの作成を伴う可能性があるため、破棄することをお勧めします。
シャットダウンしたプロセスの数、ポーリング、IO、バックグラウンドデーモンのすべてが実行の優先度に影響を与えても、実行時間には常に違いがあります。
アカデミックなアプローチは、かなりのサンプルを実行して統計を取ることです。また、sar を見て背景を記録することもできます。あなたが取る可能性のある測定値を無効にするには
でアプリケーションを実行してみてくださいnice -n 20
。他のプロセスを静かにすることが役立つ場合があります。
time コマンドを使用します。user + sys の合計は、プログラムが CPU を直接使用した時間と、システムがプログラムのために CPU を使用した時間を加えたものです。知りたいことだと思います。