https://zhuanlan.zhihu.com/p/260820308
我们知道,因特尔的睿频技术,其实就是官方的超频。今天我们来看一下全核睿频时,XEON E5 V3有多大的能耐!
XEON E5 2678V3,这个CPU在某宝上,现在只要500多RMB了。2678V3其实参数和2680V3一样,应该是某个厂家的定制版本。INTEL官方网站找不到此CPU的介绍。
它的官方参数是如下:
12核心24线程,2014年Q3开卖,到现在已经有6年了。不过看核心数,也是吊打现在的家用U。
洋垃圾最被人诟病的就是打游戏不行,因为玩游戏需要的是单核心性能(其实应该说,游戏引擎的多核心优化不行)。而这个CPU的基础频率是2.5GHz,能睿频3.3GHz。但是!这个3.3GHz也是有水分的。为什么呢?
看一下XEON E5 V3的文档,如下:
是的,这个CPU在2个核心以下时才能睿频到3.3GHz,5个核心以上,只能睿频到2.9GHz了。幸好,这个V3系列的CPU有ERRATA,可以通过一系列操作达到全核心最大睿频频率。
任何硬件都有可能出现设计缺陷。厂家为了避免某个小缺陷导致硬件召回,设计了可以通过升级软件的方式来规避。当然,怎么设计能升级的硬件构架,也是比较复杂的。
主板可以通过升级BIOS来解决问题,那么CPU一样有办法升级固件。不过由于CPU没有设计持续存储单元,它的固件,也就是微码,需要主板BIOS来打补丁。另外,如果主办加载的微码补丁版本低,操作系统也可以动态加载新版本的微码。
微码的版本可以在BIOS看到。比如超微主板的BIOS
CPU配置这里显示 Mcirocode Revision为0000007。
操作系统中查看的话,FreeBSD中可以通过x86info来看。
root@vmhost239:~ # x86info -a | grep -e Microcode -e Intel
Processor name string (BIOS programmed): Intel(R) Xeon(R) CPU E5-2687W v3 @ 3.10GHz
Microcode version: 0x0000000000000043
回到我们的主题,XEON E5 V3的CPU,如果微码低于版本0x19,那么可以通过设置MSR寄存器来让全核睿频。具体的原理,可以参考这个论坛的帖子:
CPU加电时,没有微码。然后BIOS初始化时给CPU打微码。一旦微码打上了之后,你再设置MSR寄存器就不好用了。
说道BIOS给CPU打微码,那么BIOS是怎么识别不同种类的CPU呢?
原来CPU有一个ID。比如FreeBSD的dmesg中
CPU: Intel(R) Xeon(R) CPU E5-2687W v3 @ 3.10GHz (3100.07-MHz K8-class CPU)
Origin="GenuineIntel" Id=0x306f2 Family=0x6 Model=0x3f Stepping=2
Features=0xbfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE>
Features2=0x7ffefbff<SSE3,PCLMULQDQ,DTES64,MON,DS_CPL,VMX,SMX,EST,TM2,SSSE3,SDBG,FMA,CX16,xTPR,PDCM,PCID,DCA,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT,TSCDLT,AESNI,XSAVE,OSXSAVE,AVX,F16C,RDRAND>
AMD Features=0x2c100800<SYSCALL,NX,Page1GB,RDTSCP,LM>
AMD Features2=0x21<LAHF,ABM>
Structured Extended Features=0x37ab<FSGSBASE,TSCADJ,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,PQM,NFPUSG>
Structured Extended Features3=0x9c000400<MD_CLEAR,IBPB,STIBP,L1DFL,SSBD>
XSAVE Features=0x1<XSAVEOPT>
VT-x: PAT,HLT,MTF,PAUSE,EPT,UG,VPID,VID,PostIntr
TSC: P-state invariant, performance statistics
ID=0x306f2
BIOS中,有不同CPU的微码,ID匹配时就打上。
好了,总结一下,为了实现XEON E5 V3CPU的全核睿频,需要做如下步骤:
通过上面这些操作,我们就达到全核心睿频的目的。
上面这个图就是XEON E5 V3的全核睿频的结果。
下面我们来逐步讲解如何达到上面4个步骤。
你可能觉得这两者不一样么?不一样的。为了实现2,你必须有工具删除掉微码。而实现1则不需要工具,只需要一个二进制编辑器即可。
我们来说一下如何实现2。我们用二进制编辑器HxD打开超微X10SRH的BIOS,找到F2 06 03
然后将03改成05即可。另外将另一处03改成01。为什么这么做?因为BIOS文件有简单的校验。随意改的话,可能BIOS校验过不去。
是的,http://github.com上有人写了专门的EFI代码
在EFI shell中执行这个代码即可。但是怎么将它集成到BIOS中,实现BIOS自动调用?BIOS无法直接加载EFI代码,但是可以通过将EFI代码转成ffs驱动注入到BIOS中。
因为这个破解,如果CPU休眠之后唤醒时,MSR没重新写,导致系统异常。所以需要关闭BIOS的C3/C6。这个可以通过BIOS修改达到目的。
刚才也说了,Windows自己会自动打,我们不用管就行。如果是Linux/FreeBSD的话,则需要启动打微码软件。在系统启动时打微码。
好了,全核睿频的性能如何?我们简单看一下
蓝色是全核睿频XEON E5 2678V3的成绩,紫色是i7 10700。
单核性能差一些之外,多核性能是差不多的。
考虑到2678是6年前的U,能达到这个性能相当不错了。
如果你动心了,可以去某宝弄一颗玩玩,多核心跑虚拟机真香!