システムサービスに関して、タイムスタンプの鍛造性とはどういう意味ですか?

システムサービスに関して、タイムスタンプの鍛造性とはどういう意味ですか?

次のコマンドを実行するとき

systemctl show --all tomcat

「ActiveEnterTimestampMonotonic」などのプロパティを含む多くのプロパティを取得します。この属性の値は、「14786979371795」のように非常に大きいです。これは、サービスが有効になってからのエポック以降のミリ秒数を示すには大きすぎるようです。また、サービスがアクティブになってからナノ秒ほど小さいようです。だからそれは何ですか? 「タイムスタンプ鍛造性」とは何ですか?

ベストアンサー1

freedesktop.orgのsystemd D-Bus ABIの説明タイムスタンプは次のように説明されています。

InactiveExitTimestamp,InactiveExitTimestampMonotonic,ActiveEnterTimestamp,ActiveEnterTimestampMonotonic,ActiveExitTimestamp,ActiveExitTimestampMonotonic,InactiveEnterTimestamp,InactiveEnterTimestampMonotonicデバイスが最後に非アクティブ状態に保たれ、アクティブ状態に切り替えられるか、アクティブ状態に切り替えられたか、非アクティブ状態に入った時間のCLOCK_REALTIMEおよびCLOCK_MONOTONIC 64ビットusecタイムスタンプが含まれます。単位変換の時点は次のとおりです。無効/失敗→アクティブ化、アクティブ化→アクティブ、アクティブ→非アクティブ化、ついに無効→無効/失敗。これらの変換が今回のブートに記録されていない場合、そのフィールドはゼロです。

少し隠されていますが、中央にはマイクロ秒(μs)を意味する「usec timestamp」と書かれています。

clock_gettime()systemdは、いくつかの代替「時計」の1つから時間を取得するためのシステムAPI機能を提供するLinuxでタイムスタンプを取得します。文書に示すように、aCLOCK_REALTIMEとという項目が必要ですCLOCK_MONOTONIC

この機能に関するマニュアル言った(強調)

CLOCK_MONOTONIC
単調な時間を示す設定不可能な時計不特定開始点のため。この時計はシステム時間の不連続ジャンプ(システム管理者が手動で時計を変更した場合など)の影響を受けませんが、adjtime(3)とNTPによって実行される増分調整の影響を受けます。

私のシステムでは、これらの値はシステムの起動時間の始点に対応しているように見えますが、それに依存してはいけません。 (LinuxのマニュアルにはCLOCK_BOOTTIME.と.の違いも記載されていますCLOCK_MONOTONIC。)

この*TimestampMonotonic値を使用して間隔を計算したり、日時が必要な場合はリアルタイムタイムスタンプを計算できます。タイマー単位がある場合、相対時間設定は単調な時間単位です。


実証的な実験で特定のサービスを再起動し、タイムスタンプを更新しました。私が得る価値は次のとおりです。

ActiveEnterTimestamp=Tue 2018-07-03 18:37:31 EEST
ActiveEnterTimestampMonotonic=14341647533587

そして

ActiveEnterTimestamp=Tue 2018-07-03 19:03:04 EEST
ActiveEnterTimestampMonotonic=14343180833503

差は14343180833503 - 14341647533587153329991625.5分(マイクロ秒)間隔です。

おすすめ記事