はじめに
夏になるとこの当番、自宅のサーバーたちが本当にうるさすぎるので、
ファン回転数を調整する方法を少し調べた。
FIFAを見るだけでも落ち着かない
具体的な調査過程は省略する。
要するに、IPMI にコマンドを投げるスクリプトを使うだけなので、Python、ipmitool、lm_sensors が必要。
本文
プロジェクトはこちら。
https://github.com/makeding/fujitsu-1320-m4-fancontrol
環境
こちらで動作確認できた環境は以下。
- FUJITSU PRIMERGY TX1320 M4
- iRMC S5 Firmware Revision 3.31P (1.00)
- SDR 3.40
他の iRMC や他の機種で動く保証はない。
依存関係
Debian / Ubuntu:
apt install git python3 ipmitool lm-sensors
sensors-detect
NixOS ならだいたいこんな感じ。
environment.systemPackages = with pkgs; [
python3
ipmitool
lm_sensors
];
温度が見えることを確認する。
sensors
自分の環境では主に Mellanox NIC の温度を見ている。出力はこんな感じ。
mlx5-pci-0200
Adapter: PCI adapter
sensor0: +81.0°C (crit = +105.0°C, highest = +81.0°C)
coretemp-isa-0000
Adapter: ISA adapter
Package id 0: +41.0°C (high = +86.0°C, crit = +100.0°C)
手動で調整する
インストールする。
git clone https://github.com/makeding/fujitsu-1320-m4-fancontrol.git
cd fujitsu-1320-m4-fancontrol
install -m 0755 irmc_fan.py /usr/local/sbin/irmc_fan.py
install -m 0755 irmc_fan_daemon.py /usr/local/sbin/irmc_fan_daemon.py
よく使うコマンド。
# 40% に設定
/usr/local/sbin/irmc_fan.py set 40
# 現在のファン回転数を見る
/usr/local/sbin/irmc_fan.py sdr
# iRMC の自動制御に戻す
/usr/local/sbin/irmc_fan.py clear
簡単なデーモン
もちろん小さなデーモンも書いた。sensors を定期的に実行し、主に mlx5-pci-0200:sensor0 を見て、できるだけ 85°C 以内に収める。ついでに CPU Package と PCH も見る。
手動で起動する。
/usr/local/sbin/irmc_fan_daemon.py --interval 10
出力例:
2026-06-30 02:04:25 pwm=45% want=45% mlx=81.0C mlx2=81.0C cpu=41.0C pch=59.0C
デフォルトの方針:
- mlx5 が 75°C 未満ならできるだけ静かにする
- 85°C に近づいたらはっきり回転数を上げる
- sensors が読めない場合は 70% まで上げる。センサー取得に失敗したまま低速で回すのを避けるため
- 回転数を上げるときは速く、下げるときはゆっくり。頻繁な上下動を避ける
NIC の sensor 名が違う場合はパラメータで変更できる。
/usr/local/sbin/irmc_fan_daemon.py \
--mlx-chip mlx5-pci-0200 \
--mlx-label sensor0
systemd
簡単な service を作る。
[Unit]
Description=Fujitsu iRMC smart fan control
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/local/sbin/irmc_fan_daemon.py --interval 10 --min-pwm 30 --max-pwm 100
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
保存先:
/etc/systemd/system/irmc-fan-daemon.service
有効化する。
systemctl daemon-reload
systemctl enable --now irmc-fan-daemon.service
journalctl -u irmc-fan-daemon.service -f
スクリプトを別の場所に置いた場合は、ExecStart のパスを変更すればよい。
終わり
標準的な EC 経由ではないファン調整は本当に面倒だった。
以上。
終
制作・著作
━━━━━
ⒽⓊⒼⒼⓎ