lisaac/blog

精粤 bios 魔改负载曲线 loadline 实现降压记录

Opened this issue · 0 comments

Allinboom

最近升级 nas 到 allinboom,计划在 pve 上面部署:

  • lxc(docker) 提供简单 nas 服务
  • vm0(win11 sriov hd770) 用于远程办公
  • vm1(win10 passthrough rx6600) 当 pc 使用
  • vm3(openwrt gateway) 用作旁路网关
  • ...

cpu 是海鲜市场入的 Q0WH(13500 ES2),主要看到这个u没有13代e核电压高的bug,看到相关评测,整机功耗也比较低(后面才知道搭配精粤有坑)。

机箱是b站老鸽的见方,6盘位 matx 机箱,支持全高 pcie,allinone 理想选择,现在看来槽点是有的,atx电源貌似支持非模组,显卡散热比较坑,需要自己改造。目前箱子还没收到,等收到了看看怎么改造。

主板是精粤 B760M Snow Dream,原因也很简单--家境贫寒。

功耗测试

装机完成后,例行对整机功耗进行了测试,带上3个ssd,没装显卡的情况下,使用功率计进行测试,整机待机输入功率33w左右,单烤 fpu 整机输入功率185w+。

电压调整

着手就调整核心电压,进入 bios,对 offset 电压进行调整,调成-150 降压,重启开机后,然而没有什么效果。

查阅了一下资料,发现精粤调整电压是没用的,只能调整平台电压覆写,于是调整平台电压覆写之后,单烤 fpu 从原来的 185w 降到了 140w 左右,效果显著。然而发现待机功耗从原来的 33w 提升到了 50w 左右,这对 24/7 开机的 AIO 是不能接受的。

AC/DC loadline

有进行一番搜索,发现针对精粤主板和非k处理器,只有调整 AC/DC loadline 才能进行降压。然而,精粤的 bios 早在23年1月份开始就加入了「负载曲线」功能,且隐藏了核心 AC/DC loadline 菜单。而且 22 年的bios 不是针对 B760M Snow Dream 的,也不敢轻易刷入。

BIOS MOD

于是想到了对现在的 bios 进行修将 核心 AC/DC loadline 菜单显示回来,操作方法也不难,参照 uefi-editor 即可对隐藏的菜单显示回来。
这是个通用操作,其他 bios 有被隐藏的菜单,也可以通过这个方法取消隐藏:

  • 使用 uefitool 打开 bios 文件
  • 搜索关键词 ac loadline
uefitool_search_ac_loadline
  • 双击下面搜索结果中的 ac loadline
uefitool_search_ac_loadline_result
  • 右键 PE32 image section 选择 extract as is..
uefitool_setup_extract
./ifrextractor Section_PE32_image_Setup_Setup.sct verbose
# windows 下使用:ifrextractor.exe "Section_PE32_image_Setup_Setup.sct" verbose
  • 在当前展开部分的区域往下查找,找到 AMITSEsetupdata(据说有时候都在 AMISET 下面),在 AMITSE 下找到并右键 PE32 image section 选择 Extract as is..,保存「.sct文件」,在 setupdata 下找到并右键 setupdata 选择 extract body..
uefitool_amiset_extract uefitool_setupdata_extract
  • 此时,打开 uefi-editor 将刚刚的 4个文件导入浏览器,浏览器会进行解析并提供菜单
  • 在搜索中输入 ac loadline
uefi_editor_search
  • 点击 Core/IA VR Settings(因为只有核心的菜单被隐藏了),可以看到 AC/DC loadline 的菜单了,点击 Suppress If 中的内容就可取消隐藏。
uefi_editor_ac_loadline uefi_editor_suppress_if
  • 修改完成后,点击上面下载 UEFI files,就可以得到,修改后的 Section_PE32_image_Setup_Setup.sct 文件
  • 使用 uefitool 0.28.0(必须使用这个版本),打开之前的精粤bios文件
  • 搜索关键词 ac loadline,就像之前一样
  • 双击下面搜索结果中的 ac loadline,就像之前一样
  • 右键 PE32 image section 选择 replace as is..,打开刚刚修改完成的Section_PE32_image_Setup_Setup.sct 文件
