GNU/Linux >> Linux の 問題 >  >> Linux

CLOCK_REALTIME と CLOCK_MONOTONIC の違いは?

CLOCK_REALTIME NTP の影響を受け、前後に移動できます。 CLOCK_MONOTONIC ではなく、ティックごとに 1 ティックずつ進みます。


Robert Love の本 LINUX System Programming 2nd Edition 、具体的には、第 11 章、pg 363 の冒頭であなたの質問に対処します:

<ブロック引用>

単調なタイム ソースの重要な側面は、現在の値ではなく、タイム ソースが厳密に直線的に増加していることを保証することです。したがって、2 つのサンプリング間の時間差を計算するのに役立ちます

そうは言っても、彼はプロセスが OS の同じインスタンスで実行されていると想定していると思います。そのため、ドリフトを推定できるように定期的なキャリブレーションを実行することをお勧めします。


CLOCK_REALTIME 現在の壁時計、時刻に関するマシンの最良の推測を表します。 Ignacio と MarkR が言うように、これは CLOCK_REALTIME を意味します NTP を含め、システムの時刻クロックが変更されると、前後にジャンプできます。

CLOCK_MONOTONIC 過去の任意の固定点からの絶対経過時間を表します。システムの時刻時計の変更による影響はありません。

再起動を介在させずに、1 つのマシンで観測された 2 つのイベント間の経過時間を計算したい場合は、CLOCK_MONOTONIC が最良の選択肢です。

Linux では、CLOCK_MONOTONIC であることに注意してください。 サスペンドに費やされた時間は測定しませんが、POSIX の定義では測定する必要があります。 Linux 固有の CLOCK_BOOTTIME を使用できます サスペンド中も動き続ける単調クロック用。


POSIX 7 の引用符

POSIX 7 では、http://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_getres.html で両方を指定しています:

CLOCK_REALTIME :

<ブロック引用>

このクロックは、システムのリアルタイムを測定するクロックを表します。このクロックの場合、clock_gettime() によって返され、clock_settime() によって指定される値は、エポックからの時間 (秒およびナノ秒) を表します。

CLOCK_MONOTONIC (オプション機能):

<ブロック引用>

このクロックの場合、clock_gettime() によって返される値は、過去の特定されていない時点 (システムの起動時間やエポックなど) からの時間 (秒およびナノ秒) を表します。この点は、システムの起動後も変わりません。 CLOCK_MONOTONIC クロックの値は、clock_settime() で設定できません。

clock_settime() 重要なヒントを与えます:POSIX システムは CLOCK_REALITME を任意に変更できます ですから、それが連続的にも前方にも流れることに頼らないでください。 NTP は clock_settime() を使用して実装できます 、および CLOCK_REALTIME のみに影響を与える可能性があります .

Linux カーネルの実装では、CLOCK_MONOTONIC のエポックとして起動時間がかかるようです :CLOCK_MONOTONIC の開始点


Linux
  1. [[$ a ==Z*]]と[$a==Z *]の違いは?

  2. NssとPamの違いは?

  3. GNUWin32 と cygwin の違い

  1. ログインシェルと非ログインシェルの違いは?

  2. 2>&-、2> / dev / null、|&、&> / dev/nullと>/dev / null 2>&1の違いは?

  3. 仮想ページとページフレームの違いは?

  1. Sudo Su –とSudo Su —の違いは何ですか?

  2. EotとEofの違いは?

  3. [0-9]、[[:digit:]]とDの違いは?