我一直在尝试获得一个 FreeBSD 盒子(运行 FreeNAS)来控制它的风扇。即使系统温度相当低,它也希望以高速运行它们。 lm-sensors 软件包可以在 Linux 上执行此操作,但在 FreeBSD 上不可用。
我找到了这个类似的问题这边,却一直没有任何反应。
我可以加载一个内核模块来在 FreeBSD 上执行此操作吗?
答案1
ACPI
是的。如果您的硬件支持高级配置和电源接口(ACPI)然后有可加载的模块ACPI支持。
不幸的是大多数(如果不是全部)模块目标是笔记本电脑。
您可以使用以下命令查看是否有与粉丝相关的任何设置sysctl
:
# sysctl hw.acpi
但与其手动调整风扇速度,不如根据温度和负载自动调整。在 FreeBSD 中,这是由动力默认情况下禁用。
因此,即使风扇没有直接暴露在外,您也可以调整它们,但要调整 CPU 频率。然后,一些 BIOS 会相应地调整风扇速度(如果也在合理的温度范围内)。
示例设置在/etc/rc.conf
powerd_enable="YES"
powerd_flags="-a adaptive"
performance_cx_lowest="C2" # Online CPU idle state
performance_cpu_freq="1399" # Online CPU frequency
economy_cx_lowest="C3" # Offline CPU idle state
economy_cpu_freq="NONE" # Offline CPU frequency
它sysctl hw.acpi
还将显示上述任何设置是否可以生效。
智能制造管理接口
如果你没有走 ACPI 路线那么也许智能平台管理界面(IPMI) 可以对您有所帮助。然而,这通常仅在具有 BMC 的服务器级主板上可用。
当服务器启动时,风扇以 BIOS 默认速度运行,直到操作系统接管。如果操作系统不接管(即使用 ACPI),则 CPU 和风扇通常会全速运行。尽管在某些情况下,BIOS 配置屏幕中无法直接提供阈值,但可以使用 IPMI 进行设置。
FreeBSD 确实有一个IPMI驱动程序你可以安装sysutils/ipmitool来玩设置。
以下片段来自服务之家网站应该适用于某些 SuperMicro 主板 (X9/X10/X11):
#set fan mode to "full"
ipmitool raw 0x30 0x45 0x01 0x01
#set fans in "system" zone to 37.5%
ipmitool raw 0x30 0x70 0x66 0x01 0x00 0x24
#set fans in "peripheral" zone to 25%
ipmitool raw 0x30 0x70 0x66 0x01 0x01 0x16
笔记:风扇模式首先设置为全速,因为如果不设置,BMC 似乎不会更改风扇速度。
上面的链接指出:
但神奇的数字是相同的
请注意,无论使用哪种 IPMI 工具,SuperMicro 主板的幻数都是相同的。对于 Tyan 来说,他们可能会有所不同。困难的部分是弄清楚这一点。看起来 SuperMicro 使用 0x30 但是国际商业机器公司可能会使用 0x3a。
如果您设置了用户名/密码,那么也提供它们:
ipmitool -H HOST_IP -U USERNAME -P PASSWORD raw 0x3a 0x07 0x01 0x50 0x01
您可能没有做出错误的选择。有些确实喜欢泰安.但请注意,他们的实施可能有点古怪的。如果您尝试猜测神奇数字,这一点非常重要。如果更新 BIOS,2020 年的体验可能会更好:
当然,Tyan 主板在 IPMI 方面存在一些粗糙的地方,因为它不像 SM 实现那样得到很好的使用和完善。我发现即使超时为 1800 秒,KVM 连接也会断开。我必须重新加载 IPMI 网页,重新登录并再次启动 KVM。有一次,IPMI 完全拒绝了我的 root 登录,尽管我确信我的密码。我只是拔掉服务器的电源,重新插上电源并等待 IPMI,然后我就再次进入了。我的结论是IPMI迷失了自己。
也许你可以设置占空比在BIOS中。这似乎在某些 Tyan 主板上可用,但在设置中并不明显。
它可以设置为两个值之一 - 手动和全速。就是这样。现在,您在上面看到的所有温度都是在风扇占空比设置为默认值 30% 的情况下实现的。我将创建一个支持票并询问 Tyan 如何让风扇随 CPU 或系统温度变化
更新:感谢 @jpmomo 指出风扇控制可以工作 - 以某种方式 - 我将占空比设置为 15 并对主板进行负载测试。这里的获胜者显然是 Supermicro SNK-P0064AP4 散热器。在默认的 30% 占空比下,它的转速为 1600RPM,并且超级安静。散热器还确保CPU在负载下不会超过68C。这是一个惊人的结果。将占空比降低至 15% 会使 CPU 风扇以 1300RPM 的速度旋转,但一旦 CPU 超过 75C,风扇就会加速旋转。我不敢相信这个散热器有多好。当然,7302P“只是”180W 处理器,所以就是这样
硬件
如果其他一切都失败了,那么购买一个便宜的硬件风扇控制器:-)。
或者,如果您不介意自己稍微修改一下,那么可以尝试7VDC 风扇
您需要一个 4 针 Molex 连接器到 3 针风扇连接器,如果有多个风扇,则需要更多 Y 线束。拿起黑线并将其移至连接器的远端。这最终会将地线移至 +5VDC 线路,基本上会得到 7VDC(12VDC 减去 5VDC 等于 7VDC)。只要您操作正确,风扇就会以较慢的速度运行,这是安全的。如果它们对您来说仍然旋转得太快,您只能将黄色(适配器上可能是红色)移动到另一侧。这将使其成为+5VDC,但有些风扇将无法工作,因为电压可能不足以启动风扇转动。
答案2
听起来您所看到的是 X9 与 X10/X11 中使用不同 BMC 的结果。 X9 只能发出原始命令来更改风扇模式 - 一个 4 值字符串(总结如下);而 X10/11 板可以采用 6 个值字符串来额外控制风扇区域和占空比。
# Set fan mode: raw 0x30 0x45 0x01 [x]
# [x] Modes: CPU Zone Peripheral Zone
# Target Target
# ------------- -------- ---------------
# 00 Standard 50% 50%
# 01 Full 100% 100%
# 02 Optimal 30% 30%
# 04 Heavy I/O 50% 75%
答案3
任何 BSD 系统通常都不支持传统的风扇控制。 FreeBSD 12 (2019) 没有传感器框架,尽管 NetBSD 和 OpenBSD 都有,但它们也不支持风扇控制。正如您所指出的, Linux 确实支持风扇控制lm-sensors
,但实际上,它在 BSD 上不可用。
正如其他答案中提到的,ipmitool
如果您有带有 IPMI 的服务器级软件,您可以尝试。
否则,实际上,最好的做法可能是查看 BIOS 是否有风扇控制选项。另一个技巧是用另一个操作系统配置芯片,然后热重启回到 FreeBSD,希望同时设置不会被重置。最后,您也可以尝试自己破解解决方案;事实上,这就是我用我的风扇控制当我想让我的服务器安静下来时,OpenBSD/DragonFly 的补丁集。