LinuxでASPMバグを踏んでログが残らないシステムダウン
自鯖環境はLinuxホスト2台の冗長化構成(非ライブマイグレーション)で組んでいるのだが、
ホスト2号機の方で意図しないシステムダウンが発生する事があり原因究明を頑張っていた。
古いKernelを使うと何故か事象が発生しない事から、とりあえず古い物を使い続けていたのだが、
先日公開されたCentOS6.9の事もあり、流石にKernel上げないのも限界を感じてきたので、
strace使ったりして本気で原因究明をやってみた。
結果、恐らくこれだろうという所まで切り分けが出来たので、
ワークアラウンドを実施した所、今の所は事象が発生していない事から備忘録を残しておく事に。
- DigiWiki > PCI-E ASPMの無効化
細かい設定は上のwikiに書いたが、少しだけ解説。
と思ったが、もっと詳しい事がコチラにかいてあった。
要するにPCI-Eの省電力機能を使うと、Kernelのバグに当り勝手にシステムハングアップしてしまう。
最近のマザーボードだと、通電時に自動的に電源ONする物があり、
「ハングアップ > 電源OFFと判断 > 自動再起動 > エンドレスループ」
になって、超絶不安定なシステムになってしまう (´・ω:;.:…
色々な組み合わせがあると思うが、自鯖環境で発生したのは下記のような組み合わせの場合だった。
- マザーボードはPCI-E2.0対応
- 差しているPCI-EボードはPCI-E1.1対応
- 仮想化でゲストにはPCI-E2.0が見えている
この時にゲスト側からASPMの省電力化が実行されると、
サーバホストがゲストOS全体も巻込みながらシステムダウンした (´;ω;`)
………
回避するのは簡単で、ホストOSでPCI-E ASPMを無効化すれば良い。
『ASPMを無効化して大丈夫なのか』と言われそうだが、サーバで省電力化を優先し、
PCI-Eが勝手にOFFになる方が問題(NICボード停止など)なので、ASPMを無効化する事をオススメする。
無効化するには、GRUBのkernelパラメータに "pcie_aspm=off" を追記してOSを再起動する。
GRUB2の場合はwikiに書いてあるのでそちらを参照の程…