プログラムの一部の時間を計る非常に正確な方法が必要です。これには通常の高解像度クロックを使用できますが、ウォールクロック時間が返されます。これは必要な時間ではありません。プロセスの実行に費やす時間が必要です。
ブックマークを忘れてパッチの名前も忘れてしまったことを除けば、プロセスのタイミングをナノ秒の精度にできるLinuxカーネルパッチを見たことをはっきりと覚えています:(。
私はそれがどのように機能するかを覚えています:
すべてのコンテキストスイッチで、高解像度クロックの値を読み取り、最後の2つの値のデルタを実行中のプロセスのプロセス時間に追加します。これにより、プロセスの実際のプロセス時間の高解像度で正確なビューが生成されます。
通常の処理時間は通常の時計を使用して維持されます。これはミリ秒の精度(1000Hz)であり、私の目的には大きすぎます。
私が話しているカーネルパッチを誰かが知っていますか?また、前後に文字が入った単語のようだったのを覚えています。「rtimer」などのようなものですが、正確には覚えていません。
(他の提案も大歓迎です)
Markoによって提案されたCompletelyFairSchedulerは、私が探していたものではありませんが、有望に見えます。私が抱えている問題は、処理時間を取得するために使用できる呼び出しが、まだ十分にきめ細かい値を返さないことです。
- times()はミリ秒単位で値21、22を返します。
- clock()は、同じ粒度の値21000、22000を返します。
- getrusage()は210002、22001(およびそのようなもの)のような値を返します。それらは少し精度が高いように見えますが、値は著しく同じに見えます。
だから今私がおそらく抱えている問題は、カーネルが私が必要とする情報を持っているということです、私はそれを返すシステムコールを知らないだけです。