15.2. POSIX クロック
POSIX は、タイムソースを実装して表すための標準です。カーネルによって選択され、システム全体に実装されているハードウェアクロックとは異なり、POSIX クロックは、システムの他のアプリケーションに影響を与えずに各アプリケーションで選択できます。
CLOCK_REALTIME: これは、実際の時間を表します。つまり「wall time」とも呼ばれます。これは、壁の時計からわかる時間を意味します。このクロックは、タイムスタンプイベントとユーザーと対話する場合に使用されます。これは、適切な権限を持つユーザーが変更できます。ただし、クロックの値が 2 つの読み取り間で変更された場合に、誤ったデータが作成される可能性があるため、ユーザーの変更は注意して使用してください。CLOCK_MONOTONIC: システム起動以降に増加する時間を表します。このクロックはプロセスでは設定できず、イベント間の時間差を計算するのに推奨されるクロックです。このセクションの以下の例は、POSIX クロックとしてCLOCK_MONOTONICを使用します。
注記
POSIX クロックの詳細は、以下の man ページおよびガイドを参照してください。
- clock_gettime()
- 『Linux System Programming』 by Robert Love
所定の POSIX クロックの読み取りに使用される関数は
clock_gettime()で、<time.h> 出て異議されます。この clock_gettime() コマンドは、POSIX クロック ID と timespec 構造の 2 つのパラメーターを取ります。これは、クロックの読み取りに使用する期間が埋められます。以下の例は、クロックの読み取りコストを測定する関数を示しています。
例15.2 clock_gettime() を使用した読み取り用 POSIX クロックのコストの測定
上記の例は、その他のコードを追加して、
clock_gettime() の戻りコードの確認、rc 変数の値の確認、または ts 構造の内容が信頼されるようにすることで改善できます。clock_gettime() man ページは、より信頼できるアプリケーションを作成するのに役立つより多くの情報を提供します。
重要
この
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
clock_gettime() 関数を使用するプログラムは、gcc コマンドライン '-lrt' に追加して rt ライブラリーにリンクする必要があります。
gcc clock_timing.c -o clock_timing -lrt
~]$ gcc clock_timing.c -o clock_timing -lrt
15.2.1. CLOCK_MONOTONIC_COARSE および CLOCK_REALTIME_COARSE リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
clock_gettime() やなどの関数 gettimeofday() は、システムコールの形式でカーネル内の関数です。ユーザープロセスが clock_gettime() を呼び出す際に、対応する C ライブラリー (glibc) が要求された操作を実行する sys_clock_gettime() システムコールを呼び出し、その結果をユーザープロセスに返します。
ただし、このコンテキスト切り替えは、ユーザーアプリケーションからカーネルへの切り替えにはコストがかかります。このコストは非常に低くなりますが、操作が数千回繰り返し行われると、累積されたコストはアプリケーション全体のパフォーマンスに影響を及ぼす可能性があります。
カーネルにコンテキストが切り替わらないように、クロックの読み取りが速くなり、
CLOCK_MONOTONIC_COARSE および CLOCK_REALTIME_COARSE POSIX クロックのサポートが VDSO ライブラリー機能の形式で作成されました。_COARSE バリアントは読み取りが速く、1 ミリ秒 (ミリ秒) の精度 (解像度とも呼ばれます) を持ちます 。