/proc/uptime の値を使って SNMP プライベート MIB を実装するときの SYNTAX として Counter64 は適切か?
環境
- Ubuntu 18.04 ( 32 ビットと 64 ビット )
- net-snmp
- SNMP v2
前提
SNMP には hrSystemUptime RFC 2790 - Host Resources MIB が定義されていますが、hrSystemUptime は約 497 日で 0 に戻ってしまいます(1/100 秒 ごとに 1 カウントアップされる。4294967295 / 100 / 3600 / 24 => 497)
対策
そこで /proc/uptime から得られる値を使おうと考えています。以下のように出力される 2 つの値のうち左側を使います。
% cat /proc/uptime
24939.24 78721.83
なお uptime コマンドも /proc/uptime の値を使っているようです( https://gitlab.com/procps-ng/procps/blob/master/uptime.c#L47 https://gitlab.com/procps-ng/procps/blob/master/proc/sysinfo.c#L106 )。
そして、プライベート MIB を新規に追加し、MIB の SYNTAX は Counter64 として定義しようと考えています。
Linux の実装では /proc/uptime の左側の値は tv_sec で取得され、 unsigned long で出力されています( linux/uptime.c at master · torvalds/linux )。64 ビット CPU の場合 unsigned long は 64 ビットであり、SNMP を実装する場合 64 ビットの値を表現できるのは Counter64 のみです。
質問
- /proc/uptime の値は 0 から繰り上がるとはいえ、時間を扱う目的のために Counter64 を使うのは適切なのでしょうか?(好きに実装すればよい?)
- Counter64 は 32 ビット CPU の Linux 上でも 64 ビットとして扱われるのでしょうか?