前言:全核心最大睿频与工作原理
上篇中说,通过测试得出E5-v3是不能通过手动调节倍频的方式锁定到最大睿频。而实际上有人眉头一皱,发现事情并不单纯。。。
结果E5-v3系列的一个勘误被发现了。我们知道,Haswell的桌面级cpu,如i5-4570,在早期bios中可以手动将全部核心锁定在最大睿频运行。虽然随后intel马上发布微码更新修复了这个漏洞,但是估计那时候Haswell-EP处理器已经完工了,所以Intel没有在cpu内部解决这个问题而是通过微码更新进行限制。
我们首先了解一下睿频方面。CPU频率=基频(BCLK,默认100MHz)×倍频。现在的intel cpu一般基频都默认在100MHz(0.1GHz),频率调节主要靠调节倍频来进行。
一般状况下,CPU频率最低只能降到LFM(此例为1.2GHz),只有在c6、c7休眠或者触发过热保护的时候可能会降到LPM(0.8GHz)。HFM就是默认频率(也就是刻在顶盖上的频率)。而现在i5以上的cpu都具有turboboost自动升频功能,也自然有了一个turbo倍频。在Haswell-E/EP处理器中,这些睿频倍频信息会被存放在MSR寄存器的0x1AD、0x1AE、0x1AF地址中。
然而cpu能否调节倍频、能调节多少还取决于MSR 0x194地址。其中记录着睿频电压调节、最大默认频率、相对默认频率可超频的倍频数量(如4代表可超频4个倍频)与是否锁定睿频倍频等数据。
一旦你在bios里设置的倍频大于HFM(默认倍频),也就是上图中黄色与红色的区域,系统就会判定你在对cpu进行超频,设置的倍频也会被加载进管理睿频的0x1AD、0x1AE、0x1AF地址中。而如果你设置一个低于默频的值,那么你的频率信息会被存放在0x194中,而睿频也自动清零。所以说,现在的intel cpu超频实际上还是利用了睿频功能。
问题就出在这里。E5-v3系列处理器出现了这样一个漏洞:你可以直接先自己设置好睿频的地址并且让0x194寄存器锁定它。这样,我们就能手动设置处理器的睿频数值,而不被微码打回原形。
这是一个判定的问题。最初Intel仅仅锁定了最大可设置的睿频数值,而关于占用多个核心时睿频的默认值与设置值的判定E5-v3系列仅通过微码解决。但是CPU初始化是不需要微码的。如果我们把微码删掉,或者延迟加载,我们不就可以先锁定好自己的睿频,让微码无可奈何么?要知道,E5-v3系列大部分型号多核心睿频远远低于单双核心睿频。提升多核心睿频造成的性能提升还是相当可观的。
照着这个思路,我们开始吧。首先,我们需要准备这些东西:1. E5-v3系列处理器与2011-3接口的主板(v4、v2、v1没有这个漏洞,故不支持)2. 主板的原版BIOS文件3. 任意一款HEX Editor(个人使用的hex editor neo将放在网盘中,也可以使用其他工具)4. RW Everything(网盘)5. UEFI BIOS Updator或UEFItool+MMtool(网盘)6. (可选)个人转制的BIOS ffs模块(网盘)7. (可选)EFI驱动(网盘)8. (可选,推荐)SPI编程器9. CPUmcupdate及微码包(网盘)
- 链接:https://pan.baidu.com/s/1sYLRvDVR5gTisF__atQcLw 密码:agxi
第一步:删除原有微码
2.1 法1:使用UEFI BIOSUpdater(UBU)
首先,解压ubu软件,把BIOS文件复制到UBU的根目录,然后打开UBU.bat。
UBU会消耗一段时间来解包bios文件,完成后按回车进入主菜单。按7(升级微码),再按1(为haswell-e、broadwell-e升级微码)。到达下图的界面时,在选择haswell-e微码时选择0跳过,选择broadwell-e微码时随便选一个(为了让UBU强制执行把haswell微码清空的操作,否则它可能完全什么事都不干)。完成后保存文件退出即可。
2.2 法2:使用MMTool
上面那种方法较为复杂,而且有些时候它连Broadwell-e微码更新页都不给你。。。其实本质上它也是利用了MMTool进行操作。如果仅仅要删除微码的话,直接用MMTool会简单不少。
实际上根本不需要什么操作。UBU文件夹里会有一个MMTool.exe文件,用管理员身份运行它。用它加载你的bios文件,转到“cpu patch”选项卡,把里面的微码全部删光就可以保存了。当然,platform type为EF的微码可以留着,以后换E5-v4之类broadwell-e/ep cpu可能用上。
2.3 法3:HEX edit(专治疑难杂症)
上面那两种方法实际上都是基于MMTool操作的。所以,在比较新的APTIO5的bios上(如华硕较新的x99平台),MMTool可能在修改微码时出现bug。
当然,保存出来的文件也是0B大小的空文件,根本无法使用。这时,我们需要学聪明点。首先,我们需要知道我们需要优化的处理器正在用BIOS里的哪个微码。安装RW Everything,这个工具可以提取各个寄存器上的信息,比如之前修改内存SPD文件就是用它进行导入导出的。
打开后单击上面一排图标中的“MSR”,看CPU ID那一行,配合MMTool里BIOS微码的信息,应该很容易知道你的CPU正在用哪一个微码吧?此例子中,我们需要的是“06F2”的这两个微码。
虽然不能直接删除bios文件中的微码,但是解压还是可以解压的。我们先把这两个微码提取出来保存成2个文件。比如右边的MC1_06F2就是第一个微码的文件。
是时候动用HEX Editor了。我们用HEX Editor打开保存的文件,会看到很多16进制字符。
不要问我这些字符是什么意思,估计干了10年的黑客也不一定能直接读出这些数值的意义。。。我们要做的仅仅是根据这些值定位这个微码在BIOS文件中的位置。
同样在UBU的文件夹里,找到UEFITool,用它打开你的BIOS文件。按ctrl+F打开搜索框,把刚刚HEX Editor里的第一行复制到搜索框里进行搜索。
搜索结果会在底下的“messages”框中显示。双击每一个找到的结果,并右击这些结果选择“extract body”将其保存出来。有多少个结果就保存多少个文件,此例中为2个文件。
用HEX Editor 打开其中一个文件,对照RW Everything中CPU MSR对话框中的CPU ID那一栏,你发现了什么?显然,保存出来的这个含有微码的文件中,第一行的最后4个数值就代表着这个微码对应的CPU ID,只不过是倒序而已(放心,我扒了十几个不同cpu的微码了,都是这个规律)。
接下来,我们修改其中一个数值,比如把F2改成F4。这样BIOS在加载微码时会天然呆的认为“你的CPU是000306F2不是000306F4啊,这个微码和CPU不匹配”,从而不加载这个微码。这样,我们的目的——让BIOS不为CPU加载微码,就达成了。
记得之前导出的2个模块文件都需要修改并保存。切记不要直接删除模块中微码的所有数据,更不要删除整个文件,否则系统很可能直接过不了自检。。。
保存完记得把这两个模块导入回去。切回UEFITool,在刚刚找到的那两个模块那里分别右键选择“replace body”,把对应的改好的文件替换进去。之后保存BIOS文件。
用MMTool打开改好的BIOS文件确认一下,CPU Patch那一栏,原来的微码要不然已经变成了“06F4”,要不然消失。这样,一个没有微码的BIOS就制作成功了。
我们可以用厂商自己的工具进行刷入,也可以用编程器刷入。华硕这种有校验的主板可以用主板的BIOS Flashback功能。用这样的BIOS启动系统,我们就可以在开机时先设置好倍频,进入系统以后再加载微码,从而设定更高的多核心睿频。当然,如果你要用到第二步的方法3,请暂时不要刷入,下一步修改完成再刷。
第二步:提升频率
3.1 法1:将驱动加入EFI引导区
主要思路就是,首先做一个可以启动EFIShell的U盘,用它启动后使用命令将V3.EFI驱动加入系统EFI启动分区,使之开机启动。见下面这贴的53-62楼。网盘里给出的EFI驱动自带微码,整合完成后可以跳过第三步。
https://forums.anandtech.com/threads/what-controls-turbo-core-in-xeons.2496647/page-3
这种方法比较复杂,不能用于传统引导的操作系统,还可能遇到睡眠后由于MSR寄存器重置导致无法唤醒的问题。所以建议用下面这两种方法。
3.2 法2:超频法
之前说过,这个漏洞使得在没有加载微码时多核心倍频可以随意手动设置。那么,我们为什么需要这个模块呢?直接超频不就行了? 和之前I5获得倍频福利的方法一样,直接在bios中手动把所有核心使用的倍频设置成最大睿频,搞定。。。
这种方法和超频一样相当无害,BIOS设置在自检后已经确定,如果cpu稳定的话,这种设置不会引发各种奇怪的问题。毕竟大部分主板设计时已经考虑到超频的情况。当然,由于MSR寄存器的机制,你仍然是不可以设置超过最大睿频的数值的。
不过,对于某些服务器主板,它们根本没有倍频调节选项。而对于另一些BIOS编写比较差的主板,可能它们对E5处理器在加载睿频时并不会加载设置值。在超频法无法实施时,我们需要手动加入一个驱动模块,让BIOS直接加载最优的预设。
3.3 法3: ffs驱动模块法
根据dufus制作的的EFI驱动程序,其实就是将所有核心的睿频锁定在最大睿频上。为了让它在系统启动时运行我们需要把它加入系统的EFI引导区。然而现在的UEFI BIOS界面也就是建立在自带的一个微型操作系统上,我们为何不把这个EFI驱动直接放进BIOS里呢?这样其在开机时即可启动,之后就可以自由加载非EFI引导的系统了,重装系统时这个驱动也不会消失。
我转制了一个ffs模块。这个模块可以在开机时直接加载最大睿频。使用方法很简单。使用MMTool打开你已经去除微码的BIOS文件,拉动滚动条浏览下面的方框,找到CsmDxe或者CoreDxe。
单击这个模块,你会发现在上面的Vol.Index中会自动填入一个数值。这时浏览并选择给出的V3.ffs文件,点击右下方的“insert”插入并保存即可。如果你的CPU是早期的ES版本,加入V3.ffs会出现问题或者什么都没发生,请加入压缩包中另一个模块:V3_1.ffs
第三步:性能/稳定性优化
4.1 TDP限制与睿频
改造成功以后,很多玩家可能发现,在实际带载的时候CPU睿频可能会比较低,仍然没有达到最大睿频。或者睿频本身会波动。这个现象很正常,是由于多放因素所致。比如在大量运用AVX、FMA3指令集的时候CPU睿频会有一个offset来控制爆发的功耗;又如睿频本身就有时间和峰值功耗限制.
对于E5-v3处理器,AVXoffset这2-4个倍频我们无法拿到。长期的TDP墙也没法破除。但是,至少我们可以尽量让CPU工作在更高的频率。
首先我们可以设置一下睿频的功耗参数和持续时间。比如下图的睿频时间和功率设置方案。这样,至少在127秒内,CPU受到TDP因素影响会减小,所有核心稳定在3.1GHz。而且就算超过127秒,只要轻载CD几秒,你又有127秒的“技能时间”可以用。
另外,降低CPU核心电压也可以直接降低cpu功耗,从而减少撞墙的时间。建议要求比较极限的用户offset模式慢慢手动调节。
4.2 可靠性
首先要注意到,mod过以后你的BIOS肯定是没有加载微码的。这样自然也就无法应用后期intel对cpu bug的修复,如intel在后期bios中移除了带有bug的TSX指令集。这个问题处理方法很简单,操作系统本身是可以加载微码的。我在网盘中也提供了相应的工具。
当然,其他方面的问题比如散热要求更高、多核睿频上来了,电压相比频率低时,可能需要手动加一些才能稳定。而增加电压又会使功耗升高、更容易撞到功耗墙。这种权衡工作还是你自己去做吧。
可能出现的问题及解决方法
5.1 保存的文件拓展名改变
MMTool、UEFItool可能保存出来的文件是FD格式,手动改一下拓展名就可以了。注意,改之前是什么格式改过以后就得是什么格式,cap保存出来必须是cap,bin/rom必须是bin/rom。否则很可能会把你的主板刷成砖,需要用编程器救砖。
其实,这种bios文件主要分为2种。Bin、rom直接是程序bit信息可以直接互改拓展名,而cap这种“胶囊文件”除了BIOS信息外在开始处还带一个文件头用于存储签名和校验信息。所以cap是可以直接转换成bin的。转换后即可直接用编程器刷入。网盘里附有cap转bin的工具。
注意,有时候厂商会把BIOS的拓展名改得很奇怪,比如.30、.40这种。这是你只需要注意,右击文件打开属性,如果文件大小恰好是2的整数次方,如8338608B、16777216B,这个文件就是bin类型的;如果比2的整数次方稍大一点那就是cap类型。这时直接改拓展名成cap或者bin处理即可,要刷的时候再改回来.
5.2 flashback等工具无法刷入
在刷新编辑好的BIOS的时候,有些玩家会遇到刷新工具提示错误拒绝刷新的情况。如果你的BIOS是上面所说的bin类型(大小是2的整数次方倍),那么一般是文件名问题,把原厂BIOS名包括拓展名复制到新文件上再刷就行。
然而cap类型(大小不是2的整数次方倍),情况会复杂一些。因为这种类型的BIOS带一个文件头,在刷入时工具会验证文件签名甚至进行类似XOR的校验。这时候我们就需要对BIOS文件头加以修改。
以华硕X99主板的BIOS为例,首先,我们看到,保存出来的cap文件大小并不是2的整数次方倍,而是比16MB(1677216B)大2048B:
我们用HEX Editor打开这个修改过(没有签名)文件,同时打开一个原厂的bios。你应该能看到它们有什么区别吧?其中很多位都是空的(ff)
按2048B的文件头算,前00000800行是文件头。但是要骗过华硕的BIOS flashback,我们只需要把前00000240行从官方BIOS复制过去就行了。
然后保存即可。如果不放心,可以把第一行直到00000800行都复制过去。华擎等类似的cap类型的BIOS文件也可以这么操作。
注意刷入的时候尽量选择不可能进行整个文件校验的方法,如华硕的BIOS Flashback。具体方法可以参考主板的说明书。如果你发现主板厂商提供的所有工具都无法刷新,那么你只能购买一个编程器进行刷新了。个人推荐喜欢折腾的玩家必备一个编程器,插上即刷操作简单,可以减少不少折腾上的困难,二三十的价格也不算贵,但是它可以在你的主板、路由器被刷成砖的时候救它们一命。
5.3 无法开机
首先,制作一个已经去除微码但是没有加入ffs文件的BIOS进行排查。如果仍然不能通过自检,那么你的cpu可能是那种没有微码过不了自检的特殊ES版本。如果你的操作没有问题,基本可以说这颗cpu无缘福利了。 如果没有微码可以启动,那么可以试试换成V3_1.ffs这个模块。
5.4 睿频未变、过低或不稳定
如果睿频完全没有变化,首先检查BIOS内CPU设置选项里有没有显示微码存在。如果没有,请检查改好的BIOS文件里是否成功加入了V3模块。也可以试试换成V3_1.ffs这个模块。
如果睿频非常低或者不稳定,请参照第三步,将睿频时间和功率设置为更大的值。另外,先使用没有大量使用avx指令集的工具进行测试,如aida64 单选CPU,x265的no avx选项。
5.5 睡眠唤醒错误或恢复默认频率
这个问题在第二步选用将EFI文件加入系统引导区的方法时似乎很常见。这是由于睡眠恢复时MSR寄存器将从BIOS里重新读取数值。这样要不然恢复默认频率要不然出错卡死,基本无解。最好还是换成其他2种方法,或者在电源选项里禁用睡眠。
如果在使用其他方法时出现这种问题,这基本可以归结为传统意义上的超频问题——负载变化较大时供电电压会出现瞬间的大纹波,导致cpu无法稳定运行。关闭一些节能(如cstate、eist)或者加一些压即可。
总结
不说传闻的这个漏洞是不是intel透出来的,它的确改变了一部分市场——原来有些人屯的E5-2698A v3这种多核睿频高的CPU现在基本没有与其价格对等的价值了。但是最大睿频高的CPU非常贵,这一点并没有改变。然而,E5解放全核心睿频后性能增加可以达到30%左右,按全部核心都使用来算性价比已经超过AMD R7系列。
但是不要忘了,AMD之前对战intel的大杀器就是“开核”。R5系列处理器也是R7系列屏蔽核心而成,说不准真能开核呢?这样一来市场可能陷入到“E5v3超频对战AMD开核”的谐星状态。。。
然而R7系列仍然有购买的价值。首先,桌面高负载应用,如DX12游戏,用到8核心已经到顶,指望增加核心来提升性能基本无果。这样R7就能用4G以上的频率打败提升睿频后的E5。相对于可能可以开核的R5,其具有更高的体质和稳定性。另外别忘了,桌面级的X399平台和16核心R7马上就要杀到。
然而很多玩家仍然会选择E5处理器,因为目前其性价比真的不错。关于具体选什么型号的问题,方向和以前基本一致——如果你需要组渲染机、视频处理机,首先查看核心较多的cpu,然后尽量选择最大睿频较高的。高成本的2696、2683、2686,低成本的2629、2622、2618L这些都是还不错的选择。具体请按照之前给出的E5-26xx v3规格总览慢慢查找。如果你要组游戏机,那么桌面级的R7、I5比E5来的更合适。尽量不要选择ES不显的版本,修改起来可能遇到麻烦不说,自身的bug也可能对使用造成影响。同时,如果功力不够深厚,也不建议图便宜选择工包主板。在高功耗下主板暗病更容易暴露出来,更不要说x宝充斥着各种打孔划线报废返修货。毕竟电脑不管是拿来用还是拿来玩的,用起来、玩起来安心舒服很重要,必要时我们也不希望它罢工。
对于这种调节全核心睿频方法,请理性使用,因为修改过以后处理器工作在out of specification状态,也就属于超频。自然,超频存在的不稳定、高供电需求的问题虽然不大但是仍然存在。对于我这种默认党自然是刷回去使用,毕竟原本的性能也够了。如果你没有性能的瓶颈并且不是出于折腾着玩考虑,最好还是别随便作死。
参考文献
What controls Turbo Core inXeons?(P1-P3) –Dufus, the stiltAdding a driver to a UEFI firmware -Pete BatardE5V3全核满血睿频简易教程个人版,X99&C612主板均可使用! -canonkong