システムクロックで大ハマリ

このエピソードの続き。

CPUを換装してみた
CPUをオーバークロックしてみた

このPCに CentOS7 をインストールして動かしているのだけれど、どうにもシステムクロックが思うように動いてくれない。

システムクロックで大ハマリ

システムクロックの進みが異常に遅く、1分で30秒も遅れてしまう。
あっという間に時刻が大きくズレていく。

この動画は、時刻がズレていく様子。上が正常な時刻、下がこのPCの時刻。
動画の開始から終了までで、上は30秒進んでいるが、下は15秒しか進んでいない。

これくらいの大きなズレがあると、chrony でも、ntp でも、まったく同期が行われない。
また、nfsマウントしてコピーなどを行うと、コピー途中でOSがクラッシュしてしまう。

仕方なしに、かなり強引だけれども、cronで次のような設定をして1分間隔で強制的に時刻調整を行うようにしてみた。

# EDITOR=cat crontab -e | grep ntpdate
* * * * * /sbin/ntpdate (ntpサーバ) > /dev/null 2>&1
#

この状態であれば、ある程度は正しい時刻を保ってくれるが、時刻を再設定するまでの1分の間に30秒も遅れてしまうので、シビアに時刻管理をしていると思われるnfsマウントは正常に動作せず、やはりコピー途中でOSがクラッシュしてしまう。
また、この方法では、さまざま負荷が大きい。

もう少し負荷を軽くするならば、ハードウェアクロックの値を拾ってシステムクロックを調整するという事も考えられる。
しかし、この方法では、1分の間に30秒遅れてしまう事に変わりはないし、ハードウェアクロックを基準に時刻を調整するなんて、本末転倒なおかしな話である。
この方法では、根本的に何も解決されない。

何か時刻の進み具合をコントロールする方法はないものだろうか。
WEBを漁ってみると、VMWare や VirtualBox などの仮想環境上に構築したゲストOSで時刻が遅れる場合があり、その対処として、OS起動時のカーネルのパラメータに「clock=pit」を設定すると回避できるという記述がけっこう見られる。
試しに、OS起動時にこのパラメータを手動でセットして起動してみる。
起動時に「e」を押して編集モードに入ってパラメータ「clock=pit」を追加し、「Ctrl+x」で起動させる。

clock=pit clock=pit

しかし、この方法では問題は解消されなかった。
相変わらずシステムクロックは遅れていく。

更に探す。
時刻を刻むための基準となる何かがあるはずだ。
マザーボードの水晶振動子か、CPUの動作周波数か、CPUのFSB絡みか、メモリとの同期周波数などか...
このPCは、CPUを換装し、更にオーバークロックもしているので、このあたりが原因としてあり得そうだが...
このあたりに関連するキーワードを含めながら、更に探してみる。
探す...探す...探す...
あった!

カーネルにおけるタイマー事情 ~第4回 タイマーハードウェアの抽象化~

Linux上で時刻を刻むための情報に「clocksource」という情報があるらしい。
むむむ、「clocksource」とは、そのままのズバリの名称ではないか。(^^;

確認してみる。

# cd /sys/devices/system/clocksource/clocksource0
# cat available_clocksource
tsc acpi_pm
#

このPCで利用可能な設定は「tsc」「acpi_pm」の2種類という事らしい。

現在の設定はどうか。

# cat current_clocksource
tsc
#

「tsc」が設定されている。

試しに、設定を「acpi_pm」に変更してみる。

# echo "acpi_pm" > current_clocksource
# cat current_clocksource
acpi_pm
#

この状態で時刻をウォッチしてみると...
おぉ! 時刻が遅れなくなった!
上が正常な時刻、下がこのPCの時刻。

しかし、この設定は、サーバを再起動すると元の「tsc」戻ってしまうようなので、「acpi_pm」を常態設定にする必要がある。
お手軽に設定するなら、/etc/rc.local などで、以下のような設定をしてもいいとは思うのだけれど…

# cat /etc/rc.local | grep acpi_pm
echo "acpi_pm" > /sys/devices/system/clocksource/clocksource0/current_clocksource
#

ここは、起動時のカーネルオプションの設定を変更する事にする。

# cd /etc/default
# vi grub
GRUB_CMDLINE_LINUX="(既存の設定) clocksource=acpi_pm"
# cd /boot/grub2
# grub2-mkconfig -o grub.cfg

PCを再起動し、狙い通りに設定されているか確認する。
起動オプションに「clocksource=acpi_pm」が設定されている。
OKだ。

起動設定

念のため、CentOS起動後の設定を確認する。
「acpi_pm」が設定されている。
OKだ。

$ cd /sys/devices/system/clocksource/clocksource0
$ cat current_clocksource
acpi_pm
$

chrony の同期状況を確認する。
ntpサーバの頭に「*」が付いており、同期されている。
OKだ。

$ chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* (ntpサーバ)                   3   8   377   150    -41us[  -46us] +/-   70ms
$

更に、nfsマウントを設定し、大量/大容量のファイルをnfs経由でコピーしてみる。
システムクロックがおかしい状態では、数GBをコピーするとOSがクラッシュしてしまったが、システムクロック調整後は、何十GBコピーしても問題なくコピーが続く。
OKだ。

やっと予定通りの運用ができるようになった。
まだまだ知らない事がたくさんあるな。
まだまだ勉強が必要だ。

 

一連記事:

広告

トラックバック 
〔https://blog2.zunbe.com/wp/wp-trackback.php?p=13442〕

    トラックバックはありません。

コメント

    コメントはありません。

コメントしてください

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


広告

まとめページ

取得した資格
登った山

広告

サイト内検索

WordPress

最近のコメント

広告

RSS

RSS 記事
RSS コメント
Server offered by
有限会社パテンティックソフトウェア
Profile for zunbe