第3章 鲲鹏处理器片上系统架构 处理器体系结构是计算机系统运行的基石,系统的功能和性能乃至生态环境在很大程度上受到处理器体系结构的影响。虽然计算机系统的分层架构可以尽量向高层软件屏蔽底层硬件的细节,令应用程序员在某种程度上可以忽略处理器组织与体系结构的详情,但是要充分利用计算机系统硬件提供的功能和性能支持设计和运行高效、高性能的软件,无论是固件设计者、系统程序员,还是应用程序员和服务器管理员,都需要理解处理器体系结构。本章首先介绍鲲鹏920处理器片上系统的整体架构与兼容ARMv8A架构的TaiShan V110处理器内核的组织结构,然后讨论支持鲲鹏处理器的服务器特性的组织方式与管理架构,以及与鲲鹏920系统的设备与输入/输出有关的部件结构,最后聚焦鲲鹏处理器的应用场景——基于鲲鹏920处理器片上系统的TaiShan服务器的组织与体系结构。 3.1鲲鹏处理器片上系统与TaiShan处理器内核架构 3.1.1鲲鹏处理器片上系统概况 1. 鲲鹏处理器片上系统与鲲鹏芯片家族 华为公司从2004年开始基于ARM技术自研芯片。至2019年底,华为自主研发的处理器系列产品已经覆盖“算、存、传、管、智(计算、存储、传输、管理、人工智能)”等五个应用领域。 鲲鹏处理器是基于ARM架构的企业级处理器产品。在通用计算处理器领域,华为公司2014年发布了第一颗基于ARM的64位CPU 鲲鹏 912处理器; 2016年发布的鲲鹏916处理器是业界第一颗支持多路互连的ARM处理器; 2019年1月发布的第三代鲲鹏 920处理器(器件内部型号为Hi162x)则是业界第一颗采用7nm工艺的数据中心级ARM架构处理器。图3.1给出了华为鲲鹏处理器芯片家族的演化路线图。 在2019年以前,华为海思的通用处理器产品中集成的是ARM公司设计的CortexA57、CortexA72等处理器内核。而2019年发布的鲲鹏920处理器片上系统(Hi1620系列)集成的TaiShan V110处理器内核则是华为海思自研的高性能、低功耗的ARMv8.2A架构的实现实例,支持ARMv8.1和ARMv8.2扩展。 图3.1华为鲲鹏处理器芯片家族的演化路线图 广义而言,鲲鹏芯片是华为海思自研的芯片家族的总称。其中除了鲲鹏系列处理器芯片外,还有昇腾(Ascend)人工智能 (Artificial Intelligence,AI)芯片、固态硬盘(Solid State Drive,SSD)控制芯片、智能融合网络芯片及智能管理芯片等,形成一个强大的支持计算、存储、传输、管理和人工智能的芯片家族。图3.2显示了鲲鹏芯片家族“算、存、传、管、智”五个产品系列及其应用场景的概况。 鲲鹏处理器架构与编程 第3章鲲鹏处理器片上系统架构 图3.2鲲鹏芯片家族概况 2. 鲲鹏920处理器片上系统的组成部件 鲲鹏920系列是华为自主设计的高性能服务处理器片上系统。每个鲲鹏920处理器片上系统集成最多64个自研处理器内核,其典型主频为2.6GHz。处理器内核的指令集兼容ARMv8.2,支持ARMv8.2A体系结构的所有强制(Mandatory)要求的特性,并且实现了ARMv8.3、ARMv8.4和ARMv8.5的部分特性,例如ARMv8.3JSConv、ARMv8.4MPAM和ARMv8.5SSBS等。鲲鹏920处理器片上系统采用三级Cache结构,每个处理器内核集成64KB的L1 I Cache(L1指令Cache)和64KB的L1 D Cache(L1数据Cache),每核独享512KB L2 Cache,处理器还配置了L3 Cache,平均每核容量为1MB。 鲲鹏920处理器片上系统内置8个DDR4(Double Data Rate 4,第4代双数据率)SDRAM(Synchronous Dynamic RandomAccess Memory,同步动态随机存取存储器)控制器,最高数据传输率可达2933MT/s(Megatransfer per Second,每秒百万次传输次数)。 鲲鹏920处理器片上系统集成了PCI Express控制器,支持×16、×8、×4、×2、×1 PCI Express 4.0,并向下兼容PCI Express 3.0/2.0/1.0。 鲲鹏920芯片还是世界上第一款支持CCIX Cache一致性接口(Cache Coherency Interface)的处理器。CCIX是AMD、ARM、华为、IBM、高通、Mellanox及赛灵思(Xilinx)等七家公司组建的CCIX联盟制定的接口标准,该接口的目标是实现加速器芯片互连。通过CCIX接口可以实现CPU与APU(Accelerated Processing Unit,加速处理器)、FPGA、网络交换部件、视频处理器等多种加速器的紧耦合互连。 鲲鹏920处理器片上系统内置16个SAS(Serial Attached SCSI,串行接口SCSI)/SATASATA即Serial Advanced Technology Attachment,串行高级技术附件。3.0控制器,以及2个RoCE(RDMA over Converged Ethernet,聚合以太网上的远程直接内存访问)v2引擎,支持25GE/50GE/100GE标准网络接口控制器。 鲲鹏920处理器片上系统集高性能、高吞吐率、高集成度和高能效于一身,把通用处理器计算推向新高度。 图3.3给出了鲲鹏920处理器片上系统的基本组成示意图,从图3.3中可以了解鲲鹏处理器系统的整体组成结构。图3.3的正中是由一致性互连总线包围起来的处理器内核组合,这种架构最多可以配置64个TaiShan V110处理器内核,这些处理器内核通过分组的方式组织。 图3.3鲲鹏920处理器片上系统的基本组成示意图 除了众多处理器内核之外,鲲鹏处理器片上系统还集成了多种系统控制器和核心外设控制器,例如DDR控制器、以太网接口、PCI Express扩展接口等。 3. 鲲鹏920处理器片上系统的特征 鲲鹏920处理器片上系统的主要亮点可以概括如下。 1) 高性能 鲲鹏920处理器片上系统是华为海思全自研的CPU内核,在兼容ARMv8A指令集的基础上,鲲鹏芯片集成了诸多革命性的改变。面对计算子系统的单核算力问题,鲲鹏920处理器片上系统针对每个核进行了优化设计,采用多发射、乱序执行、优化分支预测等技术,算力提升50%。鲲鹏920处理器片上系统支持2路和4路处理器片间互连,通过提升运算单元数量、改进内存子系统架构等一系列64位ARM架构的诸多精巧设计,大幅提升了处理器的性能。鲲鹏920处理器片上系统还内置了多种自研的硬件加速引擎,如内置加密算法加速引擎、SSL(Secure Sockets Layer,安全套接字层)加速引擎、压缩/解压缩加速引擎等。 以运行在2.6GHz的64核鲲鹏9206426处理器为例,该芯片运行业界标准的SPECint_rate_base2006 Benchmark评估程序得分超过930,比同档次的业界主流CPU性能高出25%,创造了计算性能新纪录。 2) 高吞吐率 鲲鹏920处理器片上系统是业界首款基于7nm工艺的数据中心ARM处理器,采用业界领先的CoWoS(Chip on Wafer on Substrate,基底晶圆芯片)封装技术,实现多晶片(Die)合封,不仅可以提升器件生产制造的良率,有效控制每个晶片的面积,降低整体成本,而且这种“乐高架构”的组合方式更加灵活。例如,鲲鹏920处理器片上系统的处理器部件和I/O部件是独立分布在不同的晶片上的,当处理器单独升级时可以保留上一代的I/O部件,其中一个原因就是二者的生命周期不同。 通过联合优化设计,鲲鹏920攻克了芯片超大封装可靠性及单板可靠性难题,成功将DDR4的通道数从当前主流的6通道提升到8通道,带来46%的内存带宽提升,同时容量也可按需提高。DDR4的典型主频从2666MHz提升至2933MHz,保证了鲲鹏920超强算力的高效输出。 鲲鹏920处理器片上系统还集成PCI Express 4.0、CCIX等高速接口,单槽位接口速率从8Gb/s提升至16Gb/s,为业界主流速率的两倍,使得鲲鹏920可以更高效地和外设或其他异构计算单元通信,有效提升存储及各类加速器的性能,I/O总带宽提升66%。 鲲鹏920处理器片上系统还集成了2个100Gb/s RoCE端口,网络接口速率从主流的25GE标准提升到100GE标准,网络带宽提升4倍。 3) 高集成度 与英特尔公司的Intel 64系列处理器的组织结构不同,鲲鹏920处理器片上系统不仅包含了通用计算资源,还同时集成了南桥、RoCE网卡和SAS存储控制器等3种芯片,构成了功能完整的片上系统。单颗芯片实现了传统上需要4颗芯片实现的功能,大幅度提升了系统的集成度,同时释放出更多槽位用于扩展更多功能。 4) 高能效 大数据和人工智能的应用带动了云计算的兴起,使计算资源的需求大幅度提升,数据中心的规模越来越大,总功耗也越来越高。以往在移动计算应用场景中出尽风头的ARM架构处理器在服务器市场也体现出明显的功耗优势。鲲鹏920处理器片上系统的能效比超过主流处理器30%,48核的鲲鹏9204826处理器的单位功耗SPECint性能测评分高达5.03。 4. 鲲鹏920处理器片上系统的逻辑结构 图3.4给出了鲲鹏920(Hi162x)系列处理器芯片的逻辑结构示意图。 在鲲鹏处理器逻辑架构中,连接片上系统内各个组成部件的是Cache协议一致性片上互连总线。片上总线提供了各个处理器内核、设备和其他部件对系统存储器地址空间的一致性访问通道。各个总线主控者通过总线访问存储器中的数据或者设备接口内的寄存器,设备发出的中断请求也通过总线传递给处理器内核。 处理器内核是鲲鹏处理器芯片的核心。不同版本的鲲鹏处理器内置了24~64个高性能、低功耗的TaiShan V110处理器内核。 鲲鹏处理器系统的存储系统由多级片内Cache、片外DDR SDRAM存储器和外部存储设备组成。鲲鹏处理器片上系统内集成了一至三级Cache及其相关的管理逻辑和DDR控制器,在存储管理单元的配合下可以实现高性价比的多级存储系统。 图3.4鲲鹏处理器芯片的逻辑结构示意图 除了处理器内核和存储系统外,鲲鹏处理器片上系统还集成了大量外设资源。片上总线上还连接了GICD(Generic Interrupt Controller Distributor,通用中断控制器分发器)和ITS(中断翻译服务)部件。 3.1.2TaiShan V110处理器内核微架构 1. TaiShan V110处理器内核的特性 处理器内核(Core)是鲲鹏处理器的最基本的计算单元,通常是由运算器和控制器组成的可以执行指令的处理器的核心组件。TaiShan(泰山)V110处理器内核完整实现了ARMv8A架构规范,支持ARMv8A架构规范的相关特性。 ARMv8A架构定义了处理器的功能规范,但并未限定处理器如何设计与实现,ARM规范给出的功能结构中也包括一些可选的功能和可选的功能扩展,处理器内核可以根据需要有选择地实现这些可选特性。TaiShan V110处理器内核在兼容ARMv8A架构的基础上融合了华为海思的先进处理器技术。 TaiShan V110处理器内核的特性概括如下。 1) 执行部件特性 (1) 执行状态: 支持AArch64执行状态,但不支持AArch32执行状态。 (2) 异常等级: 支持EL0、EL1、EL2和EL3全部四个异常等级。 (3) 指令集: 支持A64指令集,不支持T32EE(ThumbEE)指令集。 (4) 安全状态: 支持安全状态与非安全状态。 (5) 流水线: 支持超标量和可变长、乱序指令流水线。 (6) 分支预测机制: 支持提前分支预测器,集成了分支目标缓冲器(Branch Target Buffer,BTB)、全局历史缓存(Global History Buffer,GHB)RAM(RandomAccess Memory,随机存取存储器)、返回堆栈、循环预测器及间接预测器等功能。 2) 片内Cache和TLB特性 (1) TLB(Translation Lookaside Buffer,转换后援缓冲器): 由分离的L1 I TLB、L1 D TLB和统一的L2 TLB组成的两级TLB系统,含本地支持可变页长度的48表项全相联L1 I TLB、本地支持可变页长度的32表项全相联L1 D TLB和每个处理器内核共享的1152表项的4路组相联统一L2 TLB。 (2) 片内Cache: 两级片内Cache,包括固定大小为64KB的L1 I Cache和64KB的L1 D Cache,再加上每个处理器内核私有的8路512KB L2 Cache。L1 Cache和L2 Cache行大小均为64B(字节)。 (3) Cache和TLB差错校验: L1 D Cache和L2 Cache支持SECDED(Single Error Correction Double Error Detection,单二进制位纠错双二进制位检错)差错校验机制; L1 D Cache和L2 Cache支持ECC(Error Correction Code,纠错码)保护; L1 I Cache和L2 TLB支持奇偶校验保护。 3) 总线和互连规范 TaiShan V110处理器内核的内外部互连遵从一系列开放的总线标准,这些标准定义在先进微控制器总线架构(Advanced Microcontroller Bus Architecture,AMBA)规范协议族中,主要关联两个协议: 其一是AMBA版本5的一致性集线器接口(Coherent Hub Interface,CHI)体系结构规范的CHIE协议(AMBA CHI Architecture Specification,Issue E),该协议定义了全一致性处理器互连与高性能互连接口; 其二是定义先进外设总线(Advanced Peripheral Bus,APB)的AMBA 3 APB协议。 4) 调试与系统监测特性 TaiShan V110处理器内核实现了ARMv8规范的调试架构,遵从ARM公司推出的片上系统调试及性能、监视和优化的CoreSight基础架构。处理器内核支持PMUv3架构、多处理器间调试的交叉触发接口(Cross Trigger Interface,CTI)及AMBA 3先进跟踪总线(Advanced Trace Bus,ATB)协议等规范。 5) 系统设备和处理器接口 TaiShan V110处理器内核支持ARM通用定时器架构(ARM Generic Timer Architecture)和通用中断控制器GICv3架构(仅含通用中断控制器 CPU接口),因而片内集成了符合ARM规范的通用定时器和通用中断控制器。 2. TaiShan V110处理器内核的功能结构 图3.5为TaiShan V110处理器内核的顶层功能图,TaiShan V110处理器内核集成了处理器及其私有的L2 Cache。处理器内核由以下部件组成: 取指(Instruction Fetch)部件、指令译码(Instruction Decode)部件、指令分发(Instruction Dispatch)部件、整数执行(Integer Execute)部件、加载/存储单元(Load/Store Unit)、第二级存储系统(L2 Memory System)、增强的SIMD与浮点运算单元(Advanced SIMD and FloatingPoint Unit)、通用中断控制器CPU接口(GIC CPU Interface)、通用定时器(Generic Timer)、PMU及调试(Debug)与跟踪(Trace)部件等。 图3.5TaiShan V110处理器内核的顶层功能图 1) 取指部件 取指部件负责从L1 I Cache取出指令并向指令译码部件发送指令,每个周期最多发送4条指令。鲲鹏920的取指部件支持动态分支预测和静态分支预测。 取指部件集成了64KB的4路组相联L1 I Cache,Cache行大小为64B,其数据RAM和标记RAM每8个二进制位含1位奇偶校验保护位。取指部件还包含一个32表项的全相联L1 I TLB(转换后援缓冲器),页大小支持4KB、16KB、64KB、2MB、32MB、512MB和1GB。两级动态预测器内置分支目标缓冲器(BTB),支持高速目标地址生成。静态分支预测器、间接预测器和返回堆栈也是取指部件的组成部件。 2) 指令译码部件 指令译码部件负责A64指令集的译码,支持A64指令集中的增强SIMD及浮点指令集。指令译码部件也负责完成寄存器重命名操作,通过消除写后写(WriteAfterWrite,WAW)和写后读(WriteAfterRead,WAR)冒险支持指令的乱序执行。 3) 指令分发部件 指令分发部件控制译码后的指令被分发至执行单元的指令流水线的时间,以及返回结果被放弃的时间。指令分发部件包含了ARM处理器内核的众多寄存器,如通用寄存器文件、增强SIMD及浮点寄存器文件和AArch64状态下的系统寄存器等。 4) 整数执行部件 整数执行部件包含三条算术逻辑运算单元(Arithmetic Logical Unit,ALU)流水线和一条整数乘除运算单元(Multiplication/Division Unit,MDU)流水线,支持整数乘加运算,也包含交互式整数除法硬件电路、分支与指令条件码解析逻辑及结果转发与比较器逻辑电路等。 5) 加载/存储单元 加载/存储(Load/Store,LS)单元负责执行加载和存储指令,也包含了L1 D Cache的相关部件,并为来自L2存储系统的存储器一致性请求提供服务。 其中,L1 D Cache容量为64KB,采用4路组相联机制,Cache行大小为64B,每32位实现差错修正码(Error Correction Code,ECC)保护。加载/存储单元也包含一个32表项的全相联L1 D TLB,页大小支持4KB、16KB、64KB、2MB、32MB、512MB和1GB。该部件支持通过自动硬件预取器生成针对L1 D Cache和L2 Cache的数据预取请求。 6) 第二级存储系统 TaiShan V110处理器内核的第二级存储系统在L1 I Cache和L1 D Cache缺失时为每个处理器内核提供服务,并管理AMBA 5 CHIE主接口上的服务请求。 第二级存储系统包含512KB的L2 Cache,支持8路组相联操作,每64位实现数据ECC保护。 第二级存储系统中还保存了每个处理器内核的L1 Cache的标记RAM的副本,用于处理监听请求。 每个处理器包含1152个表项的4路组相联L2 TLB。 第二级存储系统还集成了一个自动硬件预取器,支持可编程的取指距离(Programmable Instruction Fetch Distance)。 7) 增强SIMD与浮点运算单元 增强SIMD与浮点运算单元用于支持ARMv8A架构的增强SIMD与浮点运算类指令的执行。此外,该执行单元也可用于支持可选的加密引擎。 8) 通用中断控制器CPU接口 通用中断控制器(GIC)CPU接口负责向处理器发送中断请求。 9) 通用定时器 通用定时器可以为事件调度提供支持,并可以触发中断。 10) PMU PMU(性能监视器)为调优系统性能提供支持。PMU部件可以监视ARMv8A架构定义的事件以及鲲鹏自定义的事件。软件可以通过PMU获取诸如L1 D Cache缺失率等PMU事件的性能信息。 11) 调试与跟踪部件 通过TaiShan V110的调试与跟踪部件可以支持ARMv8的调试架构,例如通过AMBA先进外设总线(Advanced Peripheral Bus,APB)的从接口访问调试寄存器。调试与跟踪部件中也集成了基于ARM PMUv3架构的PMU和用于处理器内核调试的交叉触发接口。TaiShan V110仅支持指令跟踪,不支持数据跟踪。 3.1.3鲲鹏920处理器片上系统的逻辑结构 通常所说的鲲鹏处理器芯片不仅仅包含传统CPU的处理器内核部分,而是由多种部件组合而成的片上系统,有时简称为芯片(Chip)。一个鲲鹏芯片包含多个晶片,在鲲鹏920系统的电路板上占据一个槽位(Socket)。 图3.6给出了鲲鹏处理器片上系统的物理组成部件的简化逻辑示意图。从图3.6中可以看出,鲲鹏处理器系统由若干处理器内核集群(CCL)、I/O集群(ICL)等部件通过片上总线互连而成。支持Cache一致性的片上总线连接了处理器片上系统上的各个部件,每个核、集群和其他部件对系统存储器地址空间、集群及其他可寻址部件(如其他设备中的寄存器)的一致性访问均通过该总线进行。每个设备也通过该总线向处理器提交中断请求。 图3.6鲲鹏处理器片上系统的组成示意图 1. 处理器内核集群 在鲲鹏处理器片上系统中,将若干处理器内核及其相关附属硬件组合成集群(Cluster),作为共享资源的部件。此处的集群是指设备组织的物理形态,也即由多台设备或多套部件采用物理集中、统一管理的方式构成的计算系统。 例如,鲲鹏920处理器片上系统中的处理器内核被分组为内核集群(Core CLuster,CCL),也称CPU集群(CPU CLuster)。每个内核集群包含四个处理器内核及其相应的L1 Cache,以及每个处理器内核私有的L2 Cache。这个组合结构有时也被称为TaiShan组合(TaiShan Hierarchy)。 在鲲鹏920处理器片上系统中,所有的内核集群都支持全一致性。每个内核集群共享同一个系统总线接口,每个集群的Cache中的最新数据可以被总线上的其他功能单元一致性地访问。 图3.7显示了鲲鹏920处理器CCL的组成。 2. I/O集群 I/O集群(I/O CLusters,ICL)由若干设备构成,这些设备或者物理位置相近、共享同一个系统总线接口和内部接口,或者逻辑上具有相关性。 一个典型的鲲鹏I/O集群通常包含以下部件: (1) 多种设备(Device)。此处的设备指的是处理器内核以外的物理组件,例如I/O部件、片上加速器、DDR控制器和管理设备等。鲲鹏920处理器片上系统上的每个设备都被赋予一个唯一的设备标识(Device ID)。 (2) 一个系统总线接口。 (3) 一个可选的系统存储管理单元(SMMU),为设备提供地址转换和地址保护等功能。 (4) 用于初始化和常规配置的系统控制/子系统控制部件。该部件主要由固件(Firmware)使用。 (5) 分发器(Dispatch)部件。该部件的功能是对物理地址(Physical Addresses,PA)译码,以便每个设备访问设备寄存器空间。 (6) 若干调度器(Scheduler)。可选的调度器的功能是在存在大量设备时汇聚这些设备的访存流量。 图3.8显示了鲲鹏处理器I/O集群的组成示意图。 图3.7鲲鹏处理器CCL的组成 示意图 图3.8鲲鹏处理器I/O集群的组成示意图 一个特定的I/O集群可以支持DMA方式,也可以不支持DMA,但是每个设备都有一个可以通过程序访问的寄存器。支持DMA方式的设备会向系统地址空间主动发出读写操作请求,并向调度器发出汇聚这些读写操作的请求。系统存储管理单元处理这一请求后将使用物理地址访问总线。 访问设备寄存器的地址是从片上总线分发到设备上的物理地址。 3. 超级内核集群 更进一步,物理位置接近并共享其他资源的多个内核集群则组成超级内核集群(Super Core CLuster,SCCL)。一个超级内核集群可能会包含一组L3 Cache、若干DDR控制器和一个I/O集群。 图3.9显示了鲲鹏处理器超级内核集群的组成结构。 图3.9鲲鹏处理器超级内核集群的组成结构 鲲鹏920处理器片上系统的每个超级内核集群包含6个内核集群、2个I/O集群和4个DDR控制器。 每个超级内核集群封装成一个CPU晶片。每个晶片上集成了4个72位(64位数据加8位ECC)、数据传输率最高为3200MT/s的高速DDR4通道,单晶片可支持最多512GB×4的DDR存储空间。 L3 Cache在物理上被分为两部分: L3 Cache TAG和L3 Cache DATA。L3 Cache TAG集成在每个内核集群中,以降低监听延迟。L3 Cache DATA则直接连接片上总线。 Hydra根代理(Hydra Home Agent,HHA)是处理多芯片系统Cache一致性协议的模块。 POE_ICL是系统配置的硬件加速器,一般可以用作分组顺序整理器、消息队列、消息分发或者实现某个处理器内核的特定任务等。 此外,每个超级内核集群在物理上还配置了一个通用中断控制器分发器(GICD)模块,兼容ARM的GICv4规范。当单芯片或多芯片系统中有多个超级内核集群时,只有一个GICD对系统软件可见。 4. 超级I/O集群 超级I/O集群(Super I/O CLuster,SICL)由物理位置接近的若干个I/O集群和一个Hydra接口部件组成,提供I/O接口和加速及管理功能。在需要时,一个超级I/O集群也可以包含一个内核集群。超级I/O集群提供了PCI Express接口和Hydra接口,是系统必备的集群。 鲲鹏920处理器片上系统的超级I/O集群由4个I/O集群、一个Hydra接口模块和一个独立的智能管理单元(Intelligent Management Unit,IMU)组成。图3.10给出了鲲鹏920处理器片上系统超级I/O集群的组成示意图。 图3.10鲲鹏处理器超级I/O集群的组成示意图 智能管理单元是负责整个芯片管理的部件,该部件完全独立于鲲鹏处理器的计算应用系统。 PCI Express总线、以太网接口、外存储器接口控制器以及Hydra接口都使用高速串行通信信道,因此,在超级I/O集群部件中配置了若干SERDES(SERializer/DESerializer,串行器/解串器)宏单元,用于支持发送端的并/串转换和接收端的串/并转换操作。 网络I/O集群(网络ICL)部件包含片上以太网接口控制器,支持100Gb/s、50Gb/s、25Gb/s和10Gb/s等各种速率的接口,并支持RoCE和RoCEv2功能。 PCI Express I/O集群(PCIe_ICL)则实现PCI Express总线的根复合体(Root Complex)功能。该部件支持PCI Express 4.0规范,其根端口的最大数量是20。PCI Express I/O集群中还包含了支持加速器Cache一致性互连功能的CCIX部件。 Hydra接口是支持多片片上系统互连的可扩展高带宽、低延迟物理接口。Hydra接口可以在多芯片系统之间提供统一地址空间。Hydra片间总线遵从的Hydra协议是华为海思定义的支持在多芯片系统之间保持Cache一致性的规范。每个Hydra接口最多支持4个处理器。 HAC_ICL是一个组合部件,集成了华为自研的硬件安全加速引擎、压缩/解压缩加速引擎等多种海思加速控制器(Hisilicon Accelerate Controller,HAC)及外存储器主机控制器等部件。 IO_MGMT_ICL也是一个组合部件,集成了USB主机控制器、高性能RSA加速引擎等I/O部件。 IMU是智能管理单元,实现鲲鹏920系统的管理功能。 由于Hydra接口及PCI Express、千兆以太网接口(GE)和万兆以太网接口(XGE)等所有高速I/O部件都集成在超级I/O集群上,故所有处理器卡都需包含一个超级I/O集群。 超级内核集群和超级I/O集群被统称为超级集群(Super CLuster,SCL),并由SCL ID标识。 鲲鹏920处理器片上系统上可以包含一个或多个超级内核集群,以及一个或多个超级I/O集群。 5. 鲲鹏920系统的部件互连 在鲲鹏920处理器片上系统内,内存储系统和连接处理器及各种设备的互连网络被合称为计算子系统(Computing Subsystem)。其中,互连网络将处理器、内存储系统和设备相互连接。按照层次架构,一个超级集群内的各个子系统通过环总线(Ring Bus)互连互通,而多个超级集群之间则由超级集群链路层连接器(SCL Link Layer Connector,SLLC)提供互连专用通道,在多片片上系统之间则通过Hydra接口实现互连。 互连网络按照功能可划分为以下部分。 1) 片上网络 片上网络(Onchip Network)负责芯片内部互连,用于将系统内的各个内核集群、Cache、DDR控制器及I/O集群内部的各种设备互连在一起,并高效完成各部件之间的通信。 片上网络由环总线、超级集群链路层连接器、调度器(Scheduler)和分发器(Dispatch)等模块组成,在链路层实现片上各部件之间的信息传输。调度器和分发器则是如图3.8所示的I/O集群的组成部件。 环总线是鲲鹏处理器片上系统内部连接各个设备并为设备提供交互访问控制的总线模块。环总线通过多个名为交叉站(Cross Station,CS)的节点互连而成,每个交叉站的主要功能是保证片上系统内部各个设备之间的传输通道按照一定的顺序正确且高效地互连互通。因此,环总线需要保证数据通路不能有任何传输错误,而且环总线在系统上电后无须配置即可工作。 交叉站可以连接处理器内核、L3 Cache、Hydra根代理(HHA)等不同设备。各个设备之间的数据传输通常都要经过环总线完成。只有设备私有接口的对外交互通过专线完成,例如通用中断控制器的中断上报、加速器之间的私有通信等。 超级集群链路层连接器负责连接多个超级集群的环总线通路,将一个超级集群的环总线数据按照约定的路由传输至另一个超级集群的环总线中。由于超级集群内部的数据交互流量要大于超级集群环之间的流量,故超级集群链路层连接器的最高带宽一般小于环总线能够提供的最高带宽,而且超级集群内部的环总线的数据线宽度往往更高,因而超级集群链路层连接器还需要将数据进行分组打包并压缩后才进行传输。 调度器是负责将I/O集群内部的多个功能相关设备的访问请求有序传递至系统的组件。调度器对各设备的访问请求进行传输调度并汇聚传输流量,然后再经由系统存储管理单元接入环总线的交叉站节点,将数据流量引入片上系统的其他部件。调度器还可以调整设备下发命令的服务质量,也可以对设备流量进行限制。 I/O集群与环总线通过单一接口互连,故I/O集群在收到来自鲲鹏处理器片上系统内其他设备的访问请求时,需要将收到的访问请求进行分发。和调度器的功能相对应,分发器将从环总线收到的访问请求分发至正确的设备进行处理。同时分发器还可以通过内部的数据缓冲器平滑高速访问和低速设备之间的速率差异。 2) Hydra接口 Hydra接口是支持片间扩展的华为私有高性能接口,支持多片鲲鹏处理器片上系统在单一电路板上集成,并实现多芯片间的数据一致性高效互连互通。Hydra接口主要由协议适配器(Protocol Adapter,PA)和Hydra接口链路层控制器(Hydra Link Layer Control,HLLC)两类模块构成,而数据一致性功能则在主存系统中实现。 PA模块主要完成ARM架构CHI协议和Hydra协议之间的适配功能。CHI协议即ARM架构的AMBA一致性集线器接口协议,是超级集群使用的总线协议。CHI协议除了定义片内的读写访问规范外,还定义了片内数据一致性的维护规则。而Hydra协议则完成片间数据一致性的维护。 PA模块通过实现下面的功能完成两个协议之间的适配: CHI和Hydra之间数据格式的转换; 片间发送侧请求缓冲区管理; 片间接收侧地址相关性检测; 片间数据一致性处理; 与环总线侧/HLLC侧之间的流控处理; 片间流量统计功能等。 Hydra接口采用高速总线常用的高速SERDES通道实现片间互连,以获得高带宽、低延时的片间访问性能。HLLC则是介于PA和SERDES总线之间的Hydra接口链路层控制器,完成Hydra协议数据在SERDES物理通道上的数据格式适配。在片间发送侧,HLLC主要完成Hydra协议中各逻辑通道的数据调度和CRC(循环冗余校验)嵌入等功能。在片间接收侧,HLLC主要完成CRC校验和Hydra协议中各逻辑通道的数据分发功能。 3) 映射与译码组件 为了保证各个内核集群与设备之间的互访可以正确通达,需要识别各访问目的地。由分布在互连系统各个节点上的地址译码器组成的映射与译码(Mapping and Decode)组件负责根据访问的属性和地址识别传输目的地,并产生正确的目标标识(TgtID)用于片上网络的路由判断,以保证将访问请求传输至正确的目的地。 鲲鹏架构是一个组织灵活的多级复杂系统,系统内的寻址译码逻辑被切分成3个层次,以便将整个物理地址空间逐级分配至对应的访问空间。地址译码功能集成在系统各层级的汇聚处: 一级译码集成在访问请求进入环总线接口之前,译码结果可以指示正确的环总线端口; 二级译码集成在各个I/O集群的分发器内,译码结果可以指示I/O集群内正确的分发器出口; 三级译码则集成在使用了共享总线的分发器出口处,译码结果指示多个设备共享一个分发器出口时具体的设备选择。 4) 系统存储管理单元 系统存储管理单元按照ARM系统存储管理单元规范工作,将设备虚拟地址或中间物理地址转换为系统物理地址,同时完成访问顺序、可缓存性和可共享性等属性的配置。 鲲鹏的系统存储管理单元部件可实现对48位物理地址空间的访问,并可同时处理来自多个设备的事务,根据事务的数据流标识(StreamID)使用不同的一级页表和二级页表进行地址和属性转换。 当设备不使用虚拟化功能或直接发出访问的物理地址时,系统存储管理单元可以被旁路,此时系统存储管理单元仅作为普通的数据通路,进入片内互连网络。 5) 中断系统 中断系统负责将设备的中断请求上报至指定的处理器内核,或者将中断请求在多个处理器内核之间传递。中断系统包括通用中断控制器(GIC)和中断翻译服务(ITS)部件等模块。 鲲鹏920系统的通用中断控制器遵循ARM的通用中断控制器规范,实现SGI、PPI、SPI及LPI中断的管理、中断路由和优先级配置等功能,也支持ARMv8的AArch64安全化扩展和ARMv8的AArch64虚拟化扩展。 鲲鹏的超级中断翻译服务部件(Hyper Interrupt Translation Service)实现LPI中断重定向服务,将LPI中断请求路由到不同的处理器内核内,并且支持动态配置中断请求和处理器内核的路由关系。 图3.11显示了鲲鹏处理器计算子系统的逻辑框架,可以从中看出互连系统的拓扑结构。 图3.11鲲鹏处理器计算子系统的逻辑框架 3.1.4鲲鹏920处理器片上系统的内存储系统 1. 鲲鹏920处理器存储系统的层次结构 鲲鹏920处理器片上系统的内存储系统也是由多级高速缓冲存储器Cache和主存构成的。鲲鹏920处理器片上系统从单超级内核集群角度看到的内存储器逻辑结构与图1.6(d)所示的片内共享L3 Cache架构的多核处理器存储组织结构相似。图3.12给出了鲲鹏920处理器片上系统的内存储系统的组成示意图。 图3.12鲲鹏920处理器片上系统的内存储系统组成示意图 其中,Cache包括每个处理器内核私有的L1 Cache和L2 Cache,以及每个超级内核集群配置的共享L3 Cache。每一个处理器内核集成了私有的64KB L1 I Cache(L1指令Cache)、64KB L1 D Cache(L1数据Cache)以及512KB L2 Cache。L3 Cache则是系统级片上三级高速缓存。L3 Cache DATA (数据块)处在内核集群之外,而L3 Cache TAG (标记块)则集成在每个内核集群中,以降低监听延迟。 2. 鲲鹏920处理器片上系统的L3 Cache L3 Cache是系统级片上三级高速缓存,该Cache被CPU、各种加速器和I/O设备共用。鲲鹏920系统的L3 Cache也是系统的最末级Cache(Last Level Cache,LLC)。 L3 Cache由L3 Cache TAG和L3 Cache DATA两部分组成: L3 Cache TAG是L3 Cache的协议处理模块; L3 Cache DATA是L3 Cache的数据存储区,用于缓存主存数据。 在系统启动期间(L3 Cache TAG还没有被使用之前),L3 Cache DATA的全部存储空间都可以被当作一块SRAM(Static RandomAccess Memory,静态随机存取存储器)使用,存放系统所需的与启动相关的内容, 图3.13鲲鹏处理器L3 Cache的组成 与操作示意图 配合完成系统启动。L3 Cache DATA中有256KB存储空间,在任何时候都可以被当作SRAM使用,且支持安全地址空间的隔离。 L3 Cache采用组相连结构,固定使用写回(WriteBack)策略,并支持随机替换、DRRIP(Dynamic ReReference Interval Prediction,动态重引用区间预测)和PLRU(Pseudo Least Recently Used,伪最近最少使用)三种替换算法,其Cache行(Line)大小固定为128字节(32字)。 图3.13给出了鲲鹏920处理器片上系统L3 Cache的组成与操作流程示意图,从图中可以看出访问主存和Cache时的系统数据流。 当各处理器内核集群或加速器欲读取主存DDR存储器的可缓存(Cacheable)地址空间时,读写请求首先到达L3 Cache TAG。 如果检索L3 Cache TAG时地址命中,则向L3 Cache DATA发出读操作请求,并从中获取数据; 如果检索L3 Cache TAG的结果是数据缺失并且被访问的数据是存储在主存中的,则会向DDR存储器发出读数据请求,并从DDR存储器读回数据。数据被返回请求数据的处理器内核或者加速器,同时将在L3 Cache中为该数据分配空间并将数据写入L3 Cache DATA中。 L3 Cache是片上一致性Cache,鲲鹏920处理器片上系统支持硬件维护的Cache一致性,所以系统可以像对称多处理器系统一样运行。 维护Cache一致性包含三个层次: (1) 维护内核集群内L2 Cache之间的Cache一致性; (2) 维护各个设备和L3 Cache分区之间的一致性; (3) 维护片间Cache一致性,处理Hydra接口的一致性请求,完成Hydra协议的一致性维护。 3. 鲲鹏920处理器片上系统的主存系统 鲲鹏920系统的主存则主要是片外以DDR SDRAM为主的大容量存储器。在鲲鹏架构中,鲲鹏920系统的主存储系统的组成部件主要包括Hydra根代理(HHA)、DDR SDRAM控制器(DDR SDRAM Controller,DDRC)和片外DDR存储器颗粒或DDR DIMM(DualInlineMemoryModules,双列直插存储模块)内存条。 图3.14为鲲鹏920处理器片上系统主存储器的系统组成示意图。 图3.14鲲鹏920处理器片上系统主存储器系统组成示意图 在鲲鹏处理器架构中,由主存系统负责片内和片间数据一致性的管理维护,以此实现高效的对称多处理器系统。在图3.14中,Hydra根代理(HHA)基于华为自定义的维护多集群之间数据一致性的协议标准HCCS(Huawei Cache Coherency System,华为Cache一致性系统)协议,是负责维护晶片间以及Socket间数据一致性的模块。如前所述,Hydra协议可实现多个L3 Cache之间或设备与L3 Cache之间的MESI(Modified Exclusive Shared or Invalid,修正的排他共享或失效)协议一致性。Hydra根代理位于DDR控制器与片上总线的环总线之间,为系统提供DDR访问通路,支持高带宽低延迟的DDR读写访问。 在鲲鹏的多级架构中,多个超级内核集群和超级I/O集群互连组成一颗片上系统,HHA作为基于Hydra协议的多个超级内核集群和超级I/O集群的根代理维护同一芯片内的多个超级内核集群和超级I/O集群之间的数据一致性。 多颗片上系统还可互连组成一个更大的数据一致性系统,每颗芯片内包含一至两个超级内核集群和超级I/O集群。HHA作为多芯片数据一致性系统的根代理,维护多芯片系统内所有超级内核集群和超级I/O集群的数据一致性。Hydra根代理最大支持四个芯片的数据一致性互连,组成高性能的支持数据一致性的CCNUMA计算节点。 DDR SDRAM存储器是鲲鹏920系统在运行过程中的数据存储中心。DDR SDRAM控制器(DDR SDRAM Controller,DDRC)实现对DDR SDRAM的存取控制,完成片上网络传输的访问请求到DDR SDRAM的时序转换,并配合系统的服务质量管理机制对访问请求进行流量管理。 华为鲲鹏920处理器片上系统包括8个DDR控制器子系统,对应8个独立的DDR通道。鲲鹏系统中的DDR控制器支持DDR3 SDRAM和DDR4 SDRAM的颗粒或DIMM内存条。鲲鹏920处理器的每个DDR控制器子系统支持最多2个DIMM内存插槽,每个DIMM插槽支持最多4个物理存储体。 鲲鹏920处理器片上系统的读写访问经过DDR控制器子系统的地址译码、调度、协议转换、接口时序处理等步骤,与符合JEDEC标准JESD794B协议的片外DDR4 SDRAM颗粒或DDR4 DIMM内存条通信。 4. 鲲鹏920处理器片上系统的DDR控制器 如图3.14所示,华为鲲鹏920处理器的每个DDR控制器子系统包括RASC(RAS Controller,RAS控制器)、HPC(High Performance Controller,高性能控制器)、DMC(Dynamic Memory Controller,动态存储器控制器)和HSPHY(HighSpeed PHY,高速物理层)四个模块。 鲲鹏920处理器片上系统支持ARMv8A架构的可靠性、可用性和可服务性(Reliability, Availability and Serviceability,RAS)特性,RAS控制器即用于实现DDR控制器子系统的RAS特性。华为鲲鹏920的每个DDR通道数据位宽为72位,其中有效数据占64位,可选的校验数据占8位。RAS控制器使用DDR接口数据总线的8位校验数据。 高性能控制器用于对系统访问进行高效率、高服务质量的调度。 动态存储器控制器完成系统地址到DDR SDRAM物理地址的转换,以便使该访问符合DDR4协议(JESD794B)规范,并通过DFI协议(DFI 4.0)将访问请求发送到HSPHY。 高速物理层通过I/O与片外DDR4 SDRAM或DDR4 DIMM连接,将DFI协议转换为DDR4协议,并通过对接口时序的微调和对接口特性的校准实现采样窗口的最大化。 5. 鲲鹏920处理器片上系统的NUMA架构 鲲鹏920处理器片上系统支持非统一内存访问(NonUniform Memory Access,NUMA)架构。多个处理器内核组合成一个节点(Node),每个节点相当于一个对称多处理器(SMP)。一个鲲鹏920处理器片上系统内部的各个节点之间通过片上网络实现互连通信,不同的鲲鹏芯片之间则通过Hydra接口实现高带宽、低时延的片间互连通信。在NUMA架构下,整个内存空间在物理上是分布式架构,所有内存的集合就是整个系统的全局内存。 在鲲鹏920处理器片上系统内,每个处理器内核访问内存的时间延迟取决于内存相对于处理器的位置,访问本地节点内的本地内存更快。鲲鹏920处理器片上系统的这种NUMA架构既能够实现高性能,又能够解决对称多处理器架构下的总线瓶颈问题对处理器内核数的制约,提供更强的多核扩展能力,以及更强大、更灵活的计算能力。 每个鲲鹏处理器内核既可以访问自己私有的L1 Cache和L2 Cache,也可以访问同一超级内核集群内的共享L3 Cache,还可以访问其他超级内核集群上的L3 Cache或者片外DDR主存储器。显然,处理器访问存储器的延迟受被命中的存储器的速度影响,而数据读写双方的物理距离也影响访问延迟。 图3.15显示了鲲鹏920处理器片上系统的内存储系统的层次结构及其访存速度差异。图3.15中的标号①~⑥是6种典型的内存访问路径。访存延迟从低到高依次为: ① 访问处理器内核私有的L1 Cache; ② 访问处理器内核私有的L2 Cache; ③ 访问同一超级内核集群内部的共享L3 Cache DATA; ④ 访问同一芯片上其他超级内核集群内的共享L3 Cache DATA; 图3.15鲲鹏处理器系统内存储器的层次结构 ⑤ 访问片外DDR存储器; ⑥ 访问其他芯片上某超级内核集群内的共享L3 Cache DATA。 实际上,L3 Cache被划分为多个分区,每个分区与某一个特定的内核集群距离更近,该内核集群访问该分区的延迟更低。因此,虽然L3 Cache整体上是被某个超级内核集群内部的所有处理器内核共享的,但是访问不同位置的L3 Cache的延迟会有稍许差异。 6. 鲲鹏920处理器片上系统的地址映射与变换 TaiShan V110处理器支持48位的虚拟地址和48位的物理地址。 如果某个内核集群或者I/O集群欲访问物理存储器空间,访问方式将严格遵从ARMv8A体系结构规范。内核集群访问的存储器地址将根据存储管理单元中的页表(Page Table,也即地址变换表)确定。而I/O集群访问的存储器地址将根据系统存储管理单元中的页表或者数据源确定。系统存储管理单元中的页表可以由硬件自动同步于内核集群中的存储管理单元,但也可以独立配置。 鲲鹏920处理器片上系统的系统存储管理单元是ARMv8A架构下为实现虚拟化扩展(Virtualization Extensions)而提供的一个重要组件,可以应用于设备(I/O及加速引擎)的虚拟化。 在AArch64模式下,系统存储管理单元可实现对48位物理地址空间的访问。在多个客户操作系统(Guest OS)被一个虚拟机管理器(Hypervisor)管理的虚拟化系统中,系统存储管理单元主要支持虚拟地址(VA)到中间物理地址(IPA)的转换,以及中间物理地址(IPA)到物理地址(PA)的转换。 设备发送给调度器并传送给系统存储管理单元的地址可以是虚拟地址、中间物理地址或物理地址。如果DMA控制器发出的访存地址不是物理地址,则由设备根据StreamID识别正确的地址空间,并由系统存储管理单元将地址转换为最终的物理地址。 在片上网络中,每一个节点都有一个固定的节点标识(NodeID)用于传输路由。在传输过程中,可以通过命令自带的源节点标识SrcID(Source NodeID)以及经过译码后的目标节点标识TgtID(Target NodeID)进行路由判断,并通过总线将命令送至正确的目标节点。 鲲鹏920处理器片上系统的地址映射过程可以结合图3.11描述如下: 当鲲鹏920处理器片上系统发出命令时,将给出一个虚拟地址,该地址由内部存储管理单元查询后转换为48位物理地址。存储管理单元在地址变换的同时也确定了该命令的可缓存性、可共享性等操作属性。命令中的地址和属性被更新后,命令将进入系统的映射与译码逻辑。在此,对物理地址和操作属性进行判断后将生成用于整个芯片路由的目标节点标识字段。至此,处理器发出的命令已经具有完整信息,可以发送至期望的目标节点。 I/O集群中的主设备发出的命令和处理器发出的命令的处理过程类似,只是存储管理单元换成了系统存储管理单元。系统存储管理单元模块将虚拟地址转换成48位物理地址并更新各操作属性。I/O集群中集成的映射与译码部件再将物理地址和操作属性信息译码成系统的目标节点标识TgtID,并与I/O集群自身的源节点标识SrcID信息一起决定系统路由,命令通过总线系统最终路由至正确的目标节点。 无论是处理器还是I/O集群主设备,经由译码器译码后的目标节点标识都是唯一确定的,可以是Cache存储器对应的节点标识,也可以是DDR控制器对应的节点标识。如果是跨超级内核集群的命令,则目标节点标识为另一组超级内核集群或超级I/O集群上的对应节点标识; 如果是跨片上系统的命令,则目标节点标识为另一个鲲鹏处理器片上系统的节点标识。节点标识中包含了2位的晶片(即超级内核集群或超级I/O集群)编号(DieID)信息,以及2位的Socket编号(即片上系统编号)(SktID)信息。跨超级内核集群的命令会经过超级集群链路层连接器传输至另一个超级内核集群; 而跨Socket操作则路由至协议适配器(PA)模块进行处理。 3.2鲲鹏920处理器片上系统的组织与管理 3.2.1鲲鹏920处理器片上系统的配置 表3.1给出了鲲鹏920处理器片上系统系列产品的配置明细。 表3.1鲲鹏920处理器片上系统产品配置 芯片系列华为鲲鹏920 7265/7260/5255/5250华为鲲鹏920 5220/3210 计算资源√ 兼容ARMv8.2架构的48/64个TaiShan V110处理器核 √ 单核支持512KB L2 Cache √ 单核支持1MB L3 Cache√ 兼容ARMv8.2架构的24/32个TaiShan V110处理器核 √ 单核支持512KB L2 Cache √ 单核支持1MB L3 Cache 内存储器√ 8个DDR 控制器√ 4个DDR 控制器 网络√ 2×100GE √ 4×25GE √ 2×50GE √ 支持RoCEv2及SRIOVSRIOV: 单根输入/输出虚拟化。√ 2×100GE √ 4×25GE √ 2×50GE √ 支持RoCEv2及SRIOV 续表 芯片系列华为鲲鹏920 7265/7260/5255/5250华为鲲鹏920 5220/3210 外存储器接口√ 2端口AHCIAHCI(Advanced Host Controller Interface,高级主机控制器接口)。接口SATA控制器 √ ×8 SAS 3.0控制器,支持STPSTP(Serial ATA Tunneling Protocol,串行ATA隧道协议)。√ 2端口AHCI接口SATA控制器 √ ×8 SAS 3.0控制器,支持STP PCI Express 接口√ 40个PCI Express 4.0通道(Lanes) √ 最多20个根端口 √ 支持×16端口 √ 支持端到端传输和ATS(地址转换服务) √ 支持CCIX√ 40个PCI Express 4.0通道(Lanes) √ 最多20个根端口 √ 支持×16端口 √ 支持端到端传输和ATS √ 支持CCIX 平台特色√ 最多支持4P多芯片系统 √ 内置维护引擎 √ 按照PCI拓扑组织片上扩展设备√ 内置维护引擎 √ 按照PCI拓扑组织片上扩展设备 加速器√ 压缩/解压缩引擎 √ 安全算法引擎 √ RSA算法引擎√ 压缩/解压缩引擎 √ 安全算法引擎 √ RSA算法引擎 图3.16给出了华为鲲鹏920 7265/7260/5255/5250/5245/5240/5235/5230 组件的简化结构图。该器件内置了两个超级内核集群(SCCL)和一个超级I/O集群(SICL)共三个晶片。每个超级内核集群内包含CCL0~CCL5共6个内核集群,构成一个CPU晶片,而每个内核集群内集成了4个TaiShan V110处理器内核。整个处理器采用CoWoS封装,故可通过多晶片合封技术(SMIO/TSV/FP)合封成有48个处理器内核的对称多处理器系统,各个晶片之间的双向带宽高达300GB/s以上。如果将每个超级内核集群内包含的内核集群的个数增加到8个,则整个处理器可以集成64个处理器内核。 图3.17给出了鲲鹏920处理器片上系统多晶片合封技术示意图。鲲鹏920处理器片上系统芯片由2个CPU 晶片和一个I/O 晶片封装而成,每个CPU 晶片有24核和32核两种规格。 图3.18给出了另一个鲲鹏处理器子系列——华为鲲鹏920 5220/3210器件的简化结构图。该器件内置了一个超级内核集群和一个超级I/O集群,每个超级内核集群内包含CCL0~CCL5共6个内核集群,而每个内核集群内集成了4个TaiShan V110处理器内核,故整个处理器共有24个处理器内核。同样,如果将每个超级内核集群内包含的内核集群的个数增加到8个,则整个处理器可以集成32个处理器内核。 图3.16华为鲲鹏920 7265/7260/5255/5250/5245/5240/5235/5230组件的简化结构图 图3.17华为鲲鹏920处理器片上系统多晶片合封技术示意图 图3.18华为鲲鹏920 5220/3210器件的简化结构图 表3.2列出了三种用于服务器产品的鲲鹏920处理器片上系统的型号及其主要参数。 表3.2鲲鹏920处理器片上系统产品的型号及其参数 芯 片 型 号超级内核 集群数量单个超级内核集群 中的内核集群数量单个内核集群 中内核数量内核 总数ARM架构 版本 华为鲲鹏920 321016424ARMv8.2 华为鲲鹏920 522018432ARMv8.2 华为鲲鹏920 5255/525026448ARMv8.2 华为鲲鹏920 7260/726528464ARMv8.2 3.2.2鲲鹏处理器多芯片系统 1. 鲲鹏2P多芯片系统 鲲鹏920处理器片上系统架构有非常好的可扩展性。多个鲲鹏920处理器片上系统芯片可以通过Hydra接口互连,组成多芯片系统(Multichip System)。 图3.19为由2个鲲鹏处理器片上系统组成的标准2P(即有2个CPU槽位)服务器处理器多芯片系统的结构。图3.19中,每个单片系统均由两个超级内核集群和一个超级I/O集群组成。两个单片系统之间通过×16 Hydra片间Cache一致性接口互连,片间通信带宽可高达480Gb/s。 图3.192个鲲鹏处理器片上系统组成的多芯片系统结构 在多芯片构成的对称多处理器系统中存在多个超级I/O集群。其中,PCI Express、以太网、HAC_ICL和IO_MGMT_ICL等I/O集群可以并行工作,类似多个并行工作实例。但只有芯片0上的智能管理单元对基于多芯片系统架构的Cache一致性对称多处理器系统可见,其他芯片上的智能管理单元被系统隐藏。 图3.20同样是由2个鲲鹏处理器片上系统组成的服务器处理器多芯片系统,但是增加了PCI Express扩展功能。系统由两个处理器芯片和一个I/O桥(I/O Bridge)芯片构成。用于I/O扩展的I/O桥芯片的主要功能就是扩展PCI Express总线。三个单片系统之间通过Hydra片间Cache一致性接口互连总线实现互连。I/O桥通过地址配置可以区分两个处理器的DDR主存空间。 图3.202个鲲鹏处理器片上系统和一个I/O桥组成的多芯片系统结构 图3.21显示了鲲鹏920处理器片上系统系列使用的I/O桥的组成。 图3.21鲲鹏920处理器片上系统I/O桥的组成 表3.3给出了鲲鹏920处理器片上系统的I/O桥配置明细。 2. 鲲鹏4P多芯片系统 鲲鹏多芯片处理器的组合方式灵活多样,可以根据实际需要自由配置。图3.22给出了由4个处理器片上系统组成的标准4P服务器处理器多芯片系统的结构框图。图3.22(a)显示了鲲鹏处理器多芯片系统互连与存储器架构,图3.22(b)显示了各个超级集群之间的逻辑连接关系。图3.22中,每个单片系统均由两个超级内核集群和一个超级I/O集群组成。四个单片系统之间通过×8 Hydra片间Cache一致性接口互连,片间通信带宽可达到240Gb/s。由于华为鲲鹏920的7265/7260/5255/5250/5245/5240/5235/5230处理器只能为Hydra接口提供24通道的SERDES通道,因此这个系统中已经没有多余的Hydra接口了,故此4P系统不支持通过I/O扩展方式扩展PCI Express总线。 表3.3鲲鹏920处理器片上系统的I/O桥配置 部件名称鲲鹏920处理器片上系统I/O桥 部件功能该部件不能单独安装到PCB板上,仅配合I/O扩展部件与鲲鹏920系列处理器使用,主要用于PCI Express端口的扩展 网络√ 8 XGE/GE端口 √ 支持RoCEv2及SRIOV 外存储器接口√ 2端口AHCI接口SATA控制器 √ ×8 SAS 3.0控制器,支持STP 续表 PCI Express接口√ 40个PCI Express 4.0通道(Lanes) √ 最多20个根端口 √ 支持×16端口 √ 支持ATS 平台特色√ 两路×8或一路×16通道Hydra接口,用于与CPU交互 √ 内置维护引擎 √ 按照PCI拓扑组织片上扩展设备 图3.224个鲲鹏处理器片上系统组成的多芯片系统结构 图3.22(续) 3. 单鲲鹏920处理器片上系统和I/O桥组成的多芯片系统 图3.23给出了由1个鲲鹏处理器片上系统和1个I/O桥组成的服务器处理器多芯片系统的结构框图。在该系统内,一个芯片是包含一个超级内核集群和一个超级I/O集群的华为鲲鹏920 5220/3210芯片,另一个是用于I/O扩展的华为鲲鹏920的I/O桥片。两个芯片之间通过Hydra接口互连。如果不需要额外的PCI Express端口扩展,I/O桥芯片可以不使用,由单片鲲鹏处理器片上系统独立构成计算单元。 图3.231个鲲鹏处理器片上系统和1个I/O桥组成的多芯片系统结构 3.2.3鲲鹏920处理器片上系统的管理与安全架构 1. 鲲鹏920系统的管理子系统 智能管理单元(IMU)是华为鲲鹏920系统内相对独立的子系统,实现鲲鹏920系统的管理功能。 智能管理单元子系统由独立的64位RISC处理器内核管理,与鲲鹏多处理器系统的计算子系统完全独立。这种独立性意味着无论其他子系统发生何种异常,智能管理单元本身的代码空间、数据空间、外设、时钟、复位电路都不受这些异常的影响,逻辑上仍可以正常工作。智能管理单元子系统的处理器支持ARMv8A指令集架构,也集成了与ARM SBSA规范兼容的UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)控制器、看门狗定时器、I2C(InterIntegrated Circuit,集成电路间)互连控制器等必要外部设备,以及符合GICv3标准的通用中断控制器。 智能管理单元子系统的片上存储器保存着智能管理单元处理器内核私有的基础管理固件代码,并为处理器内核提供数据存储空间。独立的片上存储器的私有属性可以确保智能管理单元在其他子系统异常时仍能够正常工作,其存储空间也禁止应用处理器访问。 此外,在智能管理单元子系统和其他子系统之间还设置了系统隔离墙。系统隔离墙为智能管理单元子系统访问其外部空间提供安全通道,确保智能管理单元的处理器不会因系统异常而阻塞。 智能管理单元子系统的I2C接口连通其他处理器以及BMC(主板管理控制器),并作为访问其他处理器的后备通信信道。当多芯片系统中的芯片间高速互连通道失效时,I2C接口可以充当带外通道,供智能管理单元获取其他处理器的相关信息。 图3.24给出了鲲鹏920处理器片上系统的智能管理单元(IMU)架构。 图3.24鲲鹏920处理器片上系统的智能管理单元架构 智能管理单元子系统主要实现下面三个核心功能: (1) 通过智能平台管理总线(Intelligent Platform Management Bus,IPMB)协议在鲲鹏920处理器片上系统与BMC等外部管理芯片之间进行信息交互。 (2) 与应用处理器实现交互。智能管理单元通过系统控制与管理接口(System Control and Management Interface,SCMI)与应用处理器通信,实现对应用处理器的全面管理,例如电源管理、热管理、状态和事件管理等。智能管理单元也可以通过共享存储器与应用处理器按照ACPI平台差错接口(ACPI Platform Error Interfaces,APEI)规范共享数据。 (3) 可配置的安全引导功能。智能管理单元负责对智能管理单元固件、UEFI固件和可信固件等引导代码的验证,以确保代码的安全性和完整性。 2. 鲲鹏920处理器片上系统的安全架构 鲲鹏920处理器片上系统的安全架构基于ARM的信任区(Trust Zone)机制,包含安全引导功能和安全调试等功能。 鲲鹏920处理器片上系统通过多种部件和机制支撑其安全架构。鲲鹏安全机制的核心部件就是实现了ARMv8A架构EL3异常等级的可信CPU。鲲鹏920处理器片上系统也配置了带安全标志的Cache,每个Cache行会根据其所属的安全状态设置非安全标志NS(NonSecure Flag),对不属于安全状态的Cache行的读、写和修改操作都将被禁止。 智能管理单元子系统是安全引导机制的第一级处理单元。智能管理单元独立配备的64位ARMv8A处理器内核首先对其引导加载的智能管理单元固件、BIOS和操作系统映像进行校验,然后才开始运行。智能管理单元的引导ROM(Boot ROM)中存储着引导ROM安全引导代码(BootROM Security Boot Code,BSBC)。智能管理单元也负责验证已撤销的子密钥ID掩码签名(Revoked SubKey ID Mask Signature),并在通过签名验证后将其写入eFUSE存储器。 在晶片间和芯片间数据一致性互连架构上,鲲鹏920处理器片上系统配置了支持可信区域映射的Hydra根代理(HHA),通过其物理隔离机制确保系统安全。Hydra根代理支持最多8个安全区域,每个区域通过一组安全寄存器配置。只有在安全状态下才能访问安全区域; 非安全状态下读取安全区域将返回0值,而非安全状态下向安全区域的写操作将被忽略。 鲲鹏920处理器片上系统的系统部件也提供加强的安全机制。例如系统存储管理单元(SMMU)会旁路(Bypass)主设备的安全访问,鲲鹏920系统也配置了可信通用定时器和可信看门狗定时器。鲲鹏920处理器片上系统的通用中断控制器(GIC)可以区分应在非安全的EL1/EL2异常等级、安全的EL1异常等级和安全的EL3异常等级处理的中断请求。中断控制器也支持生成、分发和转发安全组1的中断请求,以便将其直接传递给EL1异常等级的安全操作系统。 鲲鹏920处理器片上系统在功能部件之外扩展了多个专门用于安全机制的部件。图3.25给出了配置智能管理单元的鲲鹏920处理器片上系统单CPU晶片的安全架构。 图3.25配置智能管理单元的鲲鹏920处理器片上系统单CPU晶片的安全架构 鲲鹏920处理器片上系统专门配置了256KB的可信SRAM。在可信SRAM中,可以通过安全寄存器配置安全区域,该区域可以确保安全。只有在安全状态下才能访问安全区域; 在非安全状态下读取安全区域将返回0值,而在非安全状态下向安全区域的写操作将被忽略。 可信熵来源(Trusted Entropy Source,TRNG)是鲲鹏支持安全架构的另一个部件。鲲鹏920处理器片上系统通过TRNG支持硬件实现的非确定性随机数发生器(Nondeterministic Random Bit Generator,NRBG),并与确定性随机数发生器(Deterministic Random Bit Generator,DRBG)协同工作。 可信熔丝(Trusted Fuse,即eFUSET)是独立的存储器部件,用于密钥、密钥哈希和安全控制位的非易失存储。eFUSET用于应用处理器系统。 信任区外设控制(TrustZone Peripheral Control,TZPC)部件用于配置定时器的安全状态,可以在安全状态下配置定时器为安全设备或非安全设备。只能在安全状态下访问信任区外设控制。 鲲鹏920处理器片上系统的安全调试机制通过JTAG身份认证实现。在默认状态下,JTAG接口在复位之后处于锁定状态,通过存储在eFUSE存储器中的身份认证根密钥(Root Of AUThentication Key,ROTAUK)可以在通过身份验证之后开启JTAG接口。 此外,鲲鹏920系统支持的硬件加速器可以实现SEC和HPRE(High Performance RSA Engine,高性能RSA引擎)等通用的高性能安全算法,为鲲鹏920系统的安全架构提供了强有力的支撑。鲲鹏920处理器片上系统配置的两种高性能加密引擎可以支持多种加密算法: SEC引擎(SECurity Engine,安全引擎)支持AES、DES、3DES、SHA1、SHA2、MD5、HMAC等算法的硬件加速,而HPRE则支持RSA和DH算法的硬件加速。 3.2.4鲲鹏920处理器片上系统的PMU 鲲鹏920处理器片上系统为了便于软件的性能调试,提供了处理器内核之外的PMU(性能监视器)。除了处理器内核内置PMU(Incore PMU)外,PMU还分布在L3 Cache(LLC)、Hydra根代理(HHA)和DDRC(DDR控制器)等处理器内核之外的部件中,统称为非处理器内核(Uncore)PMU。 图3.26显示了鲲鹏920系统与PMU相关的各个部件。图3.26中,MBIGEN为消息中断发生器(Message Based Interrupt GENerator),其主要功能是将外设通过信号线提交的中断请求转换为总线MBI消息发送给中断控制器。 图3.26鲲鹏920系统与PMU相关的各个部件 1. 部件编号 华为鲲鹏920处理器片上系统由两个CPU 晶片和一个I/O 晶片封装而成。 其中,CPU 晶片命名为TOTEM(图腾),每个芯片的两个TOTEM分别称为TOTEMA和TOTEMB, TOTEM有24核和32核两种规格。I/O 晶片命名为NIMBUS(雨云)。每个晶片有不同的晶片标识(DieID)。不同TOTEM的Uncore PMU事件用DieID进行区分: 主片的TOTEMA的DieID为1; 主片的TOTEMB的DieID为3; 从片的TOTEMA的DieID为5(主片的TOTEMA的DieID加4); 从片的TOTEMB的DieID为7(主片的TOTEMB的DieID加4)。图3.27描述了鲲鹏920系统的一个CPU 晶片上的Uncore PMU功能相关部件。 图3.27鲲鹏920系统的一个CPU晶片上的Uncore PMU功能相关部件 鲲鹏920处理器片上系统的每个TOTEM都配置了四个DDRC(DDR控制器)和两个Hydra根代理HHA模块,前者编号为DDRC0~DDRC3,后者编号为HHA0和HHA1。 而末级Cache L3的编号架构有所不同: 由于鲲鹏920处理器片上系统的一个处理器内核集群中有四个处理器内核,共享一个L3 Cache TAG(LLC Tag)分区,所以32核的版本会有8个L3 Cache TAG分区,编号为L3C0~L3C7; 24核的版本会有6个L3 Cache TAG分区,编号为L3C0~L3C5。 32核版本和24核版本的ACPI表也会有差异。对于多芯片互连的鲲鹏920系统,若1P的芯片只有48核,则2P互连系统就只有96核; 若1P的芯片有64核,则2P互连系统共有128核。故而两者的ACPI表不同,Uncore PMU的驱动程序会根据ACPI节点来探查(Probe),所以BIOS一定要使用正确的ACPI表。 2. 处理器内核PMU事件 如第2章所述,在ARMv8A架构规范中定义了两类事件计数器: 普通架构与微架构事件计数器和实现定义的事件计数器。 在鲲鹏920系统中,借助Linux操作系统的性能分析工具perf可以列出鲲鹏920实现的内核架构与微架构事件计数器。 执行perf list|grep armv8命令,可以列出所有能够触发 perf 采样点的事件,如图3.28所示。 图3.28触发perf采样点的事件 此外,鲲鹏920还定义了上百个自定义PMU事件,通过这些事件计数器支持系统性能调试。表3.4给出了部分鲲鹏920自定义PMU事件的编号、名称及其含义,相应的事件也已经上传到Linux社区,事件列表的链接如下: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/perf/pmuevents/arch/arm64/hisilicon/hip08/coreimpdef.json。 表3.4部分鲲鹏920系统的自定义PMU事件 类别事件编号事 件 名 称描述 ARM建议的普通架构和微架构事件 0x0040L1D_CACHE_RD第1级数据Cache访问,读操作 0x0041L1D_CACHE_WR第1级数据Cache访问,写操作 0x0042L1D_CACHE_REFILL_RD第1级数据Cache重填充,读操作 0x0043L1D_CACHE_REFILL_WR第1级数据Cache重填充,写操作 0x0046L1D_CACHE_WB_VICTIM第1级数据Cache写回,被动(Victim); 类似第1级数据Cache写回(L1D_CACHE_WB),但该计数器仅对由处理单元访问引起的Cache行被分配导致的写回操作计数 0x0047L1D_CACHE_WB_CLEAN第1级数据Cache写回,清洗及一致性操作; 类似第1级数据Cache写回(L1D_CACHE_WB),但该计数器仅对由其他处理单元的一致性操作引起的写回操作或执行Cache维护指令导致的写回操作计数 0x0048L1D_CACHE_INVAL使第1级数据Cache失效(Invalidate); 对第1级Cache的所有使Cache行失效行为计数,但不记录使Cache行失效的重填充事件 0x004CL1D_TLB_REFILL_RD第1级数据TLB重填充,读操作 0x004DL1D_TLB_REFILL_WR第1级数据TLB重填充,写操作 0x004EL1D_TLB_RD第1级数据或统一TLB访问,读操作 0x004FL1D_TLB_WR第1级数据或统一TLB访问,写操作 0x0050L2D_CACHE_RD第2级数据Cache访问,读操作 0x0051L2D_CACHE_WR第2级数据Cache访问,写操作 0x0052L2D_CACHE_REFILL_RD第2级数据Cache重填充,读操作 0x0053L2D_CACHE_REFILL_WR第2级数据Cache重填充,写操作 0x0056L2D_CACHE_WB_VICTIM第2级数据Cache写回,被动(Victim) 0x0057L2D_CACHE_WB_CLEAN第2级数据Cache写回,清洗及一致性操作 0x0058L2D_CACHE_INVAL使第2级数据Cache失效(Invalidate) 实现定义的事件 0x102eL1I_CACHE_PRF第1级指令Cache预取访问计数 0x102fL1I_CACHE_PRF_REFILL预取访问导致的第1级指令Cache缺失计数 0x1043IQ_IS_EMPTY指令队列为空 0x1044IF_IS_STALL取指令停顿(Stall)周期 0x2014FETCH_BUBBLE可以接收指令但无法发送指令 0x6013PRF_REQLSU的预取请求 0x6014HIT_ON_PRF预取数据命中 0x7001EXE_STALL_CYCLE发射微操作次数小于4的周期 续表 类别事件编号事 件 名 称描述 实现定义的事件 0x7004MEM_STALL_ANYLOAD未发射任何微操作,同时未确定任何加载操作 0x7006MEM_STALL_L1MISS未发射任何微操作,同时存在访问L1 Cache缺失且等待重填充数据的加载操作 0x7007MEM_STALL_L2MISS未发射任何微操作,同时存在访问L1 Cache和L2 Cache均缺失且等待从L3 Cache重填充数据的加载操作 3. 非处理器内核PMU事件 1) L3 Cache PMU事件 每个L3 Cache有8个48位的计数器用于统计事件,当事件计数器溢出时会通过中断上报由驱动程序进行处理。 由于L3 Cache采用双管道(Pipeline)架构,也即CPU下发一条命令后,两条管道(cpipe和spipe)都会查询,所以在计算命中率时,分母选择其中一个即可。两条管道中任何一条命中即算命中,一般选择spipe管道。 例如,计算命中率可以使用以下公式: 命中率=(CPU下发读操作在cpipe命中的次数+CPU下发读操作在spipe命中的次数)/ CPU下发读操作查询spipe的次数 又如计算带宽: 带宽=CPU下发读操作查询spipe的次数×64字节(CPU的Cache行大小) L3 Cache的部分事件也放到了Linux的perf驱动程序中,可以通过以下链接访问: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/perf/hisilicon/hisi_uncore_l3c_pmu.c(280~294行)。 2) Hydra根代理 PMU事件 每个Hydra根代理(HHA)也有8个48位的计数器用于统计事件,当事件溢出时会通过中断上报驱动程序进行处理。Hydra根代理的事件统计主要统计跨片操作次数、跨晶片事件数量以及来自CCIX的操作次数等其他事件,可以通过以下链接访问其驱动程序: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/perf/hisilicon/hisi_uncore_hha_pmu.c(277~304行)。 3) DDR控制器PMU事件 DDR控制器(DDRC)PMU的模型设计比较特别,每个统计计数器只能统计固定用途的事件。鲲鹏920系统支持统计8个事件,如表3.5所示。 表3.5鲲鹏920处理器片上系统DDR控制器PMU事件 事 件 名 称描述 DDRC_HIS_FLUX_WRDDR控制器所有写命令流量统计[动态存储器控制器(DMC)位宽为256位] DDRC_HIS_FLUX_RDDDR控制器所有读命令流量统计[动态存储器控制器(DMC)位宽为256位] DDRC_HIS_FLUX_WCMDDDR控制器所有写命令数目 DDRC_HIS_FLUX_RCMDDDR控制器所有读命令数目 DDRC_HIS_PRE_CMDDDR控制器所有统计的预充电(Precharge)命令个数 DDRC_HIS_ACT_CMDDDR控制器所有统计的激活(Active)命令个数 DDRC_HIS_BNK_CHGDDR控制器所有统计的存储体(Bank)切换次数 DDRC_HIS_RNK_CHGDDR控制器所有统计的读写命令片选切换次数 3.3鲲鹏920处理器片上系统的设备与输入/输出 鲲鹏920处理器片上系统中的设备是指除内核外的物理部件,包括I/O集群、片上加速设备及管理设备等。作为一款应用于ICT领域的服务器处理器片上系统,鲲鹏片内已经集成了大量设备,通过PCI Express总线还可在系统中扩展片外附加设备。 鲲鹏920采用PCI Express系统拓扑作为基本的设备管理机制。 鲲鹏920处理器片上系统通过PCI Express总线连接多种片上和片外外部设备。鲲鹏920处理器片上系统的每个PCIe_ICL都是一个主桥。由于一个完整的鲲鹏920片上系统最多支持由4片鲲鹏处理器片上系统构成的对称多处理器(SMP)系统,故4个PCI Express根端口对应4个主桥。无论是单芯片架构还是多芯片互连架构,整个对称多处理器系统都共享一个PCI Express ECAM(Enhanced Configuration Access Mechanism,增强配置访问机制)空间,所有这些主桥都位于统一的PCI总线域(PCI Segment)内。 3.3.1鲲鹏920处理器片上系统的输入/输出概述 1. 鲲鹏920处理器片上系统的片上设备 结合图3.4和图3.8可以看到鲲鹏处理器片上系统有以下三类片上设备。 1) 固件设备 作为服务器处理器,鲲鹏920处理器片上系统需要支持多种功能模式和系统参数配置,并在系统上电启动时支持引导加载初始化操作。固件设备(Firmware Devices)通常设置了固定的存储器地址,并且预定义了共享外设中断(Shared Peripheral Interrupt,SPI)。DDR存储器初始化、系统地址译码和串行器/解串器(SERDES)部件初始化等功能都需要有固件设备支持。 基本输入/输出系统(BIOS)和UEFI(统一扩展固件接口)的运行时服务需要访问固件设备中的寄存器,但操作系统和驱动程序一般不需直接访问这些寄存器。 固件设备的工作不依赖于平台设备或片上附加设备。 2) 平台设备 鲲鹏920处理器片上系统设计了一系列为系统服务的标准设备,统称为平台设备(Platform Devices)。鲲鹏的平台设备既包括管理系统所必需的系统设备控制器,例如系统存储管理单元(SMMU)、通用中断控制器(GIC)和看门狗定时器等,也包括大多数系统都需要用到的对外通信接口,例如UART等。 统一的标准可以为硬件和软件开发提供规范,这对需要支持多种不同操作系统和不同厂商的硬件配件的服务器处理器而言尤其重要。ARM为其64位处理器应用于服务器建立了完整的生态环境,并定义了一系列服务器处理器规范。鲲鹏920处理器片上系统完全符合相关规范,如ARM服务器基础系统架构(SBSA)规范,ARM可靠性、可用性和可服务性(RAS)规范等。 遵从标准的平台设备可以使用标准驱动程序,并可实现不同版本、不同供应商的芯片的兼容。 3) 片上附加设备 附加设备(Addon Devices)是指ARM SBSA规范定义的通用平台设备以外的功能设备。其中,片上附加设备(Addon Onchip Devices)指的是片上系统内可以被类似功能的设备替换的部件,通常使用设备提供商设计的驱动程序。这类设备一般负责实现系统与外部互连通信,例如网络接口卡控制器和USB控制器等。 从程序员角度看,大多数片上附加设备按照标准PCI设备的模式工作,因而也具有下面这些特征: (1) 设备可以像片外PCI设备一样被固件或操作系统通过枚举方式检索到; (2) 可以在PCI Express框架下为这些设备分配存储器地址和中断号; (3) 这些设备的复位功能和电源管理机制也与PCI设备相同; (4) 设备的虚拟化特性完全满足PCI Express的SRIOV(Single Root I/O Virtualization,单根输入/输出虚拟化)规范。 2. 虚拟PCI Express总线 鲲鹏920处理器片上系统利用虚拟PCI Express总线(Virtual PCI Express Bus,VPB)机制管理片上设备。对鲲鹏处理器内核而言,处理器片上系统的片上设备就是PCI Express总线上设备。通过PCI Express标准的枚举流程,片上设备可以被映射为PCI Express总线的端点(Endpoints),并且通过PCI Express总线的ECAM进行配置。 虚拟PCI Express总线在事务层之上实现设备虚拟。可以通过标准的PCI Express总线根复合体拓扑发现机制建立给定的虚拟PCI Express总线的拓扑结构。 虚拟PCI Express总线不支持对主机的ATS(地址变换服务),但虚拟PCI Express总线管理的设备支持系统存储管理单元标准的虚拟地址变换。虚拟PCI Express总线设备的总线、设备和功能单元标识(Bus,Device and Function ID)被映射为系统存储管理单元的数据流标识(SMMU Stream ID)。 虚拟PCI Express总线的系统存储管理单元支持一级变换和二级变换,从VPB设备发起的所有地址操作(包括写MSIX和MSI地址在内)都通过某个系统存储管理单元部件进行,地址操作被翻译为相应的旁路、一级变换和二级变换操作。 如果将一个物理PCI Express根复合体连接至虚拟PCI Express总线,则该根复合体被当作虚拟PCI Express总线的一个设备,其ATS由虚拟PCI Express总线的系统存储管理单元的ATS端口承担。 3. 鲲鹏920处理器片上系统的设备存储器访问顺序 在ARMv8架构中,当访问具有非重排序属性(nR)的设备类型存储器时,对同一存储块内的访问在目标设备上的感知顺序应与程序顺序相同。 而对鲲鹏920处理器片上系统的PCI Express根端口而言,每个PCI Express根端口都占据设备存储器块空间。故此,对同一个PCI Express根端口的非重排序访问顺序与程序顺序相同,但不能保证对不同根端口的访问顺序一致,除非显式使用内存屏障机制。 类似地,对华为鲲鹏920的片上设备而言,每个设备都占据一个独立的设备存储器顺序块,因而对同一个设备的非重排序访问顺序与程序顺序相同,但不能保证对不同设备的访问顺序一致,除非显式使用内存屏障机制。 华为鲲鹏920仅支持输入(Inbound)方向的原子操作(Atomic Operations),不支持输出(Outbound)方向的原子操作,即鲲鹏920处理器片上系统不能通过CPU原子命令向PCI Express外部的设备发起原子操作。 4. PCI Express地址空间和鲲鹏处理器内核地址空间的映射关系 在ARMv8架构下,PCI Express设备的配置空间、内存地址空间和I/O地址空间都被映射到全局内存地址空间上。其中,对配置空间的访问就是对ECAM空间的内存访问。主桥利用地址变换单元 (Address Translation Unit,ATU)将处理器系统的访问操作转换为PCI Express内存和I/O访问。表3.6给出了PCI Express地址空间和鲲鹏920处理器片上系统ARM存储器地址空间的映射关系与存储器类型设置。 表3.6PCI Express地址空间和鲲鹏920处理器片上系统ARM存储器 地址空间的映射关系与存储器类型设置 PCI Express 目标地址空间PCI Express 请求推荐使用的 ARM存储器类型PCI Express控制器 的转换机制 PCI Express配置空间配置空间读; 配置空间写设备nGnRnE (DevicenGnRnE)通过系统基内存地址标识ECAM访问; 通过PCI总线范围过滤配置空间访问 I/O空间I/O读; I/O写设备nGnRnE (DevicenGnRnE)地址变换单元(ATU)表项 64位可预取 内存地址空间用于寄存器: 内存读; 内存写设备nGnRE (DevicenGnRE)地址变换单元表项 64位可预取 内存地址空间用于内存空间扩展: 内存读; 内存写设备nGRE (DevicenGRE) 设备GRE (DeviceGRE) 常规不可缓存 (Normal NonCacheable)地址变换单元表项 32位可预取 内存地址空间用于寄存器: 内存读; 内存写设备nRE (DevicenRE)地址变换单元表项可将32位PCI Express地址映射到ARM内存中大于4GB的地址空间 32位可预取 内存地址空间用于内存空间扩展: 内存读; 内存写设备nGRE (DevicenGRE) 设备GRE (DeviceGRE) 常规不可缓存 (Normal NonCacheable)地址变换单元表项可将32位PCI Express地址映射到ARM内存中大于4GB的地址空间 32位不可预取 内存地址空间内存读; 内存写设备nGnRE (DevicenGnRE)地址变换单元表项 华为公司强烈建议将PCI Express存储器映射方式的寄存器(MMIO)地址空间的存储器类型属性配置为“设备不可聚合不可重排序(DevicenGnRE)”,因为这种存储器类型能够让鲲鹏920处理器片上系统保证读写访问的执行顺序,程序员可以通过发出一次读请求来清空(Flush)PCI Express系统中的公告写(Posted Write)操作的数据。不过,如果对访存性能非常敏感,当然可以不将MMIO空间配置为设备属性,并且当设备的MMIO空间为可预取属性时,可以使用“常规不可缓存(NormalnonCacheable)”属性。 而当PCI Express存储器空间被配置为“设备可重排序(DeviceReorder)”或“常规不可缓存”属性时,程序员应使用内存屏障保证访存指令的执行顺序。 当PCI Express配置空间和I/O空间被配置为“设备提前响应写操作(DeviceE)”属性时,则无法保证PCI Express配置写和I/O写操作能正常操作,因为在ARM存储器空间执行提前响应写操作时,在PCI Express域无法对配置写和I/O写执行清空操作。 5. 鲲鹏920处理器片上系统StreamID和DeviceID映射 在ARM架构中有两种与外设相关的标识: StreamID(数据流标识)是系统存储管理单元用于检索地址转换表的索引; 而DeviceID(设备标识)则是ARM通用中断控制器架构中的中断翻译服务ITS(部件)用于检索中断翻译表的索引。 而在PCI Express的系统架构中也有两种标识: RequesterID(请求者标识)和PASID(Process Address Space ID,进程地址空间标识)。PASID是某个请求者标识的进程地址空间标识,通常与内核中的不同进程的地址空间相关。这两个标识组合起来可以唯一确定与某个PCI Express业务有关的地址空间。 在鲲鹏920处理器片上系统中,所有与系统存储管理单元或ITS协同工作的设备都被分配了唯一的RequesterID。无论是单芯片系统还是多芯片系统,系统中的所有RequesterID都按照16位分配。对于多数具有标准PCI Express头的设备,其RequesterID由PCI枚举软件按标准流程分配。而没有标准PCI头的设备,则在系统启动时用每个芯片保留的PCI总线为其接分配RequesterID。 图3.29描述了华为鲲鹏920处理器片上系统对StreamID和DeviceID的映射方式。设备的RequesterID、系统存储管理单元的StreamID和ITS的DeviceID都是相同的,且在整个数据传输路径中保持唯一性。设备的PASID被映射为系统存储管理单元的SubstreamID,用于对第一级变换表进行索引。 图3.29华为鲲鹏920处理器片上系统StreamID和DeviceID映射 6. 鲲鹏920处理器片上系统的PCI Express中断机制 鲲鹏920处理器片上系统支持PCI Express总线规范定义的PCI INTx仿真和消息信号MSI/MSIX这两种中断请求方式。图3.30显示了华为鲲鹏920处理器片上系统的中断映射关系,以及4个鲲鹏920处理器片上系统组成的对称多处理器系统的完整配置,当实际的系统中处理器的数量少于4个时,只需去掉相应处理器的主桥,中断映射机制则保持不变。 图3.30华为鲲鹏920处理器片上系统的中断映射关系 对使用PCI Express INTx中断信号线提出中断请求的设备,鲲鹏920片上系统把PCI Express的INTx中断请求聚合为4个ARM SPI中断,即SPI_A、SPI_B、SPI_C和SPI_D。这种映射是针对整个PCI Express总线域的统一ECAM空间完成的,并非每个根端口都有4个SPI中断。 而采用消息信号中断方式(MSI/MSIX)时,MSI/MSIX消息则通过鲲鹏920系统的片上总线及Hydra接口传递至鲲鹏920处理器片上系统的片上平台设备ITS(中断翻译服务)部件,再由ITS部件将MSI/MSIX设备中断消息翻译为鲲鹏920处理器片上系统的LPI,并路由至不同的通用中断控制器转发器(GICR)。其中,Device ID的映射关系显示在图3.29中。 3.3.2鲲鹏920处理器片上系统的PCI Express控制器 华为鲲鹏920通过PCI Express控制器实现互连功能。鲲鹏920系统的PCI Express控制器兼容PCI Express规范V4.0,支持16GT/s数据传输率。华为鲲鹏920的PCI Express控制器片内包含多个根端口的逻辑电路,每个根端口对软件而言都是一个虚拟的PCIPCI桥。板上实际的物理端口数量可能会少于芯片可以支持的最大端口数,此时BIOS会初始化控制器,以屏蔽不存在的根端口。 PCI Express控制器可以灵活配置。例如,×16链路的PCI Express控制器可以被配置为单个根端口,此时系统中只有一个桥; 也可以把×16链路的PCI Express控制器配置为4个×4的根端口,此时系统中有四个桥。 为支持PCI Express的热插拔功能,鲲鹏920片上配置了I2C总线用于获取PCI Express插槽的硬件状态,并将该状态信息同步至根端口指示器。PCI Express的软件用户接口完全兼容PCI Express标准,但I2C总线的状态收集协议遵从鲲鹏920私有的时序。 PCI Express控制器通过AMBA总线与系统总线相连。 图3.31显示了鲲鹏920处理器片上系统的PCI Express控制器系统架构。 图3.31鲲鹏920处理器片上系统的PCI Express控制器系统架构 1. 鲲鹏920 PCI Express控制器的内部结构 鲲鹏920处理器片上系统的PCI Express控制器的完整内部结构如图3.32所示。该模块由一个寄存器接口、一个应用层实体、3个PCI Express核和3个物理编码子层(PCS)实体组成。一个实际使用的鲲鹏PCI Express控制器可能只包含该视图的子集。 图3.32鲲鹏920处理器片上系统PCI Express控制器内部结构图 1) PCI Express核 PCI Express核(PCI Express Core)是PCI Express模块内扩展PCI Express链路的部件,每个PCI Express核包含最多8个PCI Express端口。鲲鹏的PCI Express控制器模块最多包含3个PCI Express核,支持最多40条PCI Express通道(Lanes)。3个PCI Express核中,两个为×16 PCI Express Gen4接口,1个为×8 PCI Express Gen4接口。3个PCI Express核都可以作为根端口(Root Port,RP)运行,而PCI Express核1还可以作为端点端口(Endpoint Port,EP)运行。PCI Express核0和PCI Express核1可以支持最多8个端口,端口号为0、2、4、6、8、10、12、14,即最大端口号max=14,端口号间隔delta=2; 而PCI Express核2可以支持最多4个端口,端口号为0、2、4、6,即最大端口号max=6,端口号间隔delta=2。 PCI Express端口则由一个事务层(Transaction Layer,TL)实体、一个数据链路层(Data Link Layer,DL)实体和一个介质访问控制层(Media Access Control Layer)实体组成,实现PCI Express数据链路层和事务层的基本功能及物理层的部分功能。 事务层根据信用值(Credit)组装TLP(事务层分组)并将其发送至数据链路层。相反,事务层对接收到的TLP进行解析,并向远程设备返回信用值。 数据链路层是事务层和物理层之间的媒介,其核心功能是负责链路上两个模块之间的可靠传输。 2) PCI Express物理层 PCI Express物理层功能由介质访问控制层和PCS(Physical Coding Sublayer,物理编码子层)共同实现。介质访问控制层功能在PCI Express核中实现,其主要功能是实现链路训练与状况状态机(Link Traning and Status State Machine,LTSSM)。每个PCI Express核内的介质访问控制层实体和各个端口共享的介质访问控制层多路开关(MAC_MUX)与PCI Express核之外的PCS实体一起实现PCI Express总线的物理层功能。MAC_MUX实现介质访问控制层与PCS之间的连接,二者之间的接口即PCI Express物理层接口PIPE(Physical Interface for PCI Express)。 PCS是PCI Express PHY的数字部分,实现8b/10b编码与解码、128b/130b编码与解码、时钟容差补偿机制、功耗变更、速率变更、符号锁定及数据块对齐等功能。鲲鹏PCI Express控制器的3个PCI Express核都支持Gen4(16Gb/s)、Gen3(8Gb/s)、Gen2(5Gb/s)和Gen1(2.5Gb/s)四种速率,且支持在16Gb/s、8Gb/s、5Gb/s和2.5Gb/s之间的动态速率切换。 3) PCI Express应用层 鲲鹏的PCI Express应用层(Application Layer,AP)实体实现与特定应用有关的PCI Express事务传输。应用层实体包含如下多个部件。 (1) I/O模块发送部件(IOB_TX): 鲲鹏920处理器内核将操作请求通过CHI总线发送至PCI Express控制器,PCI Express应用层收到该操作请求后,由IOB_TX生成PCI Express事务并通过PCI Express核发送给远端设备。 (2) I/O模块接收部件(IOB_RX): 接收远端设备发送的分组并通过AMBA总线将报文传输到本地存储器。 (3) SDI_TOP(SDI顶层模块): 鲲鹏的PCI Express控制器支持软件定义基础设施(Software Defined Infrastructure,SDI),SDI_TOP模块又包含多个功能组件: ■DMA控制器: 支持在端点模式和根复合体模式下使用。当PCI Express总线工作在端点模式时,DMA控制器负责在本地存储器和远程存储器之间传输数据; 当PCI Express总线工作在根复合体模式时,DMA控制器在本地存储器和本地存储器之间传输数据。 ■端点中断(EP INT)组件: 用于实现端点中断处理,支持端点采用INTx中断、MSI中断和MSIX中断三种方式。 ■NVMe组件: 用于实现支持非易失性存储器控制器接口的NVMe(NonVolatile Memory Express)协议。 ■VIRTIO组件: 用于实现I/O设备半虚拟化抽象接口的VIRTIO规范。 (4) MANAGE_TOP(管理顶层模块): 实现系统管理相关功能,包含三个组件: ■MCTP组件: 用于在总线所有者和MCTP(Management Component Transport Protocol,管理组件传输协议)设备之间传送MCTP分组。MCTP分组通过PCI Express 类型1 VDM(VendorDefined Type)传输。 ■INT_PRO(中断处理组件): 当PCI Express总线工作在根复合体模式时,INT_PRO负责接收INTx消息并上报给系统; 当PCI Express总线工作在端点模式时,INT_PRO负责产生INTx中断并发送至相应端口。除了PCI Express中断之外,INT_PRO还负责处理应用层本地中断。 ■ERR_PRO(错误处理组件): 用于接收错误消息并上报给系统,仅在PCI Express总线工作于根复合体模式时使用。 (5) ATS模块: ATS模块通过AXI主接口将地址变换请求和页面请求传送给系统存储管理单元。系统存储管理单元可以通过ATS接口将地址失效请求(Address Invalidate Request)传递给ATS,ATS会进一步为远端设备生成地址失效请求。当远端设备返回地址失效响应时,ATS模块再将相应的响应返回系统存储管理单元。 (6) 寄存器接口(REG_IF): 本地鲲鹏处理器内核可以经APB接口通过寄存器接口访问PCI Express模块的私有寄存器。 2. 鲲鹏920 PCI Express控制器的工作模式 鲲鹏920使用的PCI Express控制器模块可以支持PCI Express根复合体和端点两种工作模式。 当PCI Express控制器作为根复合体工作时,其三个PCI Express核中的PCI Express端口构成PCI Express拓扑中的根端口。图3.33显示了鲲鹏920处理器片上系统的PCI Express控制器的根复合体工作模式。在根复合体工作模式下,PCI Express核0和PCI Express核1可以分别被分叉为1个(×16)、2个(×8)、4个(×4)或8个(×2)端口。 图3.34显示了鲲鹏920处理器片上系统的PCI Express控制器的端点工作模式。当华为鲲鹏920的PCI Express控制器处于端点(EP)模式时,PCI Express控制器作为标准的端点设备连接到外部CPU。此时,PCI Express控制器具备完整的端点配置空间和中断机制。华为鲲鹏920的所有功能都可以用作单个PCI Express端点设备的扩展功能。鲲鹏920处理器片上系统上可以运行不同的应用,为端点设备提供不同的功能。 图3.33鲲鹏920处理器片上系统PCI Express控制器的根复合体模式 图3.34鲲鹏920处理器片上系统PCI Express控制器的端点工作模式 PCI Express控制器作为端点工作时,仅PCI Express核1可以作为端点端口,PCI Express核0和PCI Express核2不可用。PCI Express核1可以被分叉为端点模式的1个×8端口或者1个×16端口。×16端口可以降级为×8、×4或×2端口,×8端口可以降级为×4或×2端口。 当PCI Express核1的端口0作为端点时,PCI Express核1上只能有一个端口0存在,端口2、端口4和端口6都不可用。 PCI Express核1只提供外部根复合体可见的端点寄存器。当PCI Express核1工作于端点模式时,其0、2、4、6、8、10、12和14这8个端口都不能被本地CPU枚举到,因而本地CPU看不到这些PCI Express设备,但本地CPU仍可枚举到片上其他的PCI Express化设备。 3. 鲲鹏920 PCI Express控制器的端到端传输 鲲鹏920处理器片上系统支持在所有PCI Express根端口之间进行端到端(Peer to Peer)传输。当启用端到端传输功能时,从软件的逻辑视图中可以看到,所有的PCI Express设备都挂接到一条单一的共享PCI总线上; 这些PCI Express设备共享一个公共地址空间,并且可以互相传输数据。主桥将分发这些点到点业务量,每个根复合体都能感知到整个系统中的主桥存储器和总线范围的相关信息。 端到端传输仅在根复合体模式下可用。端到端传输支持内存读/写请求、消息和完成(Completion)三种类型的TLP(事务层分组)。 根据端到端传输的两个端口是否处在同一个集群上,可以把端到端传输分为本地端到端传输和远程端到端传输两种事务。 在本地端到端传输中,从一个PCI Express端口发起的事务被路由到同一个芯片(即同一个Socket)上的不同PCI Express端口。同一个集群上的任意PCI Express端口之间都可以进行本地端到端传输。 而远程端到端传输则是指从一个PCI Express端口发起的事务被路由到另一个芯片上的PCI Express端口的方式。任意PCI Express端口之间都可以进行端到端传输。鲲鹏920片上系统的PCI Express控制器最多支持在4个集群之间进行远程端到端传输。 图3.35显示的是鲲鹏920处理器片上系统PCI Express控制器的本地端到端传输实例。图3.35中,端点EP0与PCI Express核0的PCI Express根端口0相连,端 点EP1则与PCI Express核0的PCI Express根端口N相连。设EP0欲发送一个TLP给EP1。PCI Express端口0在收到分组后,将通过应用层转发该分组至系统总线。进一步,系统总线将分组转发给PCI Express应用层,然后应用层将解码请求者标识(Requester ID),并将分组路由至目标PCI Express端口N,最终分组被发送至EP1。 图3.35鲲鹏920处理器片上系统PCI Express控制器的本地端到端传输 图3.36显示了鲲鹏920处理器片上系统PCI Express控制器的远程端到端传输实例。端点EP0与位于芯片0中的PCI Express核0的PCI Express根端口0相连, 图3.36鲲鹏920处理器片上系统PCI Express控制器的远程端到端传输实例 端点EP6与位于芯片1中的PCI Express核0的PCI Express根端口0相连。仍然假设EP0欲发送一个TLP给EP6。PCI Express根端口0收到报文后将其通过应用层转发至系统总线。系统总线通过华为Cache一致性系统(HCCS)接口将报文转发给芯片1。芯片1的应用层收到该分组后,将解码请求者标识,并将分组路由至目标PCI Express根端口0,最终分组被发送至EP6。 3.3.3鲲鹏920处理器片上系统的平台设备 1. 鲲鹏处理器片上系统的平台设备配置 鲲鹏处理器片上系统内置的平台设备是保证鲲鹏920系统正常工作的标准设备。表3.7给出了鲲鹏920处理器片上系统的平台设备配置。这些设备完全遵从ARM生态环境定义的编程接口规范。系统固件负责向操作系统提供这些设备的信息,操作系统则通过通用软件架构驱动这些设备。 表3.7鲲鹏920处理器片上系统的平台设备配置 平台设备功能数量兼容的架构版本 系统存储管理单元(SMMU)具有地址变换和存储访问保护功能。在PCI Express I/O集群中配置的系统存储管理单元还支持ATS/PRI虚拟化功能每个I/O集群配置一个私有的系统存储管理单元部件ARM系统存储管理单元v3规范 中断翻译服务(ITS)部件将MSI/MSIX设备中断翻译为系统LPI并路由至不同的通用中断控制器转发器(GICR)每个芯片配置了三个ITS部件ARM通用中断控制器架构规范版本4 通用中断控制器分发器(GICD)实现ARM通用中断控制器中断分发器(Interrupt Distributer)功能从软件的角度看,全系统只有一个GICD,物理上由分布在每个晶片上的GICD组合而成ARM通用中断控制器架构规范版本4 通用看门狗Watchdog实现看门狗定时器功能对称多处理器系统只会看到一个看门狗ARM服务器基础系统架构(SBSA)规范版本3.0 通用异步收发器(UART)实现通用异步收发器接口功能每个芯片配置一个物理UART接口 软件可见的UART接口数量由固件定义ARM服务器基础系统架构规范版本3.0 智能管理单元消息通道在应用(AP)和智能管理单元(IMU)之间交换信息配置一组智能管理单元消息通道ARM计算子系统SCP消息接口协议版本1.2 2. 鲲鹏920处理器片上系统的系统存储管理单元(SMMU) 鲲鹏920处理器片上系统的每个I/O集群中配置了一个私有的系统存储管理单元(SMMU),以支持ARM架构下的虚拟化扩展(Virtualization Extensions),用于I/O设备及加速引擎的虚拟化。系统存储管理单元实现了ARM 系统存储管理单元v3规范。 图3.37给出了鲲鹏920系统的系统存储管理单元架构示意图。结合图3.8和图3.37可以看出,鲲鹏920处理器片上系统的系统存储管理单元实现调度器和环总线之间的跨接和地址转换,完成设备实际对环总线的接入。系统存储管理单元和调度器之间采用同步接口连接,二者之间的接口兼容ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture,先进微控制器总线架构)中的AXI4规范。系统存储管理单元与分发器及环总线接入模块之间也都是通过同步接口互连。系统存储管理单元和环总线之间采用CHIE的RND接口,系统存储管理单元与处理器之间的配置接口采用APB3兼容接口和DJTAG接口。 图3.37鲲鹏920系统的系统存储管理单元架构示意图 鲲鹏920系统的系统存储管理单元可以和存储管理单元使用相同的页表,也可以使用自建的页表。系统存储管理单元支持AArch64执行状态下的ARMv8A长页表格式。在ARMv8A的AArch64模式下可实现对48位物理地址空间的访问。AArch64执行状态下支持4KB、16KB和64KB三种最小页表颗粒度。 鲲鹏920系统的系统存储管理单元可以同时处理来自多个设备的事务,并且根据这些事务的数据流标识(StreamID)使用不同的第一级(Stage1)页表和第二级(Stage2)页表进行地址和属性变换。系统存储管理单元支持第一级的虚拟地址到中间物理地址的地址变换、第二级中间物理地址到物理地址的地址变换,以及第一级+第二级的虚拟地址到物理地址变换。第一级支持最大64位虚拟地址对48位中间物理地址空间的地址变换; 第二级支持最大48位中间物理地址对48位物理地址空间的地址变换。两级变换可以单独或同时使用: 当系统只存在一个操作系统时,可以只使用第一级变换,不需要用第二级进行虚拟化; 而在只使用第二级变换的场景中,虚拟地址到中间物理地址的地址变换和管理由操作系统负责,虚拟机管理器(Hypervisor)管理第二级变换,完成各个操作系统所属的中间地址到物理地址的转换; 如果操作系统需要通过系统存储管理单元的第一级变换完成各个设备的虚拟地址到中间物理地址的地址转换,且仍然由虚拟机管理器完成各操作系统的中间地址到物理地址的转换,则需要同时开启系统存储管理单元的第一级变换和第二级变换。 系统存储管理单元还提供了分布式的最大16组32个表项全相联L1 TLB和统一的2048个表项4路组相联L2 TLB。L1 TLB被每个上一级调度器接入的主设备独享,两级TLB采用互斥(Exclusive)策略。TLB页表颗粒度包括4KB、2MB、1GB、16KB、32MB以及64KB、512MB等多种。 3. 鲲鹏920处理器片上系统的通用中断控制器(GIC) 鲲鹏920系统使用的超级中断控制器(Hyper Interrupt Controller)是基于ARM通用中断控制器(GIC)规范版本v3的全局中断管理部件。 如图3.38所示,鲲鹏920系统的通用中断控制器部件由通用中断控制器分发器(GICD,GIC Distributer)、中断翻译服务(ITS)部件、通用中断控制器转发器(GICR,GIC Redistributer)、CPU接口部件(CPUIF,CPU Interface)和通用中断控制器处理器接口(GICC,GIC CPU Interface)部件等5部分组成。从图3.38中可以看出,鲲鹏的超级中断控制器是由系统中分布的多个部件组成的逻辑部件。其中,GICR、CPUIF及GICC三种部件与处理器内核一一对应,因而其数量与系统中的处理器内核的数量一致。而ITS和GICD这两种部件采用对等分布式架构(Symmetric Distributed Architecture,SDA),一个系统根据需要可以有多个ITS和GICD,每个部件之间是对等关系,协作完成相应的功能。 通用中断控制器各组件之间有多种连接和传递中断的方式,多组ITS和GICD之间连接对应关系如图3.38(a)所示,部件之间的可通达性如图3.38(b)所示。注意图3.38描述的是抽象的通用中断控制器组成结构及相互关系,在鲲鹏920处理器片上系统芯片中,设备与各个ITS和GICD的连接逻辑是固定的。鲲鹏920处理器片上系统的每个芯片配置一个ITS部件,设置在超级I/O集群中; 而每个晶片上配置了一个GICD部件,系统中的所有GICD构成一个逻辑上的单一GICD部件,故从软件的角度看,全系统只有一个GICD。 图3.38鲲鹏920系统的通用中断控制器架构示意图 构成通用中断控制器的所有组件之间通过两种方式相互连接。图3.38中,实心箭头代表的连接关系为专线连接(Wire Connection),意味着两个组件通过物理硬连线或AXI的流式(Stream)总线一对一互连,逻辑上要求相互连接的组件必须位于同一个超级内核集群或者超级I/O集群内部。例如,由于GICD与设备和CPUIF之间都是通过专线连接,所以与每一个GICD直接相连的设备、CPUIF及其后对应的GICC和处理器内核都必须位于同一个超级内核集群之内。 空心箭头代表的连接关系为总线连接(Bus Connection)。总线连接意味着凡是接入总线的部件就连通性而言都可以相互交换消息,没有物理位置的限制。但是,由于部件属性及功能的限制,通过总线互连的部件之间在逻辑上仍有限制,例如有些部件之间只能单向传递消息,有些部件之间不能直接交互。表3.8给出了各部件通过总线传递消息的通达关系。 表3.8鲲鹏920系统通用中断控制器各部件通过总线传递消息的通达关系 源 目标 ITSGICRGICD 设备√×√ ITS×√× GICR×√× GICD××√ 注: √表示可通达; ×表示不可通达。 鲲鹏超级中断控制器各个部件的功能概述如下。 1) 设备 这里的设备指能够产生中断请求的外围设备。设备产生的中断请求通过专线连接或消息中断(MBI)方式上报到ITS或GICD。 2) GICD GICD(通用中断控制器分发器)的功能定义在ARM通用中断控制器规范中。 外部设备通过专线连接方式连接到GICD模块,并以WBI(Wire Based Interrupt,基于硬连接的中断)方式向GICD直接发送PPI/SPI请求。GICD也负责接收处理器内核通过内部总线下发的SGI请求,并根据中断的路由配置信息把中断分发到与之相连的合适的CPUIF进行后继处理。GICD模块也可以由软件配置,利用总线在系统中所有GICD之间相互转发和接收MBI中断请求。 与如图2.7 所示的ARMv8A通用中断控制器架构不同的是,鲲鹏超级中断控制器的GICD采用对等分布式架构,系统中可以有一个或多个对等的GICD,其中单个GICD的中断处理流程与通用中断控制器规范中定义的GICD处理流程一致,而分布式的多个GICD之间的中断传递的流程由华为公司自定义。 3) ITS ITS(中断翻译服务)部件的功能定义在ARM通用中断控制器规范中。该部件主要负责接收各种MBI型的LPI,例如PCI Express总线通过总线连接发出的MSI。 可以通过软件动态修改ITS模块的路由配置,将中断路由到系统中任意一个GICR。ITS依据中断路由配置信息,将中断以MBI方式重定向到合适的GICR进行后继处理。 4) GICR GICR(通用中断控制器转发器)的功能定义在ARM通用中断控制器规范中。GICR主要负责接收任何一个ITS上报的MBI请求,并将其转发给与之相连的CPUIF,或通过软件配置利用总线连接在多个GICR之间转发该请求,从而完成中断的清除、转移等操作。GICR接收ITS发送的命令(分为物理中断和虚拟中断命令)。 5) CPUIF和GICC 对比图2.7,可以发现鲲鹏超级中断控制器的CPU接口被分为CPUIF和GICC两部分。 其中,CPUIF的主要功能是接收GICR或GICD上报的中断请求,并依据软件配置信息调度出优先级最高的中断请求,将其转换为处理器内核接口要求的格式,上报到对应处理器内核的GICC。CPUIF也会接收处理器内核通过GICC下发的SGI请求,并通过内部总线转发到GICD。CPUIF与GICC之间交互命令的格式为AXI Stream命令格式。 而GICC则负责接收CPUIF上报的中断请求,通过IRQ或FIQ交由相应的处理器内核执行对应的中断处理程序,并提供软件应答中断的相关接口。GICC还提供给软件SGI接口,并转发处理器内核产生的SGI请求到CPUIF。 鲲鹏超级中断控制器也支持ARMv8A架构AArch64执行状态的安全化扩展和虚拟化扩展。 3.3.4鲲鹏920处理器片上系统的附加设备 1. 鲲鹏920处理器片上系统的附加设备拓扑 鲲鹏920处理器片上系统的附加设备包括片上附加设备和片外附加设备,片外附加设备通过PCI Express总线接口与鲲鹏920处理器片上系统连接。与片上附加设备相同,片外附加设备也采用PCI拓扑方式组织,并遵循PCI Express框架规范。 图3.39(a)、(b)给出了华为鲲鹏920处理器片上系统启动时的默认附加设备拓扑架构,BIOS也可以改变默认拓扑配置。图3.39(a)、(b)可以拼接为一张完整的拓扑图。其中,图3.39(a)给出了芯片编号为0和1的两个子系统的拓扑,而图3.39(b)显示的是芯片编号为2和3的两个子系统的拓扑,这四个子系统通过鲲鹏920的系统总线译码器相互关联,共同构成了鲲鹏920系统附加设备的完整拓扑。 鲲鹏920系统中的所有设备都处于PCI总线编号0~256。鲲鹏的片上总线通过芯片ID和SCL ID调整默认的地址译码逻辑。图3.39同时给出了默认的总线编号和地址范围分配关系。无论系统中实际配置了多少芯片,默认的总线编号和地址范围的分配关系都保持不变。也就是说,在单芯片系统和四芯片系统中,分配给芯片0的默认总线编号和地址范围都相同。但是如果有特殊的要求,固件可以改变这种默认配置。 受芯片物理设计和系统译码机制的限制,鲲鹏920系统的每个超级集群中都包含多个主桥。这些主桥可以被ACPI(高级配置与电源接口)表描述,但是只有真正在PCB上被物理使用的设备才能被ACPI表描述。例如,如果PCB只用到了芯片1的网络I/O集群上的网络接口控制器,则芯片0的网络I/O集群就不能在ACPI表中描述,芯片0的网络功能对软件而言也是不可见的。 图3.39华为鲲鹏920处理器片上系统的附加设备拓扑架构 图3.39(续) 如果片上附加设备不支持虚拟化,则这类设备作为集成端点连接至主桥,例如图3.39中IO_MGMT_ICL上的USB主机控制器。而支持虚拟化的附加设备则通过虚拟PCI至PCI桥连接至主桥,以便获取更多的PCI功能。某些片上设备可能在特定的PCB上并未使用,此时固件可以将这些设备的PCI头中的厂商ID配置为0xffff,从而对高层软件隐藏这些冗余的设备。 2. 鲲鹏920处理器片上系统的网络子系统 华为鲲鹏920处理器片上系统通过附加网络设备提供高带宽的以太网通信能力。鲲鹏920处理器片上系统的网络子系统即网络I/O集群,负责控制以太网帧的发送和接收,除了支持常规的以太网通信外,还支持基于融合以太网(Converged Ethernet)架构的远程直接存储器访问(Remote Direct Memory Access,RDMA)协议RoCE(RDMA over Converged Ethernet) V1和RoCE V2。 华为鲲鹏920处理器片上系统的网络子系统由网络接口控制器(Network Interface Controller,NIC)和附加的RoCEE两部分构成。网络接口控制器实现常规以太网通信功能; RoCEE即RoCE引擎(RDMA over Converged Ethernet Engine),支持远程DMA操作。 华为鲲鹏920处理器片上系统的网络接口控制器支持的最大线速为100Gb/s,可以通过Linux操作系统下强大的网络管理工具ethtool实现性能调优,也支持微软的网络协议栈。 华为鲲鹏920处理器的网络接口控制器包括多个1Gb/s至100Gb/s速率的以太网控制器,是完整的以太网控制器引擎,可以在RoCE引擎关闭的情况下单独工作。网络I/O集群支持二层DCB(Data Center Bridging,数据中心桥接)、MAC(介质访问控制器)地址表、多播表、VLAN(Virtual Local Area Network,虚拟局域网)过滤表、流表、中断及PCI Express化等功能。 从程序员角度看,网络I/O集群兼容PCI Express系统架构。网络I/O集群包含标准PCI Express配置空间,可以通过PCI ECAM机制访问,并支持BIOS枚举功能。网络I/O集群支持虚拟化功能时遵从SRIOV规范。鲲鹏网络I/O集群支持256个PCI功能单元,这些功能单元可以是虚拟功能单元(Virtual Function,VF),也可以是物理功能单元(Physical Function,PF)。每个PCI功能都有独立的任务和配置空间,用于处理服务数据并配置硬件。所有这些功能都按照PCI Express框架下的附加设备组织,并且与PCI Express总线外接的扩展网络接口卡置于同一框架下管理。鲲鹏的通用网络接口卡功能与RDMA逻辑集成在同一个PCI Express功能中,不占用额外的PCI功能编号。 华为鲲鹏920处理器片上系统的网络I/O集群有四种对外可见的接口: (1) PCI Express接口: 网络I/O集群内部嵌入了PCI Express化(将设备虚拟为PCI Express设备)的接口功能模块,网络I/O集群通过内部PCI Express端点接入处理器片上总线,对软件以PCI Express设备的形式呈现,最多支持8个物理功能单元。 (2) ARM总线/DJTAG接口: 用于加载初始化信息和调试使用。 (3) RMII: 鲲鹏920提供一个独立于MAC的精简介质独立接口(Reduced MediaIndependent Interface,RMII),将网络I/O集群与管理控制器(Management Controller,MC)连接。网络I/O集群的网络控制器边带接口(Network Controller Sideband Interface,NCSI)通过RMII与华为的主板管理控制器(BMC)芯片Hi1710相连,管理控制器则可通过RMII收发控制分组,从而实现对网卡的管理。 (4) 10条SERDES信号线: 网卡内集成的多速率以太网介质访问控制器(Media Access Controller,MAC)通过SERDES接口与其他芯片互连。若SERDES连接物理层PHY芯片,则接口类型为电口; 若SERDES连接光模块,则接口类型为光口; SERDES也可以通过背板互连。 图3.40给出了鲲鹏920处理器片上系统的网络I/O集群外部接口描述。 图3.40鲲鹏920处理器片上系统的网络I/O集群外部接口 ① G表示Gb/s。 华为鲲鹏920网络子系统基于共享内存架构,其内部架构如图3.41所示。 图3.41华为鲲鹏920网络子系统内部架构 图3.41的左边显示了网络接口控制器的结构。网络接口控制器的核心是NIC引擎,向软件提供收发接口,完成收发处理流程。在发送方向,软件通过设置发送队列指针分配发送任务,NIC引擎根据发送描述符给出的信息从主机内存中取出发送分组数据处理,并传输分组。在接收方向,NIC引擎负责接收分组,并将分组写入主机内存。NIC引擎也负责向软件提出中断请求并上报队列指针状态。 发送调度器根据流量分类(Traffic Class,TC)的带宽限制或PCI物理功能单元/虚拟功能单元的带宽限制对发送报文进行调度,协调实现主机、虚拟功能单元、流量分类和队列之间的发送安排。NIC引擎根据调度结果从调度队列中读取发送任务。 带收发分组缓冲区的内部交换逻辑(Internal Switch with TX/RX Packet Buffers)集成了存储交换单元(Storage Switch Unit,SSU),实现分组的缓冲、存储和交换。发送DMA部件TxDMA用于将分组送入分组队列,而接收DMA部件RxDMA则负责从处理器主存中加载分组至分组队列。 集成管理处理器(Integrated Management Processor,IMP)是一种内嵌的管理处理器,负责命令通道的管理和网络控制器边带接口NCSI功能。集成管理处理器负责解析读写命令,配置硬件或读取硬件配置。集成管理处理器还负责响应主板管理控制器(BMC)的配置请求。 网络接口控制器的MAC支持以太网帧的发送和接收,实现CRC计算和校验、流量控制、参数自动协商、训练等功能。MAC模块还定义了一系列“MAC CMD”命令,用于指定工作模式。 图3.41的左下部即为通过SERDES接口与外部链路连接的MAC模块,鲲鹏920的网络接口卡配置了8个MAC,连接外部10条SERDES通道。华为鲲鹏920的所有MAC都支持三种端口速率模式: CGE、LGE和GE。CGE模式支持100Gb/s速率; LGE模式支持50Gb/s、40Gb/s、25Gb/s和10Gb/s速率; GE模式支持1000Mb/s、100Mb/s和10Mb/s速率。这些MAC可以灵活配置组合。由于每个50GE/40GE的MAC可以被配置为1个XLGE MAC或者4个XGE MAC,因此,每个网络I/O集群可以支持下列配置组合: (1) 配置1: 2个100G/50G/40G/25G/10G/1GG表示Gb/s。MAC+2个1G MAC; (2) 配置2: 4个50G/25G/10G/1G MAC+2个1G MAC; (3) 配置3: 8个25G/10G/1G MAC。 图3.42给出了鲲鹏网络接口卡的网络接口速率配置组合。 图3.42鲲鹏网络接口卡的网络接口速率配置 基于RoCE协议的RoCEE通过硬件实现传输层和网络层的RDMA功能,用于卸载鲲鹏920处理器片上系统的负荷。华为鲲鹏920片上系统的RDMA的目标延迟低于600ns。RoCEE需要与网络I/O集群协同工作: RoCEE的二层处理,包括融合以太功能,由网络I/O集群完成; 在软件层,也需要先初始化网络I/O集群后再初始化RoCEE,才能正常调用RoCEE的功能。 3. 鲲鹏920处理器片上系统的外存储子系统 鲲鹏920处理器片上系统的外存储子系统借助鲲鹏920系统内置的SAS(串行连接SCSI,Serial Attached SCSI)控制器和SATA控制器连接外部存储设备。 鲲鹏920系统的SAS控制器是主机和外存设备之间交互的接口控制器。SAS控制器在系统内部通过片内总线与处理器交互,接收SAS发起者(SAS Initiator)和SATA主机应用层发出的SAS/SATA命令; 在对外接口侧,SAS控制器通过片内SERDES驱动的模拟差分信号线对与远端SAS/SATA设备交换数据。 SAS控制器遵循SAS 3.0和SATA 3.0协议,实现SAS协议定义的传输层、链路层、端口层(Port Layer)和物理层(PHY Layer)功能,以及SATA协议定义的传输层、链路层和物理层功能。 图3.43显示了鲲鹏920片内SAS控制器的配置与连接关系。华为鲲鹏920处理器片上系统在HAC_ICL中配置了两个SAS控制器,每个SAS控制器支持8个SAS物理层(PHY),对外提供8个SERDES差分线对的模拟接口。 图3.43鲲鹏920片内SAS控制器的配置与连接关系 SAS控制器支持宽端口(Wide Port)模式,每个端口的物理层个数可配置为2~8个。一个SAS控制器可以配置多个宽端口,例如4个×2宽端口、2个×4宽端口或1个×8宽端口。 SAS控制器可支持最多8个窄端口(Narrow Port),与每个物理层相关联的SAS通道(SAS Channel)都可以被配置为窄端口模式。 实际使用的端口个数通过配置每个SAS通道内部的物理层SAS地址确定。 图3.44显示了鲲鹏920的片内SAS控制器结构。SAS控制器内部包含如下模块。 图3.44鲲鹏920的片内SAS控制器结构 1) 硬件全局控制器模块 硬件全局控制器(Hardware Global Controller,HGC)模块是软硬件之间的交互接口,负责接收并解析软件下发的I/O命令,并集中管理和调度多重I/O请求,控制各SAS 通道与目标设备之间的I/O交互操作。 2) SAS通道 SAS通道是实现SAS和SATA协议的传输层、链路层和物理层功能的模块,负责完成SSP/SMP/STP/SATA帧的收发。一个SAS通道与一个SERDES通道互连。 SAS通道内部包含三个子模块: 端口配置模块负责接收软件对寄存器的配置和查询请求; 协议层实现SAS和SATA协议中定义的端口层、链路层和物理层功能; 传输模块实现传输层部分功能并管理SAS控制器和存储器之间的数据读、写和传输操作。 SAS物理层功能由SAS控制器片内的协议层和片外的SERDES模块共同实现,协议层实现物理层的数字处理功能。片外SERDES模块实现模拟处理,即在发送方向实现并/串转换及差分数据输出,在接收方向实现串/并转换及时钟与数据恢复。 3) 总线接口 总线接口在系统侧实现SAS控制器与片内总线交互,包括控制通道接口和数据通道接口。软件通过控制通道接口配置SAS控制器的初始化参数,配置或查询内部寄存器。数据通道接口用于传输与I/O相关的命令和数据。 除了SAS控制器外,鲲鹏920片上系统还配置了SATA主机(SATA Host,SATAH)控制器。SATA主机控制器遵循串行ATA国际组织的《串行ATA版本3.0(Serial ATA Revision 3.0)》规范和《串行ATA高级主机控制器接口(AHCI)版本1.3[Serial ATA Advanced Host Controller Interface (AHCI) 1.3]》规范。 鲲鹏920片上系统的SATA控制器是一个配置两个SATA端口的SATA主机总线适配器(Host Bus Adapter,HBA),实现AHCI规范下系统存储器和串行ATA设备之间的通信。 图3.45显示了鲲鹏920的SATA主机控制器结构。 图3.45鲲鹏920的SATA主机控制器结构 3.4基于鲲鹏920处理器片上系统的TaiShan服务器 TaiShan服务器是华为公司的新一代数据中心服务器,基于海思鲲鹏系列服务器处理器,适合为大数据、分布式存储、原生应用、高性能计算和数据库等应用高效加速,旨在满足数据中心多样性计算与绿色计算的需求。 目前,TaiShan服务器家族有两个产品系列: TaiShan 100系列服务器是基于鲲鹏916处理器的产品; TaiShan 200系列服务器是基于最新的鲲鹏920处理器片上系统,包含2280E边缘型、1280高密型、2280均衡型、2480高性能型、5280存储型和X6000节点高密型等多个产品型号。 3.4.1TaiShan 200服务器的组成与逻辑结构 表3.9列出了TaiShan 200系列部分服务器产品的核心参数。从表3.9中可以看出,TaiShan系列很好地利用了鲲鹏920处理器片上系统优良的可扩展性,系统架构组织灵活。1U机架服务器最多可以配置128个2.6GHz主频的处理器内核,节点型服务器可以组合成更高密度的计算系统。 表3.9TaiShan 200系列部分服务器产品的核心参数 产品系列TaiShan 200 产品型号1280高密型2180均衡型2280均衡型5280存储型X6000节点高密型 产品形态1U双路机架2U单路机架2U双路机架4U双路机架2U 4节点高密型 4个XA320节点 处理器数量2个鲲鹏9201个鲲鹏9202个鲲鹏9202个鲲鹏920每个节点 2个鲲鹏920 内存插槽数量 (DDR42933)32个16个32个32个每个节点16个 本地存储若干SAS/SATA HDD硬盘、NVMe SSD硬盘、SAS/SATA SSD硬盘(参数略) RAID支持支持RAID 0, 1, 5, 6, 10, 50, 60,支持超级电容掉电保护 PCI Express 扩展PCI Express 4.0×16和(或)PCI Express 4.0×8标准插槽(参数略) 板载网络1~2个板载网络插卡,每个插卡支持4×GE电口或者4×10GE光口或者4×25GE光口2×GE电口+ 1×100GE光口 操作系统SUSE、Ubuntu、CentOS、中标麒麟、深度、银河麒麟、凝思、泰山国心、普华、湖南麒麟等操作系统 1. 单片鲲鹏920处理器片上系统构成的服务器系统 图3.46描述了TaiShan 200系列中的2180均衡型服务器的逻辑结构。2180均衡型服务器是2U单路均衡型机架服务器。该服务器面向互联网、分布式存储、云计算、大数据、企业业务等领域,具有高性能、大容量存储、低能耗、易管理、易部署等优点。2180单台服务器支持1个鲲鹏920处理器片上系统,最多64个处理器内核; 最大支持16条DDR4 ECC内存储器,最大内存容量可达2048GB; 最多可支持3个PCI Express 4.0 ×8的标准扩展槽位。 图3.46TaiShan 200系列2180均衡型服务器的逻辑结构图 从逻辑结构图中可以看出,整个TaiShan服务器系统主要由三片集成电路及扩展卡、外部通信通道构成。其中,1颗鲲鹏920处理器片上系统芯片支持连接16个DDR4 DIMM内存条,并可通过PCI Express 4.0 ×8总线连接RAID(Redundant Arrays of Independent Disks,独立磁盘冗余阵列)控制扣卡(Xcede连接器),再引出SAS(Serial Attached SCSI,串行连接SCSI)信号线缆与硬盘背板连接,支持最多14个3.5″(英寸)SAS/SATA HDD硬盘或SAS/SATA SSD硬盘。 TaiShan 2180服务器的鲲鹏920处理器片上系统最多支持4个PCI Express 4.0接口,除了1个RAID扣卡专用的PCI Express扩展槽位外,另外3个标准PCI Express扩展槽位通过Riser卡引出。鲲鹏920处理器片上系统本身自带的高速SERDES接口扩展出灵活I/O卡(FlexIO)接口,支持扩展4个GE电口、4个10GE光口或者4个25GE光口以太网接口。TaiShan 2180支持服务器智能管理系统,主板上集成了华为自研的主板管理控制器芯片Hi1710,通过PCI Express、I2C和USB等通信端口与处理器互连,可以支持VGA、10/100/1000Mb/s RJ45管理网口、调试串口等管理接口。处理器内置的USB 3.0接口通过USB HUB可以扩展出4个USB端口。一片CPLD(Complex Programmable Logic Device,复杂可编程逻辑器件)用于实现简单逻辑功能。 2. 两片鲲鹏920处理器片上系统构成的多芯片服务器系统 对于需要更大计算能力的服务器系统,可以通过多片鲲鹏处理器片上系统组合成更多处理器内核的系统。图3.47给出了另一款TaiShan 200系列2280均衡型服务器 图3.47TaiShan 200系列2280均衡型服务器的逻辑结构图 配置鲲鹏920 7260、5250或5230处理器时的逻辑结构图,从图中可以看出鲲鹏处理器架构灵活的扩展能力。2280服务器是2U双路均衡型机架服务器,在保持低功耗特性的同时提供更高的计算性能,适合为大数据分析、软件定义存储、Web等应用场景的工作负载进行高效加速。TaiShan 2280服务器支持最多128个处理器内核和最多27个SAS/SATA HDD或SSD硬盘。 对比图3.46和图3.47的两种服务器逻辑结构可以看出,TaiShan 2280服务器比TaiShan 2180服务器增加了一颗鲲鹏920处理器片上系统CPU2,与处理器CPU1通过两组Hydra总线互连(配置鲲鹏920 5220或3210处理器时只需一组Hydra总线),传输速率最高可达30Gb/s,二者构成多芯片鲲鹏920处理器片上系统。 RAID控制扣卡仍通过PCI Express总线与CPU1连接,并通过SAS信号线缆连接至硬盘背板,通过不同的硬盘背板可支持最多16个3.5″或27个2.5″ SAS/SATA HDD硬盘、SAS/SATA SSD硬盘或16个2.5″ NVMe SSD硬盘等多种本地存储规格。 新增的第二颗鲲鹏920处理器片上系统CPU2同样支持16个DDR4 DIMM内存条。两颗鲲鹏920处理器片上系统本身自带的高速SERDES接口可扩展出两块灵活I/O卡(FlexIO)接口,每块灵活I/O卡均支持扩展4个GE电口、4个10GE光口或者4个25GE光口以太网接口。由于处理器片上系统可以连接三块Riser卡,故系统支持最多8个PCI Express 4.0×8或3个PCI Express 4.0×16+2个PCI Express 4.0×8标准插槽。 图3.48给出了TaiShan 200系列2280均衡型服务器配置鲲鹏920 7260、5250或5230处理器时的物理结构示意图。 图3.48TaiShan 200系列2280均衡型服务器的物理结构示意图 表3.10总结了TaiShan 200系列2280均衡型服务器的规格与特色。 表3.10TaiShan 200系列2280均衡型服务器的规格与特色 型号2280 形态2U 2路 CPU可支持32、48、64核配置,主频2.6GHz,最高功率为180W 内存32个DDR4 DIMM,最高传输速率2933MT/s,最大内存4TB 本地存储16×3.5″SAS/SATA HDD硬盘; 27×2.5″SAS/SATA HDD硬盘; 16×3.5″NVMe SSD硬盘 RAID支持RAID 0/1/10/1E/5/50/6/60等 续表 PCI Express扩展最多8个PCI Express 4.0×8或3个PCI Express 4.0×16+2个PCI Express 4.0×8标准插槽 板载网卡4×GE或4×10GE或4×25GE 电源2个900W或2000W热插拔电源,支持AC 220V或DC 240V,支持1+1冗余 风扇4个热拔插风扇,支持N+1冗余 温度范围5~40℃ 主要特点 高性能: 鲲鹏920处理器片上系统,性能比肩x86高端型号; 8通道内存技术,支持32个DDR4内存插槽,最高内存容量可达4TB; 支持华为Atlas 300 AI加速卡、ES3000 V5 NVMe SSD 灵活适配: 支持多个I/O模组,实现丰富的硬盘配置; 支持板载的灵活网卡,支持GE/10GE/25GE,实现不同网络配置 安全可靠: 采用华为全自研计算芯片; 整机器件实现全国产化,保障可持续供应 图3.49描述了TaiShan 200系列2280均衡型服务器的内部结构。 3. 节点型多芯片服务器系统 对于需要聚合更大算力的应用场景,可以把多个服务器节点通过管理板整合成服务器系统。TaiShan 200系列X6000高密型服务器是2U 4节点的高密服务器系统,集灵活扩展、高密度、高可靠、易维护管理和高效节能等特点于一身。 图3.50为TaiShan 200系列X6000高密型服务器风冷整机系统结构图。 TaiShan 200系列X6000服务器在2U高度的机架上能够容纳4个XA320或XA320C高密型2路计算节点。每个XA320/XA320C计算节点配置两个鲲鹏920处理器片上系统,每个处理器支持48核或64核,每个节点的逻辑结构与TaiShan 200系列2280均衡型服务器类似。 表3.11总结了TaiShan 200系列服务器使用的XA320及XA320C计算节点的规格。 TaiShan X6000提供HMM+iBMC的管理架构,通过管理板(HMM)实现X6000的机框管理,提供环境温度监控、风扇管理、电源管理和节点管理、整框的资产信息等功能。管理板通过一个汇聚模块在机框后面板提供一个汇聚网口,客户端连接到此汇聚网口后,不需要另外连接节点的iBMC管理网口,通过一根管理网线即可分别登录4个节点的iBMC,实现整框系统带外管理对外呈现一个接口。 iBMC智能管理系统软件是华为自主开发的具有完全自主知识产权的服务器远程管理系统,兼容服务器业界管理标准IPMI2.0规范,具有高可靠的硬件监控和管理功能。iBMC实现节点的管理和用户界面的呈现,既支持服务器节点单独管理,也可通过 图3.49TaiShan 200系列2280均衡型服务器的内部结构 新一代的HMM整机管理系统实现对整框共用部件的散热、电源、机框资产信息的管理。用户可通过节点的管理网口或机箱的汇聚网口登录到节点的iBMC Web用户界面。 图3.50TaiShan 200系列X6000高密型服务器风冷整机系统结构图 表3.11TaiShan 200系列服务器XA320及XA320C计算节点规格 形态XA320计算节点XA320C计算节点 处理器2个鲲鹏920(48核,2.6GHz)2个鲲鹏920(48核/64核,2.6GHz) 内存插槽16个DDR4,传输速率为2933MT/s 硬盘数量支持2~6个2.5″SAS/SATA硬盘 板载网络2×GE电口+1×100GE光口 PCI Express扩展支持2个PCI Express半高半长的标准扩展插槽支持1个PCI Express半高半长的标准扩展插槽 工作温度5~35℃ 尺寸(宽×深×高)177.9mm×545.5mm×40.5mm TaiShan 200系列X6000高密型服务器可以针对互联网业务应用提供低能耗、易维护、快速部署、定制化的服务器解决方案,也可针对HPC业务应用,提供高可靠、高性能的硬件基础平台。 3.4.2TaiShan 200服务器的RAS技术 1. TaiShan服务器的RAS框架 TaiShan服务器通常工作在对计算能力要求高、实时性要求高、业务不可中断的应用场景中,这类场景对服务器基础设施的RAS特性有较高的要求。TaiShan服务器在设计过程中对每个关键部件和每条关键链路都提供足够的RAS特性进行保护。为了保证TaiShan服务器的高可用性,除了采用严格的降额设计及可靠性筛选测试和信号级测试等生产制造过程中的质量保证手段外,RAS技术在设计层面还需满足三个核心目标: (1) 硬件部件具有高可靠性。部件可靠性高,具备一定容错机制,极少出现故障。 (2) 出现故障时能通过一系列手段保证故障不会影响系统主要功能和业务。可以对故障实现检测、纠错、预测和隔离。 (3) 对于影响系统功能的错误,能第一时间定位到具体部件并且易于维护更换,能快速恢复业务。这要求对严重错误能尽快定位,故障易于修复。 TaiShan服务器需要实现对系统异常的检测,对检测到的故障进行搜集、分析,并在固件、操作系统和应用程序等各个层面对检测到的故障进行有针对性的处理,确保将故障的影响降到最低,以提升系统连续服务时间。图3.51描述了TaiShan服务器系统的RAS框架。 图3.51TaiShan服务器系统的RAS框架 华为的TaiShan服务器具备全面的故障检测能力,能检测系统内几乎所有的基础类硬件故障及业务类硬件故障,并配置了软硬件一体的故障诊断、预测、恢复和隔离机制。基于华为最新的自研管理芯片及管理软件,TaiShan服务器通过完全自主的带外管理系统支持远程管理,可实现设备配置、软件和固件升级、故障管理等操作的一站式服务。 2. 鲲鹏920处理器片上系统的RAS设计 作为为服务器设计的处理器,鲲鹏920处理器片上系统在保持高性能、低功耗优势的同时,着重强化了服务器级RAS设计,利用故障检测、故障纠错、故障记录、故障上报和故障修复等技术实现了全流程的RAS架构设计,具备了与最高端服务器处理器相当的RAS能力。 鲲鹏920处理器片上系统的处理器和主存系统与ARM RAS扩展规范完全兼容,并实现了该规范的全部要求。鲲鹏920处理器片上系统只支持固件优先模式的差错处理机制。 图3.52列出了鲲鹏920处理器片上系统的RAS设计要点。可以看出,鲲鹏920处理器片上系统在其设计的过程中,对每个关键部件和每条关键路径都提供了足够强大的RAS特性保护机制。 处理器系统的故障检测能力是系统RAS的基础。硬件确保高可靠性的核心技术即差错检测和差错纠正(Error Detection and Correction)技术,鲲鹏920处理器片上系统具备覆盖全模块的差错检测及纠错能力。表3.12列出了鲲鹏920处理器片上系统中主要的数据模块和总线模块采用的检错和纠错方法。 处理器系统涉及的故障可以分为三类: 数据错误、总线错误和逻辑功能错误。与这三种故障相对应,鲲鹏920处理器片上系统的故障检测手段也分为三类: 对数据模块主要使用错误修正码(Error Correction Code,ECC)和奇偶校验码(Parity)进行数据错误检错; 对总线接口模块使用循环冗余校验(Cyclic Redundancy Check,CRC)方法检错; 而逻辑功能模块则使用存储器内置自检(Memory BuiltIn Self Tests,MBIST)和超时检测等方法检错。纠错一般通过ECC和重试(Retry)机制来实现。 鲲鹏920系统的硬件提供已修复差错计数功能。处理器和存储系统的差错记录功能与ARM RAS扩展规范完全兼容。 3. 内存储系统的RAS设计 存储系统的可靠性是系统运行的保障。在鲲鹏920处理器片上系统中,无论是片内的各级Cache还是作为主存使用的DDR SDRAM,都设计了差错检查和纠正等高可靠性的容错机制,对最容易发生错误的数据存储模块提供全面的保护。 图3.52鲲鹏920处理器片上系统的RAS设计 表3.12鲲鹏920处理器片上系统数据模块和总线模块采用的检错和纠错方法 模 块 名 称功 能 部 件检错/纠错方法 CoreIFU处理器内核取指单元 (Instruction Fetch Unit)检错: 奇偶校验[单二进制位错误检测(SED)] 纠错: 作废并重新取指令行 CoreLSU(DCU)第一级数据Cache检错: ECC[单二进制位纠错双二进制位检错(SECDED)] 纠错: ECC[单二进制位纠错双二进制位检错(SECDED)] CoreMMUL2 TLB Cache检错: 奇偶校验[单二进制位错误检测(SED)] CoreL2C(MLC)中间级Cache (Middle Level Cache)检错: ECC[单二进制位纠错双二进制位检错(SECDED)] 纠错: ECC[单二进制位纠错双二进制位检错(SECDED)] Uncore LLC最末级Cache (Last Level Cache)检错: ECC[单二进制位纠错双二进制位检错(SECDED)] 纠错: ECC[单二进制位纠错双二进制位检错(SECDED)] UncoreHHA(HA)Hydra根代理 各类缓冲器检错: ECC[单二进制位纠错双二进制位检错(SECDED)] 纠错: ECC[单二进制位纠错双二进制位检错(SECDED)] UncoreDDRC(IMC) 主存检错: CRC+奇偶校验 纠错: 重读/单一器件纠错(SDEC) WDB(写数据缓冲器)检错: ECC[单二进制位纠错双二进制位检错(SECDED)] 纠错: ECC[单二进制位纠错双二进制位检错(SECDED)] RDB(读数据缓冲器)检错: ECC[单二进制位纠错双二进制位检错(SECDED)] 纠错: ECC[单二进制位纠错双二进制位检错(SECDED)] UncoreHCCS 物理层检错: CRC 接收器外层模块检错: CRC 接收器队列检错: ECC[单二进制位纠错双二进制位检错(SECDED)] 纠错: ECC[单二进制位纠错双二进制位检错(SECDED)] 发送器缓冲器检错: ECC[单二进制位纠错双二进制位检错(SECDED)] 纠错: ECC[单二进制位纠错双二进制位检错(SECDED)] 续表 模 块 名 称功 能 部 件检错/纠错方法 I/OPCI Express 内部缓冲器检错: ECC[单二进制位纠错双二进制位检错(SECDED)] 纠错: ECC[单二进制位纠错双二进制位检错(SECDED)] 协议层检错: LCRC/ECRC(链路CRC/端到端CRC) I/OSAS 内部缓冲器检错: ECC[单二进制位纠错双二进制位检错(SECDED)] 纠错: ECC[单二进制位纠错双二进制位检错(SECDED)] 协议层检错: CRC I/O网卡 (含RoCE引擎) 内部缓冲器检错: ECC[单二进制位纠错双二进制位检错(SECDED)] 纠错: ECC[单二进制位纠错双二进制位检错(SECDED)] 协议层检错: CRC I/OUSB 内部缓冲器检错: ECC[单二进制位纠错双二进制位检错(SECDED)] 纠错: ECC[单二进制位纠错双二进制位检错(SECDED)] 协议层检错: CRC 1) Cache容错与保护机制 从表3.12可以看出,鲲鹏920处理器片上系统对各级Cache配备了完整的纠错和检错逻辑。对于L1 I Cache,容错设计通过奇偶校验进行错误检测,在检测到错误时可以采用重试的方式进行纠错。对于L2 Cache和L3 Cache,则通过ECC(错误修正码)检测多二进制位错误并纠正单二进制位错误。检测到出现概率最大的单二进制位错误后会首先对数据进行纠正,然后再将修正后的正确数据传送到处理器,并将结果写回到L2 Cache和L3 Cache中,避免ECC错误的累积。 L1 I Cache读操作造成的不可修正错误会使相应的L1 I Cache行失效。 除了在正常读写操作过程中通过完善的错误检测及纠正机制提升Cache的RAS特性外,鲲鹏920处理器片上系统还设计了初始化自检和Cache巡检等多层次的RAS功能。 例如,鲲鹏920处理器片上系统采用了故障弹性引导(Fault Resilient Boot,FRB)处理器内核停用(Core Disable)技术,在启动过程中对发生故障的处理器内核进行隔离,提高系统的可靠性和可用性。在对CPU进行初始化时,鲲鹏920处理器片上系统会首先对L1 Cache、L2 Cache和L3 Cache进行全面的检查,并将检查结果记录到相关寄存器中,必要时可以由BIOS根据自检结果对出错的处理器内核进行隔离。 鲲鹏920处理器片上系统还可以定期对Cache进行巡检,及时纠正其中出现的错误,从而消除绝大多数暂态错误造成的不良影响。 对于数据Cache读操作或数据Cache读分配操作造成的不可修正错误,将作为同步外部中止(Synchronous External Abort,SEA)上报。对于指令Cache再填充(Refill)操作造成的不可修正错误,也将报告为同步外部中止,即预取中止(Prefetch Abort)异常。 2) 主存系统的错误检测与错误纠正 鲲鹏920系统在存储器件内部以及命令和地址传输路径上都设计了检错与纠错机制。 鲲鹏920系统强化了DDR存储器的RAS机制。对于存储器件本身,常用的主存系统通常使用ECC纠错算法,但只能检测并纠正单二进制位错误。鲲鹏920处理器片上系统的DDR控制器支持纠错能力更为强大的单一器件纠错(Single Device Error Correction,SDEC)机制,通过对主存数据采用特殊的重排和分组机制,可以实现单个×4 DRAM颗粒上的任意二进制位错误的检错和纠错,比传统主存使用的ECC纠错机制可靠性提升4倍以上。 鲲鹏920系统的DDR控制器支持的单通道数据接口位宽为72位,其中有效数据位占64位,可选的校验数据位占8位,校验算法可以选择使用SEC DED ECC算法或者RAS算法(×4/×8 SDDCSDDC(Single Device Data Correction,单设备数据修正)。算法、×4 FADCFADC(First Area Data Correction,首区域数据修正)。算法或×4 MADCMADC(Multi Area Data Correction,多区域数据修正)。算法)。 在存储器工作过程中,还会出现一些软错误或者偶发性的错误,这些错误主要是由环境影响造成的,或者是高能粒子作用的结果,一般并不会持续发生。因此,在检测到此类错误后,将错误数据纠正后回写,就可以消除此类错误。基于此种理论,为了更好地保护主存内的数据,鲲鹏的存储系统引入了被动清洗(Passive Scrubbing)技术,在进行主存数据读取操作时如果检测到数据错误,会将出错数据纠正并将纠正后的正确数据回写到主存中覆盖出错误的数据。 更进一步,鲲鹏920的存储器控制器中还集成了一个巡检引擎,通过一种主动清洗(Active Scrubbing)机制对系统内所有的主存单元进行不间断的周期性巡检。主存巡检引擎可以按照BIOS配置的频率对系统主存进行周期性巡查,在发现主存数据中的可纠正错误时,将错误纠正并把正确数据写回主存。 被动清洗和主动清洗技术都可以有效预防在同一地址段上因可纠正错误无法被及时处理导致错误累积而产生不可纠正错误的现象。这两种技术完全是基于硬件实现的,对操作系统透明。 对于主存命令和地址传输路径上可能引起的错误,则可采用奇偶校验与重试机制。鲲鹏920系统的存储器控制器会对系统命令或地址生成奇偶校验码,并将校验码传输到DDR DIMM内存条,同时监控DIMM内存条的错误引脚。当在DIMM内存条上检测到命令或地址奇偶校验错误时,存储器控制器会进行重试以尝试恢复操作的功能。这种校验及重传机制能很好地避免链路上偶发性的错误对系统造成的不良影响。 3) 主存系统的错误预防机制 正常情况下,由于访存数据的随机性,主存数据线上的数据流分布是不均匀的,也即可能集中出现较多的1或较多的0。这种集中出现的连续的1或连续的0会在数据线上形成持续的高电平或者低电平,造成能量集中,从而提高了错误出现的概率。为此,鲲鹏920系统采用数据加扰(Data Scrambling)技术将真实数据通过哈希编码机制转化为0和1分布更平滑的码流,杜绝了传输链路上持续性的能量集中现象,降低了错误发生的概率。 由于存储机制的原因,当前使用的DRAM内存条在高温下其存储单元的漏电流会增大,这会导致存储于其中的数据较正常温度下出错的概率成倍增大。为了保证系统在高温环境下依然具有稳定的表现,TaiShan服务器采用特别的主存热保护(Memory Thermal Throttling)机制,通过分布在每根DIMM内存条上的温度及功率传感器对主存的温度及功率数据进行实时监控。当检测到温度过高或者功耗过大时,会采取主动降低内存运行速度的方式降低内存的负载及功耗,从而将内存条温度控制在合理的范围内。 此外,短时间内主存温度过高还会触发X2刷新机制,通过加快主存数据刷新频率来保证主存数据不出错。 通过主存热保护与X2刷新这两种技术的结合,可以有效防止因为高温问题引发的主存数据错误或主存物理损坏,使鲲鹏920系统能够适应更为严格的机房环境。 4) 主存系统的故障隔离机制 对于频繁出现可纠正错误的不可靠主存部件,鲲鹏920系统可以根据不同情况执行故障页隔离(Page Offline)、故障存储体隔离或故障内存颗粒隔离等不同粒度、不同层次的故障隔离替换操作。 TaiShan服务器在发生主存可纠正错误后会将详细的故障信息上报到主板管理控制器。主板管理控制器收到故障消息后会根据收集到的主存历史故障信息分析故障模型。如果主存的故障模型符合故障页判定条件,则会通过高级配置和电源管理接口(ACPI)通知操作系统将故障页中的数据进行迁移,并对故障页进行标记隔离,停止使用。 当DIMM内存条由于器件老化等原因造成某个DRAM存储颗粒失效时,系统可能会持续不断地产生可纠正错误。由于此种情况是硬件故障,因此无法通过纠错写回来恢复。虽然此时由于纠错算法的存在,系统仍能正常工作,但此时系统将面临两方面的问题: 一是频繁的纠错会导致系统增加额外的开销; 二是会导致系统发生不可纠正错误的概率大大提高,因为在这种情况下如果同一个存储体内的其他颗粒上由于软失效也出现个别单二进制位错误,就会导致可纠正错误演变为不可纠正错误,从而导致系统挂死。因此,在出现这种由于硬件故障导致的持续性错误时,最好的措施是将出现故障的器件进行隔离,避免宕机风险。TaiShan服务器使用自适应双器件纠错(Adaptive Double Device Error Correction,ADDEC)技术来解决此问题,实现故障存储体隔离或故障颗粒隔离。自适应双器件纠错技术可以使用内存条上的奇偶校验颗粒替换故障存储体(Bank)甚至故障颗粒,从而彻底隔离故障源。此外,如果是使用×4颗粒的内存条,则可在虚拟锁步(Virtual LockStep)技术的支持下,最多可以进行两次故障存储体或故障颗粒的替换操作。这种多区域的故障隔离能力在不损失系统主存容量的情况下极大提升了主存的可靠性。相对于单次故障替换,自适应双器件纠错技术支持的多颗粒或多存储体替换机制对主存可靠性的提升达到17倍之多。 4. 互连总线与I/O系统的RAS设计 1) HCCS链路保护 作为晶片之间和插槽之间的互连通道,HCCS通道可靠性的重要性不言而喻。华为Cache一致性系统 (HCCS)链路层具备16位CRC校验和出错重传能力。CRC机制通过检测错误确保HCCS传输链路上的数据的正确性: 在HCCS链路发送端,通过特定的算法对欲传输的数据生成特定的CRC校验码随数据一起发送,接收端在接收到数据后会采用同样的算法计算出CRC校验码并与发送过来的CRC值进行对比。如对比CRC值有差异,就证明数据在传输过程中出现了错误,接收端会要求发送端重传出错的数据。这种CRC校验及重传机制能完全避免偶发性的错误对系统造成的影响。 2) I/O系统故障检测与报告 鲲鹏920系统的I/O系统包括SAS控制器/SATA控制器、网络接口控制器及RoCE引擎、海思加速控制器(HAC)、智能管理单元(IMU)和PCI Express根端口等多种设备与模块。 鲲鹏920系统的网络I/O集群、HAC_ICL和IO_MGMT_ICL等I/O集群都支持ECC校验、CRC校验、污染数据隔离、超时检测和差错注入等RAS功能。鲲鹏920处理器片上系统具备完备的I/O错误检测及上报机制,能实现对I/O各个功能子模块的错误检测并上报。 鲲鹏920系统的集成设备及加速控制器的故障记录功能兼容PCI Express总线规范4.0基线(Baseline)的相关标准。而PCI Express设备的差错记录则兼容PCI Express总线规范4.0的高级差错上报(Advanced Error Reporting,AER)机制,内部的非PCI Express端口还支持基于ARM RAS扩展规范的SERR错误检测及报告能力。在设备访问过程中出现的不可修正错误将被报告为系统错误中断(SError Interrupt,SEI)。各个模块的错误汇总之后,可以上报到全局的错误状态寄存器,并可配置成触发故障处理中断(FaultHandling Interrupt,FHI)或同步外部中止(SEA)异常,也可以通过差错引脚通知故障管理模块。 鲲鹏920系统的系统存储管理单元实现了系统存储管理单元 v3协议定义的RAS功能。当系统存储管理单元内部存储器发生1位ECC差错时会触发修正差错机制,并可以上报故障处理中断。当系统存储管理单元内部存储器发生2位及以上的ECC差错时会出现不可恢复的未修正差错(Unrecoverable Uncorrected Error),可以上报故障处理中断及差错恢复中断。对DDR存储器读写操作时产生的可恢复未修正差错(Recoverable Uncorrected Error),同样可以上报故障处理中断及差错恢复中断。 3) PCI Express子系统的RAS机制 鲲鹏920处理器片上系统中的PCI Express设备同样具备多种容错功能: (1) PCI Express链路重新训练与恢复: 当PCI Express的某条链路出现故障导致降级时,PCI Express控制器能在不影响数据传输的情况下通过重新训练(Retraining)的方式进行故障恢复。 (2) 链路层CRC错误检测与重试: 所有PCI Express接口都支持链路层CRC校验及错误重传机制,链路上偶发性的数据错误通过CRC校验机制可以被检测到,并能通过重传进行恢复。 (3) PCI Express污染数据隔离(Poison Data Containment): 对于PCI Express链路内部产生的错误数据,或者通过重传无法恢复的数据,会被打上Poison(污染)标签并继续传输。接收端在接收到这些标记为Poison的数据后或者会忽略这些错误数据,或者是带上Poison标签继续传输,当有软件消费这些数据时可以根据具体情况进行差异化处理。 (4) PCI Express DPC技术: 当检测到某个PCI Express根端口有不可纠正错误发生时,PCI Express端口可以通过DPC(Downstream Port Containment,下游端口隔离)技术断开与错误端口相关的PCI Express链路,并通过重连的方式尝试进行恢复。为了保证此过程不影响操作系统下设备的正常运行,PCI Express根端口在断开与PCI Express端点设备之间的链路之前会保存好PCI Express端点设备的上下文,并在链路恢复后恢复其上下文信息,保证系统运行不受影响。 5. 软硬件多层次协同的RAS机制 除了在硬件层次通过检错、纠错、重传等多种方法保证系统可靠性外,还需要固件、操作系统内核、主板管理控制器、虚拟机管理器等不同层次的软硬件部件协同配合,才能在尽量少占用系统资源的同时最大限度提升RAS特性。 1) 故障约束机制 对于不能通过校验和纠错或重传方法消除的故障,需要通过一定机制抑制故障造成的不良影响。TaiShan服务器设计了一系列的故障约束(Fault Restrain)机制。 TaiShan服务器支持固件优先处理模式,允许所有的错误都能够优先触发中断并由智能管理单元/可信固件(TF)先进行错误处理,从而提高处理的灵活性及实时性。智能管理单元/可信固件可以在故障发生的第一时间将错误现场信息搜集并上报给主板管理控制器,并对不同的错误进行差异化的处理,例如触发故障隔离操作或复位故障模块等。处理完成后再视情况决定是否将错误上报给操作系统,以及以何种错误级别上报操作系统。TaiShan服务器的这一特性可以极大提升系统错误处理的能力。 在传统的错误处理机制中,一旦在产生错误的模块或传输数据的模块中检测到不可纠正错误,将直接触发系统复位。而在TaiShan服务器的设备与接口控制器中引入的污染数据隔离与差错恢复(Poison Data Containment & Error Recovery)机制下,可基于数据的实际使用情况对不可纠正错误执行错误处理: 在错误源头和传输过程中检测到不可纠正错误的模块并不会被简单复位,而是将被污染数据打上“污染(Poison)”标记并继续传输,并且在对应的故障记录寄存器中对此不可纠正的错误类型进行精细化的分类标记。 例如,鲲鹏920处理器片上系统的DDR控制器即支持符合ARM RAS扩展规范的Poison标记功能。对于在Cache写回操作过程中出现的不可修正错误,DDR控制器支持将写数据标记为Poison,并把该标记和数据一起写入DDR SDRAM。DDR控制器遇到携带Poison标记的读出数据时,会将标记和读数据一起返回给总线。当通过读数据校验发现不可纠正错误时,DDR控制器也会将该读数据标记为Poison,返回给总线。当DDR控制器内部的SRAM校验出现不可纠正错误时,同样会将对应的数据标记为Poison返回给总线。 只有当被污染数据即将被使用时才会将故障信息上报给操作系统。操作系统会根据详细的错误类型标记及具体使用数据的模块执行多样化的处理。操作系统首先会判断错误数据是否在使用,是否被某个应用程序或某个特定的线程使用,或者是否用于操作系统内核等,然后再根据不同的错误类型进行差异化处理。差异化处理方式包括忽略错误(例如显示器上某个像素点的错误)、丢弃数据、发起重传、重启出错应用程序或去掉相关的进程、触发系统复位等多种手段,从而可以有效降低因不可纠正错误导致的整个系统的崩溃,并将不可纠正错误导致的系统宕机概率降低60%以上。 故障风暴是指非重大(Fatal)故障以非常高的频率连续发生的现象。此类非重大故障会对故障监控系统带来很大冲击,从而间接影响系统的正常运行。为了保证故障监控的实时性,故障监控系统通常是以中断响应方式及时进行故障检测并搜集相关的故障信息。当故障风暴产生时,一方面处理器会花费大量时间尝试纠错,造成系统性能下降,甚至内部定时器策略超时导致系统异常; 另一方面故障风暴引起的频繁中断处理也会耗费除CPU时间之外的大量系统资源,导致某些程序被长时间挂起,进而影响业务的正常运行。为了解决此问题,TaiShan服务器针对故障中断处理设计了中断风暴抑制机制,在故障监控系统中引入了风暴判定机制,当故障被判定为故障风暴时,会屏蔽对应故障的中断触发,并通过轮询方式查询硬件的故障状态,并在判定中断风暴消除后重新打开中断,保证在及时全面搜集系统故障信息的同时使系统业务不受影响。 2) 故障诊断管理系统 为应对各种不同硬件产生的类型各异的问题,TaiShan系列服务器除了遵循ARM RAS扩展规范和PCI Express规范实现ARM RAS差错上报(ARM RAS Error Reporting,ARER)机制和PCI Express高级差错上报(AER)机制外,还整合了硬件、BIOS、iBMC带外管理系统以及现有操作系统的故障处理机制,构建了一套完整的故障诊断管理(Fault Diagnosis Management,FDM)系统。故障诊断管理系统可以在出现故障时提供完备的故障信息搜集、故障诊断、故障定位、故障上报、故障预警和故障恢复等一系列功能,实现服务器的高可用性。 在发现电源模块、风扇模块、单板电源或时钟部件等基础类硬件的故障时,可以由服务器的带外管理系统单独处理,故障检测和处理流程一般不需要经过上层业务资源。 对于处理器、主存、PCI Express设备以及硬盘等核心模块发生的业务硬件类故障,由于这些模块与客户的业务强相关,故这类硬件故障大部分是由BIOS和iBMC共同完成故障定位分析,有些故障还需要操作系统参与故障定位。 故障诊断管理系统的功能主要包括故障信息搜集、故障诊断及故障部件精确定位和故障预警。 (1) 故障信息搜集。 故障诊断管理系统中的故障信息搜集模块通过跟踪系统的重要信号,再结合BIOS提供的支持,能检测系统几乎所有基础类硬件故障及业务类硬件故障。当检测到硬件问题时,会通过带内、带外相结合的故障数据收集机制实现全方位自动化的故障数据搜集并汇总到故障管理系统。 (2) 故障诊断及故障部件精确定位。 故障诊断管理系统内部集成的故障诊断模块会对当前搜集到的故障信息及历史故障数据进行分析,精确定位出真正的故障部件并上报用户。 (3) 故障预警。 服务器长时间运行后,虽然系统还未发生崩溃,但其内部有些部件可能已经在间歇或持续性地产生可恢复的故障/可纠正的错误(如ECC差错等)了。虽然这些故障暂时不影响业务,但对系统的持续运行带来了极大的风险,随时可能发生灾难性故障,导致系统宕机和业务中断。因此,如果能在部件真正失效前及早发现并采取计划内维护或热插拔等手段,则可有效避免系统计划外宕机。 为此,故障诊断管理系统中集成了专家诊断系统,能根据大量的历史监控数据对系统各个关键模块的健康状态进行评估,对系统面临的风险进行预判。故障管理系统会在数据丢失或系统发生不可纠正或灾难性错误之前进行干预,配合各种故障隔离机制提前隔离风险部件,或者以事件或告警的方式提示用户。这类事件或者告警一般包含对问题的全面描述,包括具体的风险或者故障部件、严重性分类(信息、警告、严重、危急等)、可能的故障原因和建议措施等。用户可以在获知此类消息后进行计划内系统维护,实现防患于未然,确保业务的长期稳定运行。 图3.53给出了TaiShan服务器的多层次协同RAS机制涉及的主要部件示意图。 图3.53TaiShan服务器的多层次协同RAS机制涉及的主要部件示意图 3.4.3TaiShan 200服务器的鲲鹏加速引擎 为了提升服务器系统的性能,TaiShan 200系列服务器基于鲲鹏920处理器片上系统的硬件加速技术提供了软硬件融合的鲲鹏加速引擎(Kunpeng Accelerator Engine,KAE)解决方案。TaiShan服务器的鲲鹏加速引擎支持对称加密、非对称加密和数字签名、压缩/解压缩等算法,用于加速SSL/TLSSSL(Secure Sockets Layer,安全套接层)及TLS(Transport Layer Security,传输层安全)是为网络通信提供安全及数据完整性的一种安全协议。应用和数据压缩,可以显著降低处理器的计算压力,提高处理器效率。借助加速引擎的软硬件整合解决方案,加速引擎对应用层屏蔽了其内部实现细节,用户通过OpenSSL或zlib标准接口即可以实现现有业务的快速迁移。 目前,TaiShan 200系列服务器的加速引擎可以支持的算法和模式包括: 摘要算法SM3; 对称加密算法SM4,支持CTRCTR(Counter,计数器);/XTSXTS(XEXbased Tweakedcodebook with ciphertext Stealing,基于XEX密文窃取的可调整的密码本);/CBCCBC(Cipher Block Chaining,加密块链接); 模式,其中SM4XTS模式仅支持内核态使用; 对称加密算法AES,支持ECBECB(Electronic Codebook Book,电子密码本)。/CTR/XTS/CBC模式; 非对称算法RSA,支持异步模型,支持密钥大小1024b、2048b、3072b或4096b; 压缩/解压缩算法,支持zlib/gzip。 1. 加速引擎的功能结构 随着异构计算架构的兴起,在通用CPU处理器之外增加额外的协处理器成为提升系统并行计算能力的一种有效选择。从一般意义上说,GPU、神经网络处理器(NPU)以及人工智能(AI)处理器等都可以算作是加速器的一种特殊形态。 图3.54描述了一种基于PCI Express总线的硬件加速器的功能结构示例。通常加速设备需通过系统存储管理单元(SMMU)与系统相连。根据加速设备的类型,可以将加速设备分为分离加速设备(例如PCI Express扩展卡附加设备)、片上集成加速设备(例如鲲鹏920处理器片上系统的片上平台设备以虚拟PCI Express设备的形式运作)和不支持共享虚拟地址(SVA)的老旧加速设备等。 图3.54硬件加速器的功能结构 硬件加速器以硬件复杂度的提高换取系统性能的大幅度提升,因而在服务器应用场景中扩展硬件加速器成为越来越普遍的选择。 2. 鲲鹏920处理器片上系统的硬件加速器抽象模型 图3.55描述了鲲鹏920处理器片上系统的硬件加速器抽象模型。 图3.55鲲鹏920处理器片上系统的硬件加速器抽象模型 鲲鹏920系列处理器片上系统上的硬件加速器通过QM(Queue Manager,队列管理器)模块与软件进行交互。QM模块提供了对虚拟PCI Express接口的管理,可以实现基于SRIOV的虚拟设备管理。QM模块管理着主存储器中的长度为1024的队列,软件把硬件加速任务写入主存队列中,QM模块获取队列元素的地址后交给硬件加速器,加速器根据该地址读出具体的加速任务并处理。硬件加速器处理完任务后从QM模块申请写回地址并更新队列元素,然后根据硬件配置上报中断。 无论加速器使用多少个实际的加速单元,进程的请求状态都存储在队列中。因而无论处理器上运行的进程和线程如何切换,都不需要保留请求状态,这和协处理单元的操作方式不同。需要注意的是,队列中保存的进程请求上下文受QM模块的最大资源限制,软件设计师要充分利用这种能力,尽早释放不再使用的QM队列。 3. TaiShan 200服务器的鲲鹏加速引擎逻辑架构 图3.56描述了TaiShan 200服务器鲲鹏加速引擎的组成和逻辑架构。 图3.56TaiShan 200服务器鲲鹏加速引擎的组成和逻辑架构 芯片加速器子系统是TaiShan 200服务器鲲鹏加速引擎的核心,即集成在鲲鹏920处理器片上系统内部的硬件加速器。该子系统是加速器的硬件实现,对上层提供寄存器接口,不直接开放给客户访问。 BIOS子系统是指TaiShan硬件产品自带的单板BIOS软件系统,主要负责根据许可证(License)权限确定应对加速器中的哪些模块进行初始化,并上报加速器ACPI表到加速器驱动子系统处理。 BMC子系统即服务器BMC软件系统,也是TaiShan硬件产品自带的子系统。BMC子系统主要负责对加速器许可证的管理。 对应用软件而言,加速器驱动子系统是系统功能实现的核心。加速器驱动子系统向上层软件提供各加速器模块统一的驱动接口,屏蔽底层硬件细节。 应用库子系统包括OpenSSL加速器引擎、zlib替代库等,用于向上层软件提供标准接口。 应用系统(APPs)是TaiShan 200服务器鲲鹏加速引擎的用户系统,通过调用应用库子系统或驱动子系统实现加速器的功能。借助鲲鹏加速引擎,上层应用系统可以实现大数据应用、Web应用以及数据加密、智能安防和分布式存储等应用场景。 为了方便应用程序使用鲲鹏硬件加速引擎,可以借助WDWD即Warp Drive,曲率驱动。加速器用户态库和WD加速器用户态框架(User mode ACCElerator,UACCE)。UACCE是鲲鹏的软件工程师在Linux内核中加入的框架模块,公开的项目名称为WarpDrive。UACCE框架主要解决CPU、加速器和用户态之间地址共享的问题。WD加速器用户态库是配合UACCE使用的,两者结合起来可以让注册到UACCE框架的加速器硬件以用户态软件的方式访问内存,使得CPU和加速器两者之间可以建立基于FIFO的通信渠道。在用户打开一个加速器时,UACCE框架将给该加速器分配一个队列,同时把存储管理单元(MMU)和系统存储管理单元(SMMU)的页表合并。因此,对进程而言,CPU和加速器看到的地址空间将完全相同,进程可以根据需要把计算负载分配给加速器或者CPU执行。 本书5.6节将给出鲲鹏加速引擎安装与使用的具体流程。