- ntp clock-period の値の計算方法 -

まず、show ntp status を表示します。こんな内容が表示されるはずです。

  Cisco2611#show ntp status
  Clock is unsynchronized, stratum 16, no reference clock
  nominal freq is 249.5901 Hz, actual freq is 249.5901 Hz, precision is 2**16
  reference time is 00000000.00000000 (09:00:00.000 JST Mon Jan 1 1900)
  clock offset is 0.0000 msec, root delay is 0.00 msec
  root dispersion is 0.00 msec, peer dispersion is 0.00 msec
  Cisco2611#

もし show ntp status で何も表示されなかったら、ntp server 10.1.1.1 など、適当 なアドレスを指定して一旦 ntp の仮設定をしてください。一度設定した事実があれば 良いだけなので、直後に no ntp server 10.1.1.1 で消しましょう。

まず、上記で赤くした数字、これが内蔵クロックの何かです。電子回路としては、発振 しているクロック周波数はもっと高いのですが、clock-period の計算に使うのはこの 周波数です。ここに例示した 249.5901 Hz の他に、250.0000 Hz と 119.2092 Hz を見 かけました。もしかしたら他の周波数も存在しているかも知れません。
何かの基本となる周波数がわかったら、4294967296 をこの周波数で割り算します。上 記の例の場合は 4294967296 ÷ 249.5901 = 17208083.55… ということで、 clock-period の基準値が 17208083 であることがわかりました。この数字は「内蔵ク ロックが全く誤差がない状態」に現れる数字です。

  Cisco2611#configure terminal
  Enter configuration commands, one per line.  End with CNTL/Z.
  Cisco2611(config)#ntp clock-period 17208083
  Cisco2611(config)#end
  Cisco2611#
  *Mar  1 09:05:25.207: %SYS-5-CONFIG_I: Configured from console by console
  Cisco2611#show running-config | include period
  ntp clock-period 17208083
  Cisco2611#

ちなみに 4294967296 という数字は 232 です。16進数で 0x100000000 で す。小難しい話をすると「249.5901 Hz ごとに 17208083 ずつカウントして、32ビット のカウンタが1回転する時間が1秒」という計算をしているようです。



- ntp clock-period 実験 -

さて、ではこの数字を故意に変更すると、どうなるでしょう? ということで実験をし てみました。まずはとんでもない値から。

  Cisco2611(config)#ntp clock-period 10000000
  %NTP: unreasonable value
  Cisco2611(config)#

怒られました。では、基準からちょっとずつ範囲を広げてみます。

  Cisco2611(config)#ntp clock-period 17300000
  Cisco2611(config)#ntp clock-period 17400000
  %NTP: unreasonable value
  Cisco2611(config)#ntp clock-period 17380000
  Cisco2611(config)#
  Cisco2611(config)#ntp clock-period 17390000
  %NTP: unreasonable value
  Cisco2611(config)#

まぁキリが無いので結論を言うと、上限は 17380158 で下限は 17035998 でした。つま り±約1%の範囲まで指定できるようです。そこで、まずは上限の値を設定して、どの くらい時計が狂うのか試してみました。

  Cisco2611#configure terminal
  Enter configuration commands, one per line.  End with CNTL/Z.
  Cisco2611(config)#ntp clock-period 17380158
  Cisco2611(config)#end
  Cisco2611#
  *Mar  1 09:16:12.314: %SYS-5-CONFIG_I: Configured from console by console
  Cisco2611#
      【これから計測開始】
  Cisco2611#show clock
  *09:20:00.062 JST Mon Mar 1 1993
  Cisco2611#
      【ここで1000秒待機】
  Cisco2611#show clock
  *09:36:50.146 JST Mon Mar 1 1993
  Cisco2611#

1000秒後に約10秒進んでました。計算通りですね。続いて 下限の値でも試してみます。

  Cisco2611#configure terminal
  Enter configuration commands, one per line.  End with CNTL/Z.
  Cisco2611(config)#ntp clock-period 17035998
  Cisco2611(config)#end
  Cisco2611#
  *Mar  1 09:39:08.070: %SYS-5-CONFIG_I: Configured from console by console
  Cisco2611#
      【これから計測開始】
  Cisco2611#show clock
  *09:39:59.935 JST Mon Mar 1 1993
  Cisco2611#
      【ここで1000秒待機】
  Cisco2611#show clock
  *09:56:29.981 JST Mon Mar 1 1993
  Cisco2611#

1000秒後に約10秒遅れました。こちらも計算通りですね。
ということで、基準値に対して特定の倍率を掛けて設定すると、その倍率分だけ内蔵時 計を進めたり遅らせたりできることがわかりました。

前のページ 次のページ