自宅サーバー 番外編
Linuxカーネルが悲鳴を上げる

これまで記事で取り上げてきた自宅サーバーですが、勉強用とはいえ、あれこれこねくり回した結果なのか――ついにLinuxカーネルが悲鳴を上げました。
ある日突然、システムがリードオンリーでしかログインできない状態に。
原因として最も怪しいのは、一時バックアップ用に接続していたUSB接続の2.5インチHDD。どうにも調子が悪く、内部で激しく接続・切断を繰り返していたようで、その影響が他のストレージにまで波及。カーネルがSSD/HDDの不整合、もしくは緊急状態と判断しロックをかけたようです。
修復モードから
fsck /dev/sda2 -y
を実行し一時的に復旧。しかし数日後に再発。
これはさすがにまずい――ということで、サブPCとして使っていた MINISFORUM X400(Ryzen5 PRO 4650G 搭載) を暫定サーバーとして置き換えることにしました。
https://www.minisforum.jp/pages/elitemini-x400
負荷が上がると割とブンブン唸るためサーバー用途には微妙ですが、他に適したマシンもないので背に腹は代えられません。
UbuntuServerでの再構築
今回は UbuntuDesktop ではなく UbuntuServer をインストール。特に問題もなく完了しました。
本来であれば全て一から再構築しても良かったのですが、今回は時短を優先。
アプリの設定ファイルとデータを、
cp -rp **** ****
で丸ごとコピー。-rp オプションで属性を保持したまま保存します。
このバックアップのおかげで、ほぼ1日で復旧完了。

ちなみにAIやNextcloudのスケジュールをDiscord Botへ連携させるプログラムを書き、Dockerイメージ化してCasaOSで管理しています。やはりバックグラウンドで動かすより、GUI上で可視化されているほうが安心感があります。
Ryzenがうるさい問題
さて本題。
Ryzen搭載のミニPC、ちょっと負荷がかかるだけ(40℃程度)でファンが唸ります。非常にうるさい。
最近のLinuxカーネルならAMD CPU向けの最適化ドライバがあるのでは…?と調べてみると――
「ありますやん!」
声でちゃいましたが、ドンピシャなのが普通にありました。
amd-pstate-epp
kernel 6.3以上、かつ Ryzen 3000シリーズなど ZEN2以降で利用可能なCPUドライバ
amd-pstate-epp
これを有効化すると、電力効率とパフォーマンスが劇的に改善するとのこと。
有効化手順
まずBIOSでCPPC (Collaborative Processor Performance Control) が Enable になっていることを確認。
Auto だったので Enable に変更。
GRUBの編集
sudo nano /etc/default/grub
パラメーター追加:
GRUB_CMDLINE_LINUX_DEFAULT="amd_pstate=active"
設定反映と再起動:
sudo update-grub
sudo reboot
ドライバ確認
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver
出力が
amd-pstate-epp
になっていれば成功です。
プロファイル切り替え
プロファイルの切り替えも可能です
| プロファイル名 | 特徴 | 用途 |
performance | 常に最高クロック付近を維持 | ゲームサーバー、ビルドマシン |
balance_performance | 負荷に応じて素早く加速(標準) | 一般的なWebサーバー、デスクトップ |
balance_power | 効率を重視しつつ、必要なら回す | 自宅サーバー、ファイルサーバー |
power | 徹底的に消費電力を抑える | 低負荷な常時稼働マシン |
永続化設定(systemdサービス)
うちの環境だけなのかudevルールではうまく反映できなかったため、サービスを作成しました。
sudo nano /etc/systemd/system/amd-pstate-lowpower.service
[Unit]
Description=AMD P-State EPP Low Power Settings
After=multi-user.target
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo "balance_power" | tee /sys/devices/system/cpu/cpu*/cpufreq/energy_performance_preference'
ExecStart=/bin/sh -c 'echo "powersave" | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor'
ExecStart=/bin/sh -c 'echo "3600000" | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq'
RemainAfterExit=yes
[Install]
WantedBy=multi-user.targetサービス登録と有効化
# サービスを認識させる
sudo systemctl daemon-reload
# 今すぐ実行する
sudo systemctl start amd-pstate-lowpower.service
# 次回起動時からも自動実行するようにする
sudo systemctl enable amd-pstate-lowpower.service
反映確認
grep . /sys/devices/system/cpu/cpu0/cpufreq/{scaling_driver,scaling_governor,energy_performance_preference,scaling_max_freq}
表示例:
/sys/devices/system/cpu/cpu0/cpufreq/scaling_driver:amd-pstate-epp
/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor:powersave
/sys/devices/system/cpu/cpu0/cpufreq/energy_performance_preference:balance_power
/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq:3600000
設定通りに反映されていれば成功です。
導入後の体感
ファンの唸りがほぼ完全に無くなり。(LLMで考えさせたり意図的に負荷を上げれば回る)
アイドル時の消費電力も下がり、負荷時の挙動も滑らかになりました。
Haswell世代からRyzenへ一時移行という形ですが、やはり世代差は大きいですね。
しばらくはこの構成で様子を見つつ、最終的なサーバー機の選定も改めて考えたいところです。
自宅サーバー道は、まだまだ続きます。
せっかくなので…
せっかくなので以前から試してみたかった「ローカルLLM × APU活用」にも手を出してみました。
Ollama を Vulkan 経由で動作させ、APUのGPUリソースを活用する構成、さすがにこの世代のAPUでは“爆速”とまではいきませんが、GPU側に処理を肩代わりさせることでCPU負荷にはほとんど影響を与えずに動作してくれます。いい感じです、詳しいお話はまた今度





















ディスカッション
コメント一覧
まだ、コメントがありません