家用 All In One Nas 服务器的降低待机功耗指南
本文面向的群体为有一定基础的用户,主要目的在于如何在尽量不损失性能的前提下降低All In One服务器的待机功耗,而非All In One的具体配置教程
通过文中的方法,我将All In One服务器的待机功耗从70.2W降低到39W,降低幅度约为40%,每月可以节省约20度电
前言
All In One服务器的核心就三点:存储、虚拟机、Docker,对于普通家庭用户来说,还有另外三个要求:低成本、低功耗、高稳定度,因此,选择合适的硬件配置和底层系统就显得尤为重要。即使是All In One服务器,功能的解耦也相当重要,应尽量避免因单一功能故障导致的整体崩溃,专业的系统应当做专业的事,而不应该全部集中于某一系统。基于以上的观点,我选择了PVE作为All In One的底层系统,虚拟化Unraid作为Nas系统,硬件则是升级电脑退役下来的旧硬件。
为什么使用PVE而不直接使用Unraid作为底层?
常见的底层系统有:Esxi、PVE、Unraid
PVE是开源的虚拟化平台,与Unraid同样采用kvm虚拟化技术,可以为普通用户提供相比Unraid更高的自由度和更直观的虚拟机管理界面,其基于Debian也可以为用户提供更为广泛且适用的教程,比Esxi更简单易用,比Unraid更专业。且原生支持lxc,lxc是一种类似于Docker的容器技术,可以在服务器上实现更为轻量化的应用,相比虚拟机对资源的消耗低,相比Docker避免了对底层系统的污染,从而实现不错的稳定性。
为什么使用Unraid作为Nas系统?
常见的Nas系统有:黑群晖、Truenas、Unraid
Unraid将硬盘以非raid的形式向用户提供存储空间,这使得用户可以使用不同种类、不同容量的硬盘,同时也能保障数据的安全性,其非raid的存储形式和独有的缓存机制使得数据在读写时仅有部分硬盘工作,其它硬盘休眠,甚至可以实现日常状态下高功耗的HDD全部休眠,仅保留低功耗的SSD工作,在闲时将数据集中回写至HDD中,避免HDD长时间唤醒和短时间多次休眠,相比其它基于raid的Nas系统,可以在家庭场景下实现低成本和低功耗。
这里贴一个 在 PVE 中创建 Unraid 虚拟机并使用虚拟磁盘启动 Unraid 虚拟机 的方法
降低CPU功耗
与常见的使用低功耗CPU不同,我选择从软件上降低CPU的功耗,便于从旧硬件改造为All In One服务器。
另外,我也想在此吐槽选择所谓低功耗CPU这个观点,通常情况下同代CPU架构下,CPU的能效基本相同,而带T的低功耗CPU是通过限制TDP来降低功耗,选择低功耗CPU只会让你花更多的钱买到更低的性能。结尾的展示可以映证这一观点,Arm平台不在这次吐槽范围内。
1. 虚拟机配置
给虚拟机配置合适的资源(CPU、内存),分配给虚拟机的资源不是越多越好,分配的更多资源会增大CPU的负载,可以先分配足够多的资源给虚拟机,再根据实际的占用情况进行缩减。尽量使用直通硬件(网卡、硬盘控制器)或半虚拟化硬件(virtio),虚拟化硬件会增大CPU的负载。
尽量不要运行非Linux内核的系统(Windows、FreeBSD等),虚拟化非Linux内核的系统会增加功耗。(或许是我装过的Windows 10和Truenas core都恰好消耗资源多?)
2024.8.28补充
确认了是Windows 10的问题,换了Windows Server 2019后功耗显著降低
2. 调节CPU频率策略
PVE默认的CPU频率策略为performance
,即高性能模式,这是一种激进的频率策略,会让CPU尽量保持在高频运行。
查看CPU频率策略
1 | # 查看支持的 CPU 电源模式 |
值得注意的是,新旧平台上使用的调频驱动不同,较新平台上使用的调频驱动为pstate
,旧平台上使用的调频驱动cpufreq
。
1 | # 查看调频驱动 |
在这两种驱动下的频率策略不同,在pstate
下可以选择的策略一般只有powersave
和performance
,建议选择powersave
,在cpufreq
下可以选择的策略一般有conservative
、ondemand
、userspace
、powersave
、performance
、schedutil
,建议选择schedutil
或conservative
。在pstate
和cpufreq
下的powersave
并非同一种策略。
不建议新平台禁用pstate
使用cpufreq
驱动,故不在本文中提供方法。
临时调整策略
1 | # 全核性能 |
开机自动调整策略
1 | # 配置默认策略 |
为不同核心配置不同的策略
我们可以将重要的虚拟机进行核心绑定,然后将其调整为performance
以保证关键功能的流畅运行。
在虚拟机-硬件-处理器
配置核心绑定
需要注意的是,应尽量让同一物理核上的逻辑核的调频策略一致,即将核心绑定在同一物理核上。
1 | # 查看逻辑核对应的物理核 |
调整部分核心的策略
1 | # 将CPU7和15调整为性能模式 |
自动调整虚拟机绑定核的策略
利用PVE的钩子脚本可以实现虚拟机开机时调整为性能模式,关机时调整为省电模式。
1 | # 创建脚本 |
有一个问题是不同虚拟机绑定同一核心时会产生影响。
3. 开启CPU的C状态支持
C状态是CPU的睡眠状态,可以使CPU在空闲时睡眠以降低功耗,主板BIOS一般默认开启了部分的C状态支持,进入BIOS可以开启更多的C状态支持,允许CPU进入更深的睡眠状态。需要注意的是,从更深的睡眠状态恢复需要更长时间,请酌情开启。
进入BIOS后,进入CPU配置,开启相关选项,一般位于高级-CPU配置
内
重要!开启前请确认你的CPU是否支持对应选项
4. [可选] CPU降压
效果因人而异,能否降压取决于你的CPU和主板,自行研究。
降低周边设备功耗
周边设备的功耗在待机状态下占比相当大,这部分依然是通过软件调节功耗,我的理念是尽量利用旧硬件,因此硬件选择不在讨论范围内。
1. Unraid设置硬盘休眠和缓存盘
设置-磁盘设置
设置硬盘休眠
添加SSD作为缓存盘
设置常用共享目录优先写入缓存盘设置-计划程序
设置移动器定时回写数据
2. 优化独显待机功耗
由于我的机器没有独显,这一段仅供参考
独立显卡会默认被PVE加载,可以通过在/etc/default/grub
中的GRUB_CMDLINE_LINUX_DEFAULT
加入如下参数来关闭显卡
1 | video=vesafb:off video=efifb:off video=simplefb:off initcall_blacklist=sysfb_init |
加入后我的GRUB_CMDLINE_LINUX_DEFAULT
如下
1 | root@pve:~# cat /etc/default/grub | grep 'GRUB_CMDLINE_LINUX_DEFAULT' |
改完后执行update-grub
更新一下配置文件,然后重启
3. 配置Linux的设备电源管理策略
Linux默认的设备电源管理策略比较奔放,不如Windows和Mac来的精细,不过可以通过命令调整
重要! 脚本中的PCIE设备电源管理默认是注释掉的,因为某些PCIE设备设置电源管理后可能会导致虚拟机无法开机,请确认后再取消注释
1 | # 创建脚本 |
给启动顺序中第一个使用到直通设备的虚拟机设置钩子脚本,比如我的是Unraid,这样就会在虚拟机占用设备之前完成设置
1 | qm set 105 --hookscript local:snippets/device_powersave.sh |
4. 开启PCI Express Native Control和PCIE ASPM Support
开启可提升PCIE设备在操作系统中的节能性能,一般位于主板BIOS的高级-芯片组配置
内
5. 开启SATA主动式链接电源管理
允许SATA设备在不活动期间进入低能耗以达到节能目的,一般位于高级-存储配置
内
成果展示
调整前整机功耗70.2W,CPU功耗18W,调整后整机功耗39W,CPU功耗12W,受限于UPS电源的功耗测量精度,整机功耗误差为±3.9W,降低幅度约为40%,每月可以节省约20度电
调整前
调整后
硬件配置
只罗列了与功耗相关的部分
CPU | i9-11900K ES QV1K |
主板 | 华擎Z590M-ITX/ax |
内存 | 金百达银爵DDR4 16G×2 3200MHz |
网卡 | Intel I219V(板载) |
RTL8125BG(板载) | |
Mellanox MCX4121A | |
硬盘 | 傲腾900P 280G |
三星PM9A1 512G | |
希捷ST4000VX015 4T×4 | |
风扇 | 4090风扇改12018 ×2 |
利民TL-8015W | |
利民TL-B8W | |
电源 | Tt钢影SFX 550W |
运行的虚拟机&容器
虚拟机 | OpenWrt |
Unraid | |
Ubuntu 服务器 | |
黑群晖(嵌套于Unraid内) | |
Clear Linux 测试机 | |
容器 | Ubuntu Docker 环境隔离 |
Alpine SSH 跳板机 | |
Alpine Web 跳板机 | |
Debian Minecraft 服务器 |
2024.8.25补充
智能插座统计的一天下来UPS+AIO的总功耗,AIO有约100GB的文件写入到机械硬盘
参考文章
功耗节能 - 国光的 PVE 环境搭建教程
佛西博客 - Proxmox VE 调节cpu频率
Unraid NAS怎么省电
华擎Z590M-ITX/ax BIOS 设定指南