当一个主板芯片被设计出来以后,工程师们就会不断的开发新的主板驱动,不断的挖掘主板芯片的潜在的性能。那么工程师们调节的是哪里呢?同样的主板芯片,一些主板厂商的独门绝技中,往往有惊人的调节功能,比如降温,打开PAT等,这些其实都是主板芯片本来就支持的。那么这些主板厂商是如何打开这些隐蔽的功能的呢?这就是寄存器的调节。
在这里,我们将会知道通过修改寄存器,我们能优化主板哪些方面的性能。
我们知道目前应用的北桥主要负责CPU、内存总线、AGP总线和PCI总线部分,这样我们就可以针对这几个方面进行相关的优化。
1. 关于CPU的北桥寄存器修改
A. 通过修改北桥寄存器降温
这是很多人都关注的地方,甚至有人把寄存器修改软件做为降温软件来看待。
我们知道,CPU由CMOS电路构成。下面的公式显示了功耗P,CMOS门电容C,开关频率f及供电电压V之间的关系:P=CfV^2,其中,CMOS门电容C为常量。开关频率f和供电电压V可根据实际的应用要求而调整。供电电压V和开关频率f之间的关系为:V正比于f。即更高的开关频率需要更高的供电电压支持。
我们可以看出:从CMOS的角度来看,执行一个指令所需的能耗是相同的,所以降低CMOS频率不能减少耗电量,因为在高的时钟频率下,CPU仅仅是加快了完成工作的速度,但在空闲状态下停留的时间会更长。所以空闲状态的存在是只降低频率无法节约能耗的原因。
如果电压随着频率一起降低,从公式P=CfV^2可以看出,电压的平方V^2与功耗P成正比,降低一点电压,功耗便大大减少。这样,每执行一条指令的能耗就随之降低。为了准确的控制系统运行时与CPU相匹配的电压及频率的动态配比,目前电压控制技术都集成到CPU内部。同时,CPU厂商指定一些操作电压与频率之间的组合配置。
在实际工作中,CPU并非一直处于工作状态,即满负荷(full load),大约有40%的情况下空闲(no load),即空闲模式(Idle Mode)。目前,几乎所有的CPU设计都有空闲模式。当操作系统发现CPU当前没有可执行的任务时,便将CPU置于空闲状态。在空闲模式状态下,可以关闭不需要的时钟,以减少不必要的功耗。
当系统发生中断时,CPU从空闲状态被唤醒。大多数系统都有操作系统计时器中断,这样CPU在一秒钟之内可能几千次地进出空闲状态。CPU时钟的“闲置”通常由“停止”或“闲置”指令触发,在应用或操作系统闲置时进行调用。
目前的降温软件就是通过在CPU空闲时发送HLT(halt)指令,CPU将HLT指令插入指令序列,并停止处理指令序列,直到发生中断为止。
发生中断后,CPU重新回到Normal状态处理指令,处理完中断代码后继续从HLT指令的下一条指令执行,进入Halt模式。这个过程实现起来也很简单,可以做一个最低优先级的任务做死循环处理,系统在空闲时都进入该任务。我然后此任务的循环中加入一条HLT指令即可,这样就实现了Auto Halt模式。
处理器在进入Halt模式后功耗将有所下降,我们在CPU的温度监控上可以看到7度左右的降低,这样在CPU内核应该有10度左右的温降。
提到Halt模式,我们就必须谈另一个相关的概念:S2K。
S2K(S2K,S2K Bus,是源于Alpha 21164/21264的EV6 Bus介面协定,采用点对点Point to Point设计)时序控制寄存器(S2K Timing Control)。实际上,AMD要求后来的北桥芯片在设计上都要通过S2K总线分离技术的认证。
在不损失性能的前提下使CPU在空闲时降低功耗,即前面我们提到的利用HLT指令降低功耗。Disconnect Enable When STPGNT Detected寄存器就对应着这部分。通过寄存器开启S2K Timing Control,当系统总线空闲的时候Disconnect S2K,从而降低CPU功耗。
如下图:
S2K总线分离技术需要北桥芯片组和BIOS的支持。但此技术并不能保证在任何系统上都能正常运行,在早期的主板上可以导致PCI设备不稳定。
这可能是由于北桥芯片在设计上存在缺陷或是主板厂商存在设计或是其他方面的问题,于是处于稳定的考虑,很多主板的BIOS中并没有此选项可以设置。我们需要做的,就是通过寄存器设置,打开北桥芯片对S2K总线分离技术的支持。
B. 通过HALT指令降温是否对系统的执行效率和实时性构成影响
处理器空闲模式仅影响处理器本身,但对系统的其他硬件不产生影响。那么对操作系统时候有影响呢?
我们来看下图:
这是AMD Athlon XP电源管理状态(Power Management States)图。图中有Halt、Probe State、Stop Grant 、Working、Stop Grant Cache Not Snoopable Sleep 等电源模式。其中,Working为CPU正常运行状态。
当系统执行HLT指令,CPU进入Halt 状态,但此时不关闭SMI#, INTR, NMI, INIT# RESET#侦听,当CPU收到在RESET#指令后,同时初始化回到Working状态。在Halt状态下,系统会产生一个 STPCLK#信号,当CPU接收到STPCLK#信号,则进入 Stop-Grant状态,在Stop-Grant状态,RESET#信号会让CPU迅速的初始化。
当 STPCLK#中断后,CPU返回 Halt状态。在 Stop-Grant状态和Halt状态,CPU可以对系统总线发出的snoop事件做出反应。Halt状态对CPU占用率、系统操作的实时性并没有影响。
在Halt状态和非Halt状态,CPU占用率是一样的,因为操作系统计算任务的CPU占用时间时是以任务的上下文切换作为统计触发条件。当任务在执行HLT指令时操作系统并没有进行任务上下文切换,操作系统把CPU 进入Halt状态的这段时间依然认为是被该任务占用的时间。HLT指令对系统的实时性没有影响,并不会引起系统的延迟。
C.关于北桥芯片的散热
目前主板厂商在北桥芯片的散热上通常采用两种方式:一是大散热片,比如ASUS和INTEL的主板。一是风扇加小散热片,采用这样散热方式的厂商很多。
北桥芯片集成的寄存器和晶体管想对于CPU来讲少的很多,运行频率不高,晶体体积也比CPU稍大,裸芯封装。理论上的耐热程度要比CPU高。主板在出厂前都要在高温实验室做老化测试。保证在极端的温度下不出现问题。
通过加装大型散热片同时有CPU风扇的侧风。在主板供电稳定,系统频率稳定的情况下,不会出现过热问题。在INTEL 、NIVDIA 、VIA等芯片厂商的技术白皮书里也没有强调该芯片必须加装风扇才正常工作。这和厂商的设计风格有关。
加装风扇,限与成本的问题,很少采用大厂的优秀的产品。这样风扇的使用寿命和噪音无法控制。同时加大了供电系统的负担。有些情况下是主板厂商故意对北桥芯片进行超频,加压导致热量无法控制,不得不采用主动散热方式。
D.相同散热条件下的CPU,温在不同厂商的主板上温度显示的巨大差异
我们修改北桥寄存器来控制CPU空闲阶段的温升,并没有横向可比性。只是相对于你自己的系统以前的温度来说。相同的散热条件指的是风扇和散热片一样。同一个CPU(外频和倍频不变、CPU电压不变),在主板的BIOS我们把电压设置为AUTO,排除了不同主板电压的差异导致的CPU温度显示的不同,大概在2-3度。这样理论上CPU的温度是一样的。
可是我们看BIOS显示的温度,不同的主板,温度相差最多到了10度以上。让人奇怪的是,某大厂的旗舰KT400主板,CPU为AXDA1800DLT3C JIUHB 0312RPMW OC 2600+,12.5*166=2083MHz电压1.60V在2500转的风扇下,采用某散热厂商的塞铜工艺的铝散热片,温度为33度到36度。比该厂商主板监控软件显示的系统温度40度都低。在这样的条件下,这是不可能的。
我们知道,主板的温度检测主要有两种方法,一是通过CPU插座中的温度探针或热敏电阻;一是根据CPU内置热敏电阻针脚的电压值来确定温度。对于上面我们提到的情况,这是通过 BIOS 的改动来调低CPU温度的显示,而不是CPU温度的实际体现。这种情况在业界是存在的,即使是某些大厂。
我们以常见的Athlon XP来说,在CPU的bottomside view(底部视图)上,S7、U7这个位置的针脚THERMDA、THERMDC为热敏二极管。AMD的CPU核心温度的计算公式为Td=1.029c-0.209Ta-1.3778,其中,Td是核心DIE温度,Ta是环境温度,Tc是主板上的热敏电阻测得的温度,就是我们在BIOS中看到的温度。
我们可以通过主板SocketA上的S7(THERMDA),U7(THERMDC)针脚,接一个电子测温器来直接读出核心的实际的温度。这是最准确的,可以排除厂家在BIOS的温度监测上做的手脚。
E.调节CPU倍频在北桥寄存器上也可以体现出来,但北桥芯片厂商出于稳定性考虑,往往把这一项设置为不可调节。
关于CPU方面的调节还有电压和外频调节。目前几乎所有的主板在BIOS中都可以很方便的调节,不赘述。
2.关于内存的北桥寄存器的修改
A.关于内存设计的几个方面
我们以目前应用广泛的184pin DDR内存为例。
DDR一个很重要的方面就是使用了Delay-Locked Loop (DLL,延时锁定回路即数据琐向环,锁定和调整内部时钟)来提供数据滤波信号(DataStrobe signal)。
数据有效时,存储控制器使用这个数据滤波信号来精确定位数据。每16位做一次输出(内存核心中的I/O寄存器在时钟信号上升沿时输出8位数据,在下降沿同样输出8位数据,数据在时钟的上升沿和下降沿都可以读取),并且同步来自不同的双存储器模块的数据。
DQS(Bi-directional Data Strobe双向数据控制引脚)指针在读周期由DDR发送,在写周期由控制器发送。
输入输出数据均参照DQS信号,用于数据对齐。DDR DRAM以差动时钟信号工作,使噪音干扰最小。 同时,DDR让内存控制器每一组DQ/DQS/DM与DIMM上的颗粒相接时,维持相同的负载,这样就减少了对主板的影响。
每个DIMM(DIMM,Dual In-line Memory Module双面引脚内存)槽最大支持的内存数值为寻址空间乘数据宽度。理论上,每个DIMM槽支持最大容量:4GB = 214 x 214 x 8 Byte。限于内存颗粒制造工艺,目前常用的DIMM槽的内存容量最大为1GB。
内存引脚分为:地址引脚、数据引脚(包含校验位引脚)、片选等控制信号、时钟信号。其中REGE引脚即为寄存器 (Registered) 允许信号。
B.SPD
SPD(SPD Serial Presence Detect 内存序列存储芯片),是8针TSSOP(Plastic Thin Small Outline Package)封装的串行存储EEPROM,容量2048bit。厂商用于存储内存芯片临界时钟参数、厂商参数相关特征参数。主板芯片组能通过SPD来准确设定内存工作状态。每个DIMM的SPD数据读写时钟线SCL和数据线SDA共享一条总线。
在每次读取该EEPROM的时,北桥芯片先向该芯片发送3位片选信号和8位地址信息。然后经过多条DIMM上的SPD信息协调,然后所选DIMM上的内存SPD芯片的信息就会被记录在北桥内存控制器的寄存器(Register)中。
C.Registered内存
标准化协会定义了两种DDR内存。一种是无缓冲DDR DIMM,主要应用在PC上。另一种是缓冲DDR DIMM,将PCB上PLL(Phase Locked Loop,锁相环,调节时序、增加时钟驱动力)与缓存寄存器(Register)结合在一起,解决了在服务器应用中随着DIMM槽的增多,内存系统各个引脚间的引线长度会产生较大差别,从而导致信号时序会产生错位的问题。
原理很简单,通过在内存上添加锁相环电路和寄存器,这样内存控制信号直接针对寄存器而不必直接针对数量庞大的内存芯片。降低了控制芯片负载,提高信号的质量,保证了数据同步。增强了系统的稳定性,但对于单个的读写访问,会滞后一个时钟周期。
如下图,内存寄存器和锁相环电路:
Register芯片的时钟信号由PLL提供。PLL有一个时钟输入,一个Feedback反馈输入,数个时钟输出和一个Feedback反馈输出。通过调节FBin和SDRAM的时钟相位差为零,使PLL时钟输入端和SDRAM的时钟输入端的相位差为零。PLL的两个输入间延迟为零,即FBin、CKin之间的相位差为零。同时所有输出(包括FBout之间)的相位差都为零。
Register芯片时钟输入相位与SDRAM时钟输入相位的延迟,可以调节PLL到Register的走线长度和输入电容来确保正常的地址、控制信号采样。这两个时钟间的延迟在设计设计过程中可以根据实际情况做出控制优化。Register芯片的时钟输入相位,在Raw card的设计中一般置为与SDRAM的时钟输入相位相同。
PLL电路对主板产生的时钟信号进行跟踪、锁定,使主板时钟电路与内存模组保持同步,同时确保信号驱动寄存器和内存芯片不产生时钟漂移。
例如,在AMD 760MPX芯片组搭建的SMP系统中,可以通过调节北桥中内存控制电路寄存器关于ECC的设置,来决定采用普通DDR内存还是采用Registered内存。
3.关于AGP的北桥寄存器修改
AGP(Accelerated Graphics Port)加速图形端口,是PCI技术标准的扩充,在北桥芯片中包含对应的AGP控制器部分。如下图分别为AGP显卡的AGP控制图示和AGP的与北桥相连的走线图。
AGP显卡的AGP控制图示
我们通过修改北桥寄存器对应的AGP控制部分,可以更改AGP快写方式、AGP aperture(孔径)、AGP边带寻址等参数,达到优化显示系统的目的。