0%

Linux systemd, fancontrol and other stuff. nvidia显卡外部风扇转速控制

像 Nvidia P40、P4、P100 或 M40 等服务器计算卡没有内置风扇,一般在无风道的情况下会外加在尾部的风扇以解决散热。对这个风扇的调速,可以看到手动使用调速线、拆开显卡在核心附近安装热电偶获取温度然后用电路控制风扇转速的方案。

然而,系统可以获取显卡的温度,同时也可以控制PWM输出控制风扇转速。因此一定存在软件的解决方案控制风扇转速。解决方案如下。

首先安装 fancontrol,大部分发行版的包管理工具中有此软件。

其控制温度的脚本如下(省略了硬件信息)。FCTEMPS 处是可以填绝对路径的,这里填/home/gputemp

1
2
3
4
5
6
7
8
9
10
...
FCTEMPS=hwmon4/pwm2=/home/gputemp
FCFANS=hwmon4/pwm2=hwmon4/fan2_input
MINTEMP=hwmon4/pwm2=35
MAXTEMP=hwmon4/pwm2=65
MINSTART=hwmon4/pwm2=120
MINSTOP=hwmon4/pwm2=20
MINPWM=hwmon4/pwm2=20
MAXPWM=hwmon4/pwm2=255
AVERAGE=hwmon4/pwm2=2

我们接下来用一个service 向/home/gputemp 循环写温度。 其systemd 脚本如下。写好后放置到正确位置,并设置enable 开启启动。

1
2
3
4
5
6
7
8
9
10
[Unit]
Description=Write GPU temperature to file

[Service]
ExecStart=sh -c 'echo $(nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader | tail -n 1)000 > /home/gputemp'
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

另,实际上

1
<(echo $(nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader | tail -n 1)000)

可以将直接转为文件,使用stat 查看其信息如下。但 fancontrol 脚本处并不支持执行命令获得的文件。

1
2
3
4
5
6
7
8
9
 stat <(echo $(nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader | tail -n 1)000)
File: /dev/fd/63 -> pipe:[20209]
Size: 64 Blocks: 0 IO Block: 1024 symbolic link
Device: 17h/23d Inode: 401811 Links: 1
Access: (0500/lr-x------) Uid: ( 1000/ wwq) Gid: ( 1000/ wwq)
Access: 2023-04-02 22:59:46.287394863 +0800
Modify: 2023-04-02 22:59:46.287394863 +0800
Change: 2023-04-02 22:59:46.287394863 +0800
Birth: -