第3章 Apple内幕   Apple于1994年发起了从68K硬件平台向PowerPC的迁移。在接下来的两年内, Apple的整个计算机系列都迁移到了PowerPC。在任何给定时间可用的各个基于PowerPC的Apple计算机家族通常在计算机体系结构①、使用的特定处理器以及处理器供应商方面有所区别。例如,在2003年10月推出G4 iBook以前,Apple当时最新的系统包括三代PowerPC:G3、G4和G5。其中G4处理器系列是由Motorola提供的,而G3和G5则来自IBM。表3-1列出了Apple使用的多个PowerPC处理器②。 表3-1 基于PowerPC的Apple系统中使用的处理器 处 理 器 推 出 时 间 停止使用时间 PowerPC 601 1994年3月 1996年6月 PowerPC 603 1995年4月 1996年5月 PowerPC 603e 1996年4月 1998年8月 PowerPC 604 1995年8月 1998年4月 PowerPC 604e 1996年8月 1998年9月 PowerPC G3 1997年11月 2003年10月 PowerPC G4 1999年10月 — PowerPC G5 2003年6月 — PowerPC G5(双核) 2005年10月 —  2005年6月6日,在旧金山的全球开发者大会上,Apple宣布了它的计划,使Macintosh计算机的未来型号基于Intel处理器。这个迁移过程持续了两年:Apple声明尽管基于x86的Macintosh型号到2006年中期将变得可用,但是所有的Apple计算机直到2007年末才会迁移到x86平台。迁移的速度比预期的更快,首批x86Macintosh计算机在2006年1月就出现了。这些系统——iMac和MacBook Pro——基于Intel Core Duo③双核处理器系列,它们构建在65nm处理器技术之上。   在本章中,将探讨特定类型的Apple计算机的系统体系结构:基于G5的双处理器Power Mac。而且,还将讨论这些系统中使用的特定PowerPC处理器:970FX。我们将重点介绍基于G5的系统,因为一般来讲970FX比它的前身更高级、更强大并且更有趣。它还是第一个64位双核PowerPC处理器(970MP)的基础。 3.1 Power Mac G5   Apple在2003年6月宣布了Power Mac G5——它的第一个64位桌面系统。最初基于G5的计算机使用IBM的PowerPC 970处理器,之后的系统基于970FX处理器。2005年后期,Apple通过迁移到双核970MP处理器,更新了Power Mac系列。970、970FX和970MP都源于POWER4处理器家族的执行核心,它是为IBM的高端服务器设计的。G5是Apple用于970及其变体的市场营销口号。 IBM的其他G5   还有另外一个来自IBM的G5——S/390 G5系统中使用的微处理器,它是在1998年5月宣布的。S/390 G5是IBM的CMOS④大型机家族的成员。与970处理器家族不同,S/390 G5具有CISC(Complex Instruction Set Computer,复杂指令集计算机)体系结构。  在研究任何特定的Power Mac G5的体系结构之前,要注意多种Power Mac G5型号可能具有稍微不同的系统体系结构。在下面的讨论中,将参考图3-1中所示的系统。 3.1.1 U3H系统控制器   U3H系统控制器结合了内存控制器⑤和PCI总线桥⑥的功能。它是一个自定义的集成芯片(Integrated Chip,IC),并且是许多关键系统组件的交汇点,包括:处理器、DDR(Double Data Rate,双倍数据速率)内存系统、AGP(Accelerated Graphics Port,加速图形端口)⑦插槽和进入PCI-X桥的HyperTransport总线。U3H通过在这些组件之间执行点对点路由,提供了桥接功能。它支持GART(Graphics Address Remapping Table,图形地址重映射表),允许AGP桥把AGP事务中使用的线性地址转换成物理地址。这改进了直接内存访问(Direct Memory Access,DMA)事务的性能,它们涉及在虚拟内存中通常不连续的多个页。U3H支持的另一个表是DART(Device Address Resolution Table,设备地址解析表)⑧,它为连接到HyperTransport总线的设备把线性地址转换成物理地址。在第10章中讨论I/O Kit时,将会遇到DART。    图3-1 双处理器Power Mac G5系统的体系结构 3.1.2 K2 I/O设备控制器   U3H通过16位的HyperTransport总线连接到PCI-X桥。PCI-X桥则通过8位的HyperTransport总线进一步连接到K2自定义的IC。K2是一个自定义的集成I/O设备控制器。特别是,它提供了磁盘和多处理器中断控制器(Multiprocessor Interrupt Controller,MPIC)功能。 3.1.3 PCI-X和PCI Express   图3-1中显示的Power Mac系统提供了3个PCI-X 1.0插槽。具有双核处理器的Power Mac G5系统使用PCI Express。   1.??PCI-X   开发PCI-X是为了提高总线速度和减少PCI等待时间(参见第116页框注“关于本地总线的基础知识”)。PCI-X 1.0基于现有的PCI体系结构。特别是,它还是一种共享总线。它解决了PCI的许多(但并非全部)问题。例如,它的分割事务协议改进了总线带宽利用率,导致了远远超过PCI的吞吐率。它完全向后兼容,这是由于PCI-X卡可以用在传统的PCI插槽中,传统的PCI卡(包括33MHz和66MHz)反过来也可以用在PCI-X插槽中。不过,PCI-X在电学上并不与仅支持5V的卡或者仅支持5V的插槽兼容。   PCI-X 1.0使用64位的插槽。它提供了两种速度等级:PCI-X 66(66MHz的信令速度,高达533MB/s的峰值吞吐量)和PCI-X 133(133MHz的信令速度,高达1GB/s的峰值吞吐量)。   PCI-X 2.0提供了如下增强。 * 纠错码(Error Correction Code,ECC)机制,用于提供自动的1位错误恢复和2位的错误检测。 * 新的速度等级:PCI-X 266(266MHz的信令速度,高达2.13GB/s的峰值吞吐量)和PCI-X 533(533MHz的信令速度,高达4.26GB/s的峰值吞吐量)。 * 新的16位接口,用于嵌入式或可移植应用程序。   注意在图3-1中插槽是如何连接到PCI-X桥的:其中一个插槽是“单独”连接的(点对点(point-to-point)负载),而另外两个插槽则“共享”一条连接(多点(Multidrop)负载)。PCI-X速度限制是:仅当负载是点对点的时,才支持它的最高速度等级。确切地讲,两个PCI-X 133负载都将以100MHz的最高速度工作⑨。相应地,这台Power Mac中有两个插槽是100MHz,而第三个插槽则是133MHz。   PCI-X的下一个版本(PCI-X 3.0)提供了1066MHz的数据速率以及8.5GB/s的峰值吞吐量。   2.??PCI Express   使用共享总线的一种替代选择是使用点对点链路来连接设备。PCI Express⑩使用一种高速、点对点体系结构。它使用既定的PCI驱动程序编程模型提供PCI兼容性。将通过一种分割事务的、基于分组的协议把软件生成的I/O请求传输给I/O设备。换句话说,PCI Express实质上将序列化和分组化PCI。它支持多种互连宽度——可以通过添加信号对(Signal Pair)形成通道(Lane),线性缩放链路的带宽。最多可以有32条单独的通道。 关于本地总线的基础知识   多年来,由于CPU速度显著提高,其他计算机子系统并没有设法与之保持一致。也许一个例外是主存,其进展要好于I/O带宽。1991年11,Intel推出了PCI(Peripheral Component Interconnect,外围组件互连)本地总线标准。用最简单的话讲,总线是一条共享通信链路。在计算机系统中,总线被实现为一组导线,它们连接计算机的一些子系统。通常把多条总线用作构件,来构造复杂的计算机系统。本地总线中的“本地”意味着它位于处理器附近12。PCI总线被证明是一种极其流行的互连机制(也简称为互连),尤其是在所谓的北桥/南桥实现中。北桥(North Bridge)通常负责处理器、主存、AGP以及南桥(South Bridge)之间的通信。不过,请注意:现代系统设计正在把内存控制器转移给处理器晶圆(Processor die),从而使AGP过时了,并且使传统的北桥变得毫无 必要。   典型的南桥控制多种总线和设备,包括PCI总线。一种比较常见的做法是:使PCI总线同时作为用于外设的插入式总线以及作为一种互连方式,允许直接或间接连接到它的设备与内存通信。   PCI总线使用共享、平行的多点体系结构,其中在总线上多路复用地址、数据和控制信号。当一个PCI总线主控制器13使用总线时,其他连接的设备要么等待它变得空闲,要么使用一个争用协议请求总线的控制权。需要多个边频带(Sideband)信号14来跟踪通信方向、总线传输的类型以及总线主控请求的指示等。而且,共享总线以受限的时钟速度运行,并且由于PCI总线可以支持那些需求变化极大(依据带宽、传输尺寸、延迟范围等)的广泛设备,总线仲裁可能相当复杂。PCI具有多种其他的限制,它们超出了本章讨论的范围。   PCI演化成了多个变体,它们在向后兼容性、向前计划、支持的带宽等方面有所 区别。 * 传统PCI:原始的PCI本地总线规范(PCI Local Bus Specification)演化成了现在所谓的传统PCI(Conventional PCI)。PCI特别兴趣小组(PCI Special Interest Group,PCI-SIG)于1993年推出了PCI 2.01,其后接着推出了修订版2.1(1995年)、2.2(1998年)和2.3(2002年)。根据修订版,PCI总线特征包括:5V或3.3V的信令、32位或64位的总线宽度、33MHz或66MHz的工作速度,以及133MB/s、266MB/s或533MB/s的峰值吞吐量。传统PCI 3.0——当前标准——完成了PCI总线从5.0V信令总线向3.3V信令总线的迁移。 * MiniPCI:MiniPCI基于PCI 2.2定义了一种较小尺寸和形状的PCI卡。它打算在空间非常宝贵的产品中使用——比如笔记本计算机、扩展坞(Docking Station)和机顶盒。Apple的AirPort Extreme无线卡就是基于MiniPCI的。 * CardBus:CardBus是PC Card家族的成员,它提供了32位、33MHz、在3.3V工作的类似于PCI的接口。PC Card标准是由PCMCIA维护的15。   PCI-X(参见3.1.3节中的第1小节)和PCI Express(参见3.1.3节中的第2小节)代表I/O总线体系结构中的进一步发展。3.1.4 HyperTransport   HyperTransport(HT)是一种高速、点对点的芯片互连技术。它以前称为LDT(Lightning Data Transport,闪电数据传输),是AMD(Advanced Micro Devices,美国超微半导体公司)与行业合作伙伴于20世纪90年代后期合作开发的。该技术于2001年7月正式推出。Apple Computer是HyperTransport技术联盟(HyperTransport Technology Consortium)的创始成员之一。HyperTransport体系结构是开放的,并且是非专有的。   HyperTransport的目的在于:通过替代多级总线,简化芯片对芯片以及板对板之间的互连。HyperTransport协议中的每条连接都位于两个设备之间。每条连接没有使用单独一条双向总线,而是包括两条单向链路(two unidirectional link)。可以扩展HyperTransport点对点互连(图3-2显示了一个示例)以支持多种设备,包括隧道、桥和端点设备。HyperTransport连接特别适合于主逻辑板上的设备——也就是说,那些需要最短延迟和最高性能的设备。HyperTransport链路链也可用作I/O通道,用于把I/O设备和桥连接到主机系统。 图3-2 HyperTransport I/O链路   一些重要的HyperTransport特性如下。 * HyperTransport使用基于分组的数据协议,其中狭窄而快速的单向点对点链路将传送编码为分组的命令、地址和数据(Command, Address, and Data,CAD)信息。 * 链路的电学特征有助于更干净的信号传输、更高的时钟速率和更低的电源消耗。因此,需要少得多的边频带信号。 * 不同链路的宽度不必相同。8位宽度的链路可以轻松地连接到32位宽度的链路。链路宽度可以从2位放大到4位、8位、16位或32位。如图3-1所示,U3H与PCI-X桥之间的HyperTransport总线宽度是16位,而PCI-X桥与K2则是通过8位宽度的HyperTransport总线连接的。 * 不同链路的时钟速度不必相同,并且可以跨广泛的范围进行缩放。因此,可能在宽度(Width)和速度(Speed)两方面缩放链路,以适应特定的需要。 * HyperTransport支持分割事务(Split Transaction),消除了低效重试、断开目标和插入等待状态的需要。 * HyperTransport结合了串行和并行体系结构的许多优点。 * HyperTransport具有对PCI的全面遗留支持。 分割事务   当使用分割事务时,请求(Request)(它需要一个响应)以及该请求的完成(Completion)——响应(Response)16——都是总线上单独的事务。从作为分割事务执行的操作的角度讲,链路在发送请求之后并且在接收响应之前是空闲的。而且,依赖于芯片组的实现,可以同时挂起17多个事务。跨更大的结构路由这样的事务也更容易。  HyperTransport被设计成与广泛使用的PCI总线标准协同工作——它与PCI、PCI-X以及PCI Express是软件兼容的。事实上,可将其视作PCI的超集,因为它可以通过保存PCI定义和寄存器格式,提供完全的PCI透明度。它可以遵守PCI命令和配置规范,还可以使用即插即用功能,使得兼容的操作系统可以识别和配置启用HyperTransport的设备。它被设计成同时支持CPU-CPU通信以及CPU-I/O传输,同时还强调了低延迟。   HyperTransport隧道设备可用于提供对其他总线(比如PCI-X)的连接。系统可以通过使用HT-HT桥,来使用额外的HyperTransport总线。   Apple在基于G5的系统中使用HyperTransport连接PCI、PCI-X、USB、FireWire、音频和视频链路。在这种方案中,U3H充当北桥。 系统架构和平台   从Mac OS X的角度讲,可以把系统的架构(Architecture)定义为主要是它的处理器类型、北桥(包括内存控制器)以及I/O控制器的组合。例如,AppleMacRISC4PE系统架构包含一个或多个基于G5的处理器、基于U3的北桥以及基于K2的I/O控制器。基于G3或G4的处理器、基于UniNorth的主桥以及基于KeyLargo的I/O控制器的组合被称为AppleMacRISC2PE系统架构。   一个更特定于型号的概念是平台(Platform),它通常依赖于特定的主板,并且很可能比系统架构更频繁地改变。平台的一个示例是PowerMac 11.2,它对应于2.5GHz的四核处理器(两个双核)Power Mac G5。3.1.5 Elastic I/O互连   PowerPC 970是与Elastic I/O一起推出的,后者是一种高带宽和高频率的处理器互连(Processor-Interconnect,PI)机制,它无需总线级仲裁18。Elastic I/O包括两条32位的逻辑总线,它们都是高速的源同步总线(source-synchronous bus,SSB),代表单向点对点连接。如图3-1所示,一条总线是从处理器连接到U3H配套芯片,另一条是从U3H连接到处理器。在双处理器系统中,每个处理器都会获得它自己的双SSB总线。注意:SSB还支持多处理器系统中使用的缓存一致性“监听”协议。   同步(Synchronous)总线是指在其控制线中包括一个时钟信号的总线。它的实现协议会处理时钟。源同步(Source Synchronous)总线使用一种定时模式,其中将与数据一起转发时钟信号,当时钟信号变高或变低时,允许精确地对数据取样。   每条SSB的逻辑宽度是32位,而物理宽度则更大。每条SSB包括50条信号线,它们的用途如下。 * 2个信号用于差分总线时钟线。 * 44个信号用于数据,以传输35位的地址和数据或者控制信息(AD),以及1位用于传输握手(Transfer-Handshake,TH)分组,用以确认在总线上接收到这样的命令或数据分组。 * 4个信号用于差分监听响应(Snoop Response,SR),以传送监听一致性响应,允许进行全局监听活动,以维护缓存一致性。   使用44个物理位传输36个逻辑信息位,允许将8位用于奇偶校验。用于冗余数据传输的另一种支持的格式使用平衡编码方法(Balanced Coding Method,BCM),其中如果总线状态有效的话,将恰好有22个高信号和22个低信号。   图3-1中显示的总体处理器互连逻辑上包括3个入站段(ADI、THI、SRI)和3个出站段(ADO、THO、SRO)。传输的方向是从驱动端(D)或主端到接收端(R)或从端。数据传输的单元是分组。   每条SSB都以某个频率工作,该频率是处理器频率的整分数倍(Integer Fraction)。 970FX设计允许多个这样的比率。例如,Apple的双处理器2.7GHz系统具有1.35GHz的SSB频率(PI总线比率为2∶1),而单处理器的1.8GHz型号之一具有600MHz的SSB频率(PI总线比率为3∶1)。   970FX处理器与U3H之间的通道的双向性意味着具有用于读和写的专用数据路径。因此,吞吐量在包含相同读和写数量的工作负载中将是最高的。传统的总线体系结构是共享的并且每次都是单向的,对于主要包含读操作或写操作的工作负载将提供更高的峰值吞吐量。换句话说,对于均衡的工作负载,Elastic I/O可以导致更高的总线利用率。   总线接口单元(Bus Interface Unit,BIU)在启动期间能够自我调优,以确保最佳的信号质量。 3.2 G5:血统和路线图   如前所述,G5是从IBM的POWER4处理器演化而来的。在本节中,将简要探讨G5与POWER4以及它的一些后代有何异同。这将有助于了解G5在POWER4/PowerPC路线图中的位置。表3-2提供了POWER4和POWER5系列的一些关键特性的高级总结。 表3-2 POWER4及更新的处理器 关 键 特 性 POWER4 POWER4+ POWER5 POWER5+ 推出的年代 2001年 2002年 2004年 2005年 微影尺寸 180nm 130nm 130nm 90nm 核心数量/芯片 2个 2个 2个 2个 晶体管数量 1.74亿个 1.84亿个 2.76亿个/芯片a 2.76亿个/芯片 晶圆尺寸 415mm2 267mm2 389mm2/芯片 243mm2/芯片 LPARb 是 是 是 是 SMTc 否 否 是 是 内存控制器 芯片外 芯片外 芯片上 芯片上 快速路径 否 否 是 是 L1指令缓存 2×64KB 2×64KB 2×64KB 2×64KB L1数据缓存 2×32KB 2×32KB 2×32KB 2×32KB L2缓存 1.41MB 1.5MB 1.875MB 1.875MB L3缓存 32MB以上 32MB以上 36MB以上 36MB以上   a. 芯片包括两个处理器核心和L2缓存。多芯片模块(Multichip Module,MCM)包含多个芯片,通常还包含L3缓存。带有4个L3缓存模块的4芯片POWER5 MCM是95mm2。   b.??LPAR代表(处理器级)Logical Partition(逻辑分区)。   c.??SMT代表Simultaneous Multithreading(并发多线程技术)。 晶体管的变迁   根据现代处理器的技术规范,将它们与个人计算历史上的一些最重要的处理器做一下比较将是有趣的。 * Intel 4004:1971年,750kHz的时钟频率、2300个晶体管、4位累加器体系结构、8?m的pMOS、3×4mm2、8~16个周期/指令,设计用于桌面打印计算器。 * Intel 8086:1978年,8MHz的时钟频率、29 000个晶体管、16位扩展的累加器体系结构、与8080兼容的组装方式、通过分段寻址模式进行20位的寻址。 * Intel 8088:1979年(原型化),8086的8位总线版本,于1981年在IBM PC中使用。 * Motorola 68000:1979年,8MHz的时钟频率、68 000个晶体管、32位通用寄存器体系结构(具有24个地址引脚)、高度微编码(甚至超微编码)、8个地址寄存器、8个数据寄存器,于1984年在原始的Macintosh中使用。 3.2.1 G5的基本方面   表3-2中列出的所有POWER处理器以及从G5演化而来的处理器共享一些基本的体系结构特性。它们都是64位(64-bit)和超标量(Superscalar)的,并且它们都执行推测式(Speculative)、无序(Out-Of-Order)的操作。现在来简要讨论这些术语。   1.??64位处理器   对于64位处理器的组件尽管没有正式的定义,但是所有的64位处理器都共享下面的基本属性。 * 64位宽的通用寄存器。 * 支持64位的虚拟寻址,尽管物理或虚拟地址空间可能不会使用全部64位。 * 整数算术和逻辑运算是在64位操作数的全部64位上执行的——而没有分解成(比如说)两个32位的量上的两个操作。   PowerPC体系结构被设计成同时支持32位和64位计算模式——这种实现可以自由地只实现32位的子集。G5也支持两种计算模式。事实上,POWER4支持多种处理器体系结构:32位和64位的POWER、32位和64位的PowerPC以及64位的Amazon体系结构。我们将使用术语PowerPC同时指代处理器(Processor)和处理器体系结构(Processor Architecture)。在3.3.12节的第1小节中将讨论970FX的64位能力。 Amazon   Amazon体系结构是在1991年由一组IBM研究员和开发人员定义的,当时他们合作创建一种可用于RS/600和AS/400的体系结构。Amazon是一种只支持64位的体系结构。   2. 超标量   如果把标量(Scalar)定义为一种处理器设计,其中在每个时钟周期发出一条指令,那么超标量(Superscalar)处理器将在每个时钟周期发出数量可变的指令,并且允许时钟周期/指令(Clock-Cycle-Per-Instruction,CPI)比率小于1。需要注意的是:即使超标量处理器可以在一个时钟周期内发出多条指令,它还是要满足几个附加条件,比如指令是否彼此依赖以及它们使用哪些特定的功能单元。超标量处理器通常具有多个功能单元,包括多个相同类型的单元。 VLIW   另一种可以发出多条指令的处理器是VLIW(Very-Large Instruction-Word,特大指令字)处理器,它把多个操作打包进一条超长指令中。编译器——而不是处理器的指令调度器——在选择在VLIW处理器中将要同时发出哪些指令方面起着至关重要的作用。它可能通过使用启发、追溯和配置文件猜测分支方向对操作进行调度。   3. 推测式执行   推测式(Speculative)处理器可以在它确定是否需要执行指令之前就执行那些指令(例如,由于某个分支绕过了指令,可能不需要执行它们)。因此,指令执行不会等待控制(Control)依赖性得到解决——它只会等待指令的操作数(数据(Data))变得可用。这种推测可以由编译器、处理器或者它们二者完成。表3-2中的处理器利用了硬件中的动态分支预测(“途中”具有多个分支)、推测和指令组的动态调度,来实现重要的指令级并行性。   4. 无序执行   无序执行(Out-Of-Order Execution)的处理器包括额外的硬件,它们可以绕过其操作数不可用(比如说,由于在寄存器加载期间发生了缓存失效(Cache Miss))的指令。因此,处理器执行指令的顺序并非总是它们出现在所运行的程序中的顺序,而可能执行其操作数准备就绪的指令,而把被绕过的指令推迟到更合适的时间执行。 3.2.2 新一代POWER   POWER4在单个芯片中包含两个处理器核心。而且,POWER4体系结构具有一些有助于虚拟化的特性。示例包括处理器中的特殊虚拟机监视器模式、使用非虚拟内存地址时包括地址偏移量的能力,以及在中断控制器中对多个全局中断队列的支持。IBM的LPAR(Logical Partitioning,逻辑分区)允许在单个基于POWER4的系统上同时运行多个独立的操作系统映像(比如AIX和Linux)。AIX 5L版本5.2中引入的DLPAR(Dynamic LPAR,动态LPAR)允许从活动分区中动态添加和删除资源。   POWER4+改进了POWER4,它减小了尺寸、消耗更少的电源、提供更大的L2缓存,并且允许更多的DLPAR分区。   POWER5引入了SMT(Simultaneous Multithreading,并发多线程),其中单个处理器可以同时支持多个指令流(在这里是两个指令流)。 许多处理器同时工作   IBM的RS 64 IV是PowerPC家族的一个64位成员,它是第一款支持处理器级多线程(处理器保存多个线程的状态)的主流处理器。RS 64 IV实现了粗粒度的双向多线 程——单个线程(前台线程)执行,直到某个高延迟事件(比如缓存失效)发生为止。自此之后,执行将切换到后台线程。这实质上是一种非常快的基于硬件的环境切换实现。额外的硬件资源允许两个线程同时在硬件中具有它们的状态。两种状态之间的切换极其快速,只会消耗3个“不再使用的”周期。   POWER5实现了双向SMT,它的粒度要精细得多。处理器从两个活动的指令流中取指令,每条指令都包括一个线程指示器。处理器可以同时从两个流中给多个功能单元发出指令。事实上,指令流水线在它的多个阶段可以同时包含来自两个流的指令。   双向SMT实现不会提供两倍的性能改进——处理器的性能实际上要超过一个处理器,但是还不能完全等价于两个处理器。然而,操作系统看到的是一种对称多处理(Symmetric-Multiprocessing,SMP)编程模式。典型的改进因子的范围在1.2~1.3,最佳情况大约在1.6。在一些极端情况下,性能甚至可能会降级。   单个POWER5芯片包含两个核心,其中每个核心都能够支持双向SMT。多芯片模块(Multichip Module,MCM)可以包含多个这样的芯片。例如,4芯片POWER5模块具有8个核心。当每个核心在SMT模式下运行时,操作系统将看到16个处理器。注意:在采用SMT之前,操作系统将第一次能够利用“真正的”处理器。  POWER5还支持其他一些重要的特性,如下。 * 64路多处理。 * 子处理器分区(或微分区(Micropartitioning)),其中多个LPAR分区可以共享单个处理器19。微分区的LPAR支持自动CPU负载平衡。 * 虚拟分区间以太网(Virtual Inter-partition Ethernet),它以Gb(千兆位)或者甚至更高的速度支持LPAR之间的VLAN连接,而无需物理网络接口卡。可以通过管理控制台定义虚拟以太网。依赖于操作系统,每个分区都支持多个虚拟适配器。 * 虚拟I/O服务器分区(Virtual I/O Server Partition)20,它提供了虚拟磁盘存储器和以太网适配器共享。以太网共享把虚拟以太网连接到外部网络。 * 芯片上的内存控制器。 * 动态固件更新。 * 在专用电路中传输数据时进行检错和纠错。 * 快速路径(Fast Path),能够直接在处理器内执行一些常见的软件操作。例如,可以通过单独一条指令执行TCP/IP处理的某些部分,它们传统上是在操作系统内使用一系列处理器指令处理的。这种硅加速也可以应用于其他的操作系统区域,比如消息传递和虚拟内存。   除了使用90nm技术之外,POWER5+还向POWER5的特性集中添加了几个特性,例如:16GB页尺寸、1TB分段、每个分段上的多种页尺寸、更大的(2048个条目)转换后备缓冲区(Translation Lookaside Buffer,TLB)以及大量的内存控制器读取队列。   POWER6被期望添加革命性的改进以及进一步扩展快速路径概念,允许在硅中执行更高级的软件(例如,数据库和应用程序服务器)的功能21。它很可能基于65nm的制作工艺,并且被期望具有多个超高频率核心和多个L2缓存。 3.2.3 PowerPC 970、970FX和970MP   PowerPC 970是在2002年10月作为一款64位高性能处理器推出的,用于桌面、入门级服务器和嵌入式系统。可以将PowerPC 970视作简装版的POWER4+。Apple在其基于G5的系统中使用970——其后接着970FX和970MP。表3-3包含这些处理器的规范的简要比较。图3-3显示了图片式的比较。注意:与POWER4+不同,它的L2缓存是在核心之间共享的,而970MP中的每个核心都有它自己的L2缓存,它比970或970FX中的L2缓存大两倍。   关于970MP的另一个值得注意的是:它的两个核心共享相同的输入和输出总线。特别是,输出总线是使用简单的轮询算法在核心之间“公平”共享的。 图3-3 PowerPC 9xx家族和POWER4+ 表3-3 POWER4+及PowerPC 9xx 关 键 特 性 POWER4+ PowerPC 970 PowerPC 970FX PowerPC 970MP 推出的年代 2002年 2002年 2004年 2005年 微影尺寸 130nm 130nm 90nma 90nm 核心数量/芯片 2个 1个 1个 2个 晶体管数量 1.84亿个 0.55亿个 0.58亿个 1.83亿个 晶圆尺寸 267mm2 121mm2 66mm2 154mm2 LPAR 是 否 否 否 SMT 否 否 否 否 内存控制器 芯片外 芯片外 芯片外 芯片外 快速路径 否 否 否 否 L1指令缓存 2×64KB 64KB 64KB 2×64KB L1数据缓存 2×32KB 32KB 32KB 2×32KB L2缓存 1.41MB 共享b 512KB 512KB 2×1MB L3缓存 32MB以上 无 无 无 VMX(AltiVecc) 否 是 是 是 PowerTuned 否 否 是 是   a.??970FX和970MP使用90nm的微影尺寸,其中铜导线、应变硅和绝缘硅(Silicon-On-Insulator,SOI)都融入了相同的制造工艺中。这种技术可以使电流加速通过晶体管,并且在硅中提供了一个绝缘层。这样可以提升性能、对晶体管绝缘以及消耗更低的电源。控制电源消耗对于具有较小工艺几何尺寸的芯片特别关键,其中次临界漏电可能会引发问题。   b.??L2缓存是在两个处理器核心之间共享的。   c. 尽管AltiVec是由Motorola、Apple和IBM联合开发的,但它是Motorola的商标,或者更准确地讲,它是Freescale的商标。2004年早期,Motorola把它的半导体产品部门分离出去,成立了Freescale半导体公司。   d.??PowerTune是一种时钟频率和电压调节技术。 3.2.4 Intel Core Duo   与之相比,第一批基于x86的Macintosh计算机(iMac和MacBook Pro)中使用的Intel Core Duo处理器系列具有以下关键特征。 * 每个芯片上有两个核心。 * 使用65nm工艺技术制造。 * 90.3mm2的晶圆尺寸。 * 1.516亿个晶体管。 * 最高2.16GHz的频率(以及667MHz的处理器系统总线)。 * 32KB晶圆上的指令缓存和32KB晶圆上的数据缓存(回写)。 * 2MB晶圆上的L2缓存(在两个核心之间共享)。 * 数据预取逻辑。 * SSE2(Streaming SIMD22 Extensions 2,SIMD流技术扩展2)和SSE3(Streaming SIMD Extensions 3,SIMD流技术扩展3)。 * 先进的电源和热量管理特性。 3.3 PowerPC 970FX 3.3.1 基本知识   在本节中,将探讨PowerPC 970FX的详细信息。尽管这个讨论的多个部分也可能适用于其他的PowerPC处理器,但是我们将不会尝试鉴定这样的情况。表3-4列出了970FX的重要技术规范。 表3-4 PowerPC 970FX的基本知识 特 性 详 细 信 息 体系结构 64位PowerPC ASa,支持32位操作系统桥接工具 扩展 矢量/SIMD多媒体扩展(Vector/SIMD Multimedia extension,VMXb) 处理器时钟频率 最高2.7GHzc 前端总线频率 处理器时钟频率的整分数倍 数据总线宽度 128位 地址总线宽度 42位 最大可寻址物理内存 4TB(242字节) 地址转换 65位物理地址、42位真实地址、支持较大的(16MB)虚拟内存页、1024个条目的转换后备缓冲区(Translation Lookaside Buffer,TLB)以及64个条目的段后备缓冲区(Segment Lookaside Buffer,SLB) 字节序 大端;可选的小端功能未实现 ?????????????????????????????????????? ??续表?? 特 性 详 细 信 息 L1指令缓存 64KB,直接映射,带奇偶校验 L1数据缓存 32KB,双向组相联,带奇偶校验 L2缓存 512KB,8路组相联,带ECC,完全包含L1数据缓存 L3缓存 无 缓存行宽 所有缓存都是128字节 指令缓冲区 32个条目 指令数/周期 最多5条指令(最多4条无分支指令+最多一条分支指令) 通用寄存器 32×64位 矢量寄存器 32×128位 加载/存储单元 两个单元,带有64位的数据路径 定点单元 两个非对称d64位的单元 浮点单元 两个64位的单元,支持IEEE-754双精度浮点数、硬件融合的乘加运算和平方根 矢量单元 128位的单元 条件寄存器单元 用于在条件寄存器(Condition Register,CR)上执行逻辑运算 执行流水线 10条执行流水线,一条流水线中最多有25个阶段,在执行的不同阶段一次最多有215条指令 电源管理 多种软件初始化的节能模式、PowerTune频率和电压调节   a.??AS代表Advanced Series(高级系列)。   b.??VMX可以与AltiVec互换。Apple把PowerPC的矢量功能作为Velocity Engine(速度引擎)进行宣传。   c. 截至2005年。   d.??970FX的两个浮点(整数)单元不是对称的。其中只有一个可以执行除法运算,并且只有一个可用于专用寄存器(Special-Purpose Register,SPR)操作。 3.3.2 缓存   多级缓存层次结构是现代处理器的一个常见方面。可以将缓存定义为一个非常快的小内存块,它用于存储最近使用的数据、指令或它们二者。从缓存中添加或删除信息通常是在一个称为缓存行(Cache Line)的对齐区块(Aligned Quanta)中进行的。970FX包含多个缓存以及其他的专用缓冲区,用以改进内存性能。图3-4显示了这些缓存和缓冲区的概念图。   1.??L1和L2缓存   一级(L1)缓存与处理器之间的距离最近。在处理器可以使用内存驻留信息之前,必须把它加载进这个缓存中,除非内存的那个部分被标记为不可缓存的。例如,当执行加载指令时,处理器将查询L1缓存,看看所涉及的数据是否已经被当前驻留的缓存行所持有。如果是,就从L1缓存中简单地加载数据——L1缓存命中(Hit)。这个操作只需花费几个处理器周期,与之相比,访问主存则要花费几百个周期23。如果发生L1失效(Miss),处理 图3-4 970FX中的缓存和缓冲区 器将检查缓存层次结构中的下一个层级:二级(L2)缓存。L2命中将导致把包含数据的缓存行加载进L1缓存中,然后加载进合适的寄存器中。970FX没有三级(L3)缓存,但是如果它有的话,则将为L3缓存重复执行类似的步骤。如果所有的缓存都不包含请求的数据,处理器就必须访问主存。   当把缓存行中的数据加载进L1中时,必须冲洗驻留的缓存行,以为新的缓存行留出空间。970FX使用LRU(Pseudo-Least-Recently-Used,伪最近最少使用)算法24来确定要逐出哪个缓存行。除非明确指示,否则将把逐出的缓存行发送给L2缓存,这使L2成为一个受害者(Victim)缓存。表3-5显示了970FX缓存的重要属性。 表3-5 970FX缓存 属 性 L1指令缓存 L1数据缓存 L2缓存 大小 64KB 32KB 512KB 类型 指令 数据 数据和指令 关联性 直接映射 双向组相联 8路组相联 行尺寸 128字节 128字节 128字节 ?????????????????????????????????????????? 续表 ?? 属 性 L1指令缓存 L1数据缓存 L2缓存 扇区大小 32字节 — — 缓存行数量 512 256 4096 组数量 512 128 512 粒度 1个缓存行 1个缓存行 1个缓存行 替换策略 — LRU LRU 存储策略 — 直写(Write-Through),在存储失效时不分配 回写(Write-Back),在存储失效时分配 索引 有效地址 有效地址 物理地址 标签 物理地址 物理地址 物理地址 包含性 — — 包含L1数据缓存 硬件一致性 否 是 标准的MERSI缓存一致性协议 启用位 是 是 否 可靠性、可用性和适用性(RAS) 奇偶校验,使数据和标签上的错误无效 奇偶校验,使数据和标签上的错误无效 对数据执行ECC,对标签执行奇偶校验 缓存锁定 否 否 否 需求加载延迟(典型) — 对于GPR、FPR、 VPERM和VALU分别是3、5、4、5个周期a 对于GPR、FPR、 VPERM和VALU分别是11、12、11、11个周期a   a. 3.3.6节将讨论GPR和FPR。3.3.10节将讨论VPERM和VALU。 哈佛体系结构   970FX的L1缓存分成用于指令和数据的单独缓存。这个设计方面称为哈佛体系结构(Harvard Architecture),影射20世纪40年代在哈佛大学制造的Mark-Ⅲ和Mark-Ⅳ真空管中用于指令和数据的单独内存。  如图3-5所示,在Mac OS X上可以使用sysctl命令获取处理器缓存信息。注意:hwprefs命令是Apple的CHUD Tools包的一部分。   2. 缓存属性   现在更详细地探讨表3-5中使用的一些与缓存相关的术语。   关联性   如前所述,对缓存的操作粒度——即进、出缓存的内存传输单元——是缓存行(也称为块(Block))。970FX上的缓存行尺寸对于L1和L2缓存都是128字节。缓存的关联性用于确定把内存的缓存行的值放在缓存中的什么位置。   如果缓存是m路组相联(m-way set-associative),那么就在概念上将缓存中的总空间划分成组(Set),其中每个组包含m个缓存行。在组相联缓存中,只能把内存块放在缓存中的某些位置。它首先将被映射到缓存中的某个组,然后就可以把它存储在那个组内的任 $ sudo hwprefs machine_type # Power Mac G5 Dual 2.5GHz PowerMac7,3 $ sysctl -a hw ... hw.cachelinesize: 128 hw.l1icachesize: 65536 hw.l1dcachesize: 32768 hw.l2settings = 2147483648 hw.l2cachesize: 524288 ... $ sudo hwprefs machine_type # Power Mac G5 Quad 2.5GHz PowerMac11,2 $ sysctl -a hw ... hw.cachelinesize = 128 hw.l1icachesize = 65536 hw.l1dcachesize = 32768 hw.l2settings = 2147483648 hw.l2cachesize = 1048576 ... 图3-5 使用sysctl命令获取处理器缓存信息 何缓存行中。通常,给定一个具有地址B的内存块,就可以使用以下模运算来计算目标组。 target set = B MOD {number of sets in cache}   直接映射(Direct-Mapped)缓存等价于单向组相联缓存。它具有与缓存行相同的组数量。这意味着具有地址B的内存块只能存在于一个缓存行中,其计算方式如下。 target cache line = B MOD {number of cache lines in cache}   存储策略   缓存的存储策略定义了当把一条指令写到内存时所发生的事情。在直写(Write- Through)设计中,比如970FX L1数据缓存,将同时把信息写到缓存行和内存中对应的块中。在写失效时将不会进行L1数据缓存分配——只会在缓存层次结构的较低层级修改受影响的块,而不会加载进L1中。在回写(Write-Back)设计中,比如970FX L2缓存,只会把信息写到缓存行中——仅当替换缓存行时,才会把受影响的块写到内存中。   虚拟内存中连续的内存页通常在物理内存中不是连续的。类似地,给定一组虚拟地址,不可能预测它们将如何放入缓存中。相关的要点是:如果有一个与缓存大小相同的连续虚拟内存块,比如说512KB的块,那么几乎没有机会将其放入L2缓存中。   MERSI   尽管所有的缓存都会使用物理地址标签,但是只有L2缓存会被物理地映射。除了L1缓存之外,存储的信息总会被发送给L2缓存,因为L2缓存是数据一致性(Coherency)点。一致的内存系统目标在于给访问内存的所有设备提供相同的视图。例如,必须确保多处理器系统中的处理器访问正确的数据——无论最新的数据是驻留在主存中,还是驻留在另一个处理器的缓存中。在硬件中维护这样的一致性引入了一个协议,它需要处理器“记住”缓存行共享的状态25。L2缓存实现了MERSI缓存一致性协议,它具有以下5种状态。   (1)修改:将针对内存子系统的余下部分修改这个缓存行。   (2)独占:这个缓存行不会缓存在其他任何缓存中。   (3)最近:当前的处理器是这个共享缓存行最近的阅读者。   (4)共享:这个缓存行被多个处理器缓存。   (5)无效:这个缓存行是无效的。   RAS   缓存纳入了基于奇偶校验的检错和纠错机制。奇偶校验位(Parity Bit)是与正常的信息一起使用的额外位,用于检测和校正此消息在传输过程中的错误。在最简单的情况下,可以使用单个奇偶校验位检测错误。这种奇偶校验的基本思想是:给每个信息单元添加一个额外的位——比如说,使每个单元中的1的个数为奇数或偶数。现在,如果在信息传输期间发生单个错误(奇数个错误),那么奇偶校验保护的信息单元将是无效的。在970FX的L1缓存中,将把奇偶校验错误报告为缓存失效,因此将通过从L2缓存中重新获取缓存行对其进行隐式处理。除了奇偶校验之外,L2缓存还实现了一种检错和纠错模式,可以使用海明码(Hamming code)26检测两个错误并校正单个错误。当在L2获取请求期间检测到单个错误时,将校正坏数据,并实际地写回到L2缓存中。此后,将从L2缓存中重新获取好数据。 3.3.3 内存管理单元(MMU)   在虚拟内存操作期间,必须把软件可见的内存地址转换(Translate)成真实(或物理)地址,以用于由加载/存储指令生成的指令访问和数据访问。970FX使用一种分两个步骤的地址转换机制27,它基于段(Segment)和页(Page)。在第一步中,使用段表将软件生成的64位有效地址(Effective Address,EA)转换成65位虚拟地址(Virtual Address,VA),段表驻留在内存中。段表条目(Segment Table Entry,STE)包含段描述符(Segment Descriptor),定义了段的虚拟地址。在第二步中,使用散列的页表(Page Table)将虚拟地址转换成42位的真实地址(Real Address,RA),页表也驻留在内存中。   32位的PowerPC体系结构提供了16个段寄存器,通过它们可以将4GB的虚拟地址空间划分成16个段,其中每个段都是256MB。32位的PowerPC实现使用这些段寄存器从有效地址(EA)生成虚拟地址(VA)。970FX包括一个转换桥接设施,允许32位的操作系统继续使用32位的PowerPC实现的段寄存器操作指令。确切地讲,970FX允许软件将段0~15与237个可用的任何虚拟段关联起来。在这里,段后备缓冲区(SLB)的前16个条目充当16个段寄存器,下面将讨论SLB。   1.??SLB和TLB   我们看到段表和页表都驻留在内存中。如果处理器要访问主存,那么不仅数据获取而且地址转换都将是代价高昂的。缓存利用了内存的局部性原理。如果缓存有效,那么地址转换也将具有与内存相同的局部性。970FX包含两个芯片上的缓冲区,用于缓存最近使用的段表条目和页地址转换,它们分别是段后备缓冲区(Segment Lookaside Buffer,SLB)和转换后备缓冲区(Translation Lookaside Buffer,TLB)。SLB是64个条目的全相联缓存;TLB则是1024个条目的4向带奇偶校验保护的组相联缓存,它还支持较大的页(参见3.3.3节)。   2. 地址转换   图3-6描绘了970FX MMU中的地址转换,包括SLB和TLB的作用。970FX MMU使用64位或32位的有效地址、65位的虚拟地址和42位的物理地址。DART的存在引入了另一种类型的地址,即I/O地址,它是32位地址空间里的一个地址,该地址空间映射到一个更大的物理地址空间。 图3-6 970FX MMU中的地址转换   技术上讲,计算机体系结构具有3类(也许还有更多类)内存地址:处理器可见的物理地址(Physical Address)、软件可见的虚拟地址(Virtual Address)和总线地址(Bus Address),后者对于I/O设备可见。在大多数情况下(特别是在32位的硬件上),物理地址和总线地址完全相同,因此未进行区分。