web-dev-qa-db-ja.com

CLOCK_MONOTONICとCLOCK_MONOTONIC_RAWの違いは何ですか?

UbuntuのLinux manページによると

CLOCK_MONOTONIC
      Clock that cannot be set and  represents  monotonic  time  since
      some unspecified starting point.

CLOCK_MONOTONIC_RAW (since Linux 2.6.28; Linux-specific)
      Similar  to  CLOCK_MONOTONIC, but provides access to a raw hard‐
      ware-based time that is not subject to NTP adjustments.

ウェブスターのオンライン辞書によると、単調は以下を意味します:

2:独立変数または項の添字の値が増加しても、プロパティが増加しない、または減少しないというプロパティを持つ。

つまり、後方にジャンプしません。コードのタイミングを調整している場合、これは重要なプロパティになることがわかります。

ただし、通常バージョンと生バージョンの違いは明確ではありません。誰かがNTPがまだCLOCK_MONOTONICに影響を与える可能性があるかどうかに光を当てることはできますか?

33
Matt

CLOCK_MONOTONICはNTP時間調整による不連続性を経験することはありませんが、does NTPは局部発振器とアップストリームサーバー。

CLOCK_MONOTONIC_RAWはローカルオシレーターであり、NTPによって制御されません。これは、NTPのせいであなたと戦っていないクロックに対して他の時間同期アルゴリズムを実装したい場合に非常に便利です。 ntpd(NTPプロトコルと最も広く普及しているNTPデーモンのリファレンス実装)は、時間調整が「穏やか」であると評価されていますが、絶対時間は穏やかであると言う方が正確です。クロックを500ppm回転させても構いません。これは、他の標準に対してクロック周波数を測定する立場にある場合、非常に劇的です。

CLOCK_MONOTONIC_RAWのユーティリティは、pthread_timedwait_monotonicなどの機能がそのタイムベースを使用するオプションを提供するまで制限されます。

30
Ben Jackson

ntpdは、差が特定のしきい値を下回っている場合、jumpになりません。代わりにadjtimeのような調整が使用され、CLOCK_MONOTONICおよびCLOCK_REALTIME (だがしかし CLOCK_MONOTONIC_RAW、どうやら)。

2
Anton Kovalenko