1

プロセスのCPU時間を計算するためのさまざまなメカニズムでstackoverflowスレッドを実行していました。

clock()内部でどのように実装されていますか?使用しますかrdtsc()(その場合は、コア間の移行に敏感です)。

また、getrusage()実装されていますか?TSCにも依存しますか?

前もって感謝します

4

2 に答える 2

2

カーネルは、プロセスの CPU 使用率をティックのサイズで追跡します。

clock()とはどちらgetrusage()もこれらに基づいています。

ティックは、カーネルがクロックのハードウェア割り込みを受信し、現在実行中のプロセスにティックを追加するクロック ハンドラを実行するサンプリング方法を使用して、カーネルによってプロセスによって累積されます。少なくとも、前回見たときはそうでした。

したがって、まったく関係ありません。CPU 間で正確に測定されないためrtdsc、これは良いことです。rdtsc

于 2013-09-04T05:27:13.943 に答える
0

いくつかの libc コードを簡単に見ることができます。これがtime/ディレクトリですmusl-libc

いくつかのライブラリでは、一部の低レベルのタイミング syscall がVDSOを使用して、実際の syscall (ユーザー空間からカーネルへ、およびその逆) のコストを回避しているため、何とか RTDSC を使用しています。

しかし、私はあなたが尋ねることに驚いています。好奇心があるなら、フリーソフトウェア実装のソースコードを調べてみてください。それ以外の場合は、仕様と実装を信頼してください。

実装とシステム固有であるため、詳細は複雑になる可能性があります。実際の実装は、実行時に動的に調整できます (たとえば、カーネル内の VDSO セットアップを介して)。

于 2012-10-14T16:26:24.197 に答える