uefitool_0 28 0_replace_setup
  • 点击 file -> save image file.. 保存 bios,完事。

一顿操作之后,把 bios 刷入主板之后,终于看到了 AC/DC loadline 菜单,进行一番调整,重启进 bios 一看:
jginyue_b760m_sd_bios_acdc_loadline

傻眼了,current AC/DC loadline 的值说明了修改的确生效了,但是,AC/DC loadline 的内容已经被改回了 100(由于我之前将负载曲线设置成了2)!!进入系统后发现,的确降压也生效了,待机从原来的33w降到28w左右,单烤fpu 也是从185w 降到140w。但是,重启后,current AC/DC loadline 已经变回 100 了~~

看来是有什么设置每次启动的时候将 AC/DC loadline 的值覆盖了,又是一番折腾之后,发现是「负载曲线」搞得鬼!!

精粤的「负载曲线」有 7 档:自动/1/2/3/4/5/6,就是简单的在启动的时候赋值给 AC/DC loadline:

  • 自动(0): 110
  • 1:90
  • 2:100
  • 3:120
  • 4:130
  • 5:140
  • 6:150

这TM也太坑了,难怪加入了「负载曲线」后的 bios 都隐藏了 AC/DC loadline 菜单。。

Fuck 「负载曲线」

现在唯一的障碍就是干掉负载曲线这个功能了,我也咨询了精粤相关客服及QQ群,给到的回复都是没有办法,并给到一句期待后续更新,石沉大海。

是时候好好折腾一番了,此处省略一万字,终于搞出来了,以下操作都是在精粤B760m Snow Dream 2023-04-26 104微码 bios为例, 下面是方法:

  • 使用 uefitool 打开精粤 bios 文件
  • 搜索 oemdxe
  • 双击下面搜索结果中的 oemdxe
  • 右键 PE32 image section 选择 extract body..
uefitool_oemdxe_extract
  • 使用 ida free 反编译导出的 「.efi文件」
  • 找到 text0000000000000A16 位置(仅适用于精粤 B760m Snow Dream),这个位置是不一定的,每块精粤主板的 bios 甚至每个版本的 bios 位置都不同,主要是找到「负载曲线」覆写 AC/DC loadline 的那一段
ida_change_bytes
  • 在菜单中找到 edit->patch program->change byte 将最签名两个字节改为 E9 A8E9 代表 JMP 指令,A8 则是需要跳转的位置,需要根据 bios 内的程序自己确定,用于跳出这个程序块。修改在此处的作用,如果「负载曲线」的值为「自动」,就绕过了「负载曲线」,而如果值为「1-6」,则还是按照原来的逻辑,覆写 AC/DC loadline。这里没有完全关闭「负载曲线」功能,是防止万一需要它。所以这样修改之后要手动调整 AC/DC loadline,「负载曲线」就必须设置成「自动」
ida_patch_bytes
  • 在菜单中找到 edit -> patch program -> apply patches to input file.. 将「.efi文件」保存
ida_apply_patches
  • 使用 uefitool 0.28.0(必须使用这个版本),打开之前的精粤bios文件
  • 搜索 oemdxe ,双击下面搜索结果中的 oemdxe,就跟刚才一样
  • 右键 PE32 image section 选择 replace body.. 此处选择刚刚经 ida 修改的 「.efi文件」
uefitool_0 28 0_replace_oemdxe
  • 搜索 loadline ,双击下面搜索结果中的 ac loadline, 就跟刚才一样
  • 右键 PE32 image section 选择 replace as is.. 此处选择刚刚 BIOS MOD中修改后将 AC/DC loadline 菜单显示出来的 「Section_PE32_image_Setup_Setup.sct」
uefitool_0 28 0_replace_setup
  • 点击 file -> save image file.. 保存 bios,完事。

刷入bios后,最好重置一下cmos,就可以愉快的调整 AC/DC loadline 来实现降压了
jginyue_b760m_sd_bios_mod_acdc_loadline
hwinfo64