はじめに
ProxmoxVEでサーバーを構築したのだが定期的にダウンしていた。原因が分かったため記事にする。
追記(Proxmox7以降の話)
pythonコマンドが無くなり、python3となりました。python3とコマンドは置き換えてください。この記事で適用したcronの設定もアップグレード後には機能しなくなっているはずです。
マシンの構成
CPU:AMD Ryzen 5 1600 https://kakaku.com/item/K0000954888/
GPU:Geforce GTX 1050Ti https://kakaku.com/item/K0000921781/
マザボ:ASRock AB350 PRO4 https://kakaku.com/item/K0000947191/
障害発生時の状況
文字に起こしてみると以下のような内容。
login: [1192.106507] watchdog: BUG soft lockup - CPU#11 stuck for 23s [pvesr:31246]
[16.102216] watchdog: BUG soft lockup - CPU#10 stuck for 22s [kworker/10:3:6830]
[20.106166] watchdog: BUG soft lockup - CPU#11 stuck for 23s [pvesr:31246]
[44.106166] watchdog: BUG soft lockup - CPU#10 stuck for 22s [kworker/10:3:6830]
節電のためC6ステートに切り替えを行ったときに不具合が発生するらしい。
Ryzen linux kernel bug 196683 - Random Soft Lockup
https://community.amd.com/t5/processors/ryzen-linux-kernel-bug-196683-random-soft-lockup/td-p/156304
直し方
"ZenStates-Linux"というPythonコードを使用するとRyzenのC6を無効化できる。msrモジュールを事前に有効化させる必要がある。
msrモジュールを自動で読み込むようにする
vim /etc/modules
# 中に以下を追記
msr
GitHubからコードを落とす
ZenStates-Linux
https://github.com/r4m0n/ZenStates-Linux
git clone https://github.com/r4m0n/ZenStates-Linux.git
現在のC6ステートを確認。C6が有効であることがわかる。
sudo python c6_state_check/ZenStates-Linux/zenstates.py -l
P0 - Enabled - FID = 80 - DID = 8 - VID = 32 - Ratio = 32.00 - vCore = 1.23750
P1 - Enabled - FID = 8C - DID = A - VID = 50 - Ratio = 28.00 - vCore = 1.05000
P2 - Enabled - FID = 7C - DID = 10 - VID = 68 - Ratio = 15.50 - vCore = 0.90000
P3 - Disabled
P4 - Disabled
P5 - Disabled
P6 - Disabled
P7 - Disabled
C6 State - Package - Enabled
C6 State - Core - Enabled
# Proxmox7以降
sudo python3 c6_state_check/ZenStates-Linux/zenstates.py -l
C6を無効化してみる
sudo python c6_state_check/ZenStates-Linux/zenstates.py --c6-disable
Disabling C6 state
# Proxmox7以降
sudo python3 c6_state_check/ZenStates-Linux/zenstates.py --c6-disable
Disabling C6 state
結果を確認。C6が無効化されている。
sudo python c6_state_check/ZenStates-Linux/zenstates.py -l
P0 - Enabled - FID = 80 - DID = 8 - VID = 32 - Ratio = 32.00 - vCore = 1.23750
P1 - Enabled - FID = 8C - DID = A - VID = 50 - Ratio = 28.00 - vCore = 1.05000
P2 - Enabled - FID = 7C - DID = 10 - VID = 68 - Ratio = 15.50 - vCore = 0.90000
P3 - Disabled
P4 - Disabled
P5 - Disabled
P6 - Disabled
P7 - Disabled
C6 State - Package - Disabled
C6 State - Core - Disabled
# Proxmox7以降
sudo python3 c6_state_check/ZenStates-Linux/zenstates.py -l
全くキレイなやり方ではないが、cronに入れて起動時に設定されるようにする。
crontab -e
# 一番最後の行に以下追記
@reboot sudo python c6_state_check/ZenStates-Linux/zenstates.py --c6-disable
# Proxmox7以降
@reboot sudo python3 c6_state_check/ZenStates-Linux/zenstates.py --c6-disable
最後に
マザーボードの蟹NIC用ドライバーが不安定なため、サーバーが機能しなくなることが度々あった。PCI Passthroughを行っていたため現象を把握しにくかった。
蟹NICを直した話
PCI Passthroughを行うとGPU(Geforce GTX1050Ti)は仮想マシンが持っていってしまう。購入したRyzenにはGPU機能がないためモニターが映らない状態だった。
ProxmoxVEはWeb上のコンソールで管理できるはず…だったのだが、NICが倒れてしまうとお手上げ。
GPU付きのIntelのほうが苦労しなかったかもしれない。