このサイトを運営するために使っている、D510MOというマザーボードを数年ぶりに置き換えました。
移行先のマザーボードは、今更感はありますが、GIGABYTE GA-AM1M-S2HとAMD Athlon 5350です。
AMDのシステムでFreeBSDを動かそうとする度に、過去何度となくトラブルに遭遇してきたので、警戒はしていたのですが、やはりというか早速トラブルが…
システム起動直後にしばらく経つと、ハードウェアリセットがかかるようになりました。
ログにも一切の痕跡を残さずに。
このページでは、この問題に対する対処について説明します。
このトラブルですが、powerdを有効にした直後に発生したので、このあたりが原因かと思い、色々調べてみましたが、既にバグとしてレポートされていました。
(こういうことがあるので、FreeBSDでサーバーを構築する場合には、最新ではなく少し古めのシステムを使うとよいと思います。)
【ご参考】Bug 189267 - [cpufreq] AMD Kabini (AM1/FM1Sb) Frequency Switching Causes Crash
powerdが有効になっていて、かつacpi_throttleが有効な状態で、システムが省電力モードのC6ステートに入ると、ハードウェアリセットかかるみたいです。
このバグレポートでは、回避策として以下の3つが挙げられていました。
powerd_enable="NO"
powerd_enable="YES"
hint.acpi_throttle.0.disabled=1
こちらは、マザーボードのBIOS画面から設定を変更します。
(マザーボードごとに設定方法が違います。)
powerdは、OS側から負荷に応じてCPUのステートを変更することで、CPUの周波数を制御し、省電力化を図っています。
雑に言うと、powerdはCPUの周波数をソフトウェアで制御しています。
一方、acpi_throttleはハードウェア制御で、OSに依存せず、コアの温度などを元に自動的にCPUの周波数や周辺回路のON/OFFを行っています。
後者の実装の例として、IntelのEIST(Enhanced SpeedStep Technology)や、AMDのCool'n'Quietが有名です。
排他ではなく、両方が併用されることにより、システムがより省電力になるため、今回は(3)で対処することにしました。
ご参考までに、acpi_throttleが動作するためには、CPUが特定のステートに遷移している必要があります。
例えば、Intel CPUでEISTによりターボブーストが有効になる(=POステートになる)には、CPUのステートがP1に遷移している必要があります。
このCPUのステート制御をしているのがpowerdですので、powerdが無効になっていると、結果的にacpi_throttleが動作しない、というわけです。
じゃあ、powerdでC6に入らないように制御できれば、この不具合は発生しないのでは、と思ったのですが、実はそうできない理由があるみたいです。
AMDプラットフォーム用のシステムでは、OS側には個別のCステートが公開されず、温度や負荷に応じて内部のステートが自動的にC1、C2、C3…C6と変化するようです。
つまりは、powerd側ではC6に遷移することを止められない、ということになります。
IntelとAMDのCPUには、こういう細かい違いがあるのですね。
なかなか難しいです。
・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。
まだ評価がありません |
表示できるメッセージはありません。