プロセスのCPU時間を計算するためのさまざまなメカニズムでstackoverflowスレッドを実行していました。
clock()
内部でどのように実装されていますか?使用しますかrdtsc()
(その場合は、コア間の移行に敏感です)。
また、getrusage()
実装されていますか?TSCにも依存しますか?
前もって感謝します
カーネルは、プロセスの CPU 使用率をティックのサイズで追跡します。
clock()
とはどちらgetrusage()
もこれらに基づいています。
ティックは、カーネルがクロックのハードウェア割り込みを受信し、現在実行中のプロセスにティックを追加するクロック ハンドラを実行するサンプリング方法を使用して、カーネルによってプロセスによって累積されます。少なくとも、前回見たときはそうでした。
したがって、まったく関係ありません。CPU 間で正確に測定されないためrtdsc
、これは良いことです。rdtsc
いくつかの libc コードを簡単に見ることができます。これがtime/ディレクトリですmusl-libc
いくつかのライブラリでは、一部の低レベルのタイミング syscall がVDSOを使用して、実際の syscall (ユーザー空間からカーネルへ、およびその逆) のコストを回避しているため、何とか RTDSC を使用しています。
しかし、私はあなたが尋ねることに驚いています。好奇心があるなら、フリーソフトウェア実装のソースコードを調べてみてください。それ以外の場合は、仕様と実装を信頼してください。
実装とシステム固有であるため、詳細は複雑になる可能性があります。実際の実装は、実行時に動的に調整できます (たとえば、カーネル内の VDSO セットアップを介して)。