第一章:持久内存需求

 大数据技术形成的层次化存储结构;

  当前主双路微处理器的系统多达24个内存插槽(DIMM),一般可以配置24个32~64GB的内存,总存储量在1.5TB。

  SRAM: 基本用于L1/L2/L3 缓存,使用与CPU 同样的CMOS 技术,但是集成度较低,成本高,容量比较小;L1:几十KB, L3: 几十MB;

  DRAM: 频繁使用的数据会临时存放到缓存中,获得更快的读写;

  

       =====>

   对于的当前内存-储存架构下,不同层级之间的延时相差千倍,当内存容量受到限制,只能存储中间结果,其他需要反复从SSD中导出/导入,会大大增加延时。因此在内存与 SSD 中间需要一个新层次来填补,也就是PMEM(Persistent Memory).

    

 

  PMEM应用场景主要有海量内存扩展,持久化缓存,高速存储 和 PMoF(Persistent Memory over Fabric 通过高速网络的持久内存访问)等;

  PMEM的读性能远好与写的性能,在持久化缓存应用中,读多写少的情况更适用;

  RPM:remote persistent memory;

 新型非易失性存储介质:

 持久内存模块:

  NVDIMM(Non-Volatile Dual In-line Memory Module) 使用了与标准DIMM 插槽兼容,并且通过标准的DDR总线进行通信;
  其典型特性:非易失性,可以按字节寻址(byte Addressable), 小于1us 的延时,以及集成密度高于或等于DRAM。

  Intel Optane: 使用 DDR-T 协议通信,允许异步命令 和 数据时序, 使用64B 的缓存行作为访问粒度。包含多种模式MM(memory mode), AD(app direct Mode).

     1). MM: PMEM 作为超大容量的内存使用,DRAM则被CPU 作为write-back cache, 其中DRAM构成的缓存由主机的内存控制器管理;

       每次掉电后都会清除易失性密钥,所以在MM下,PMEM数据是掉电易失的。

      DRAM被称为Near memory, PMEM 被称为 Far memory. 如果每次读写操作命中NM, 则10ns级别延时,否则会产生额外延时,达到100ns 级别。

      MM 适用于超大内存场景,并且其中热数据总量能基本容纳在DRAM 中。

    2). AD: PMEM 直接暴露在用户态的应用程序来使用。需要特定的持久内存感知软件 和 应用程序的支持。

      在这种模式下,PMEM是按字节寻址的,为保存缓存一致性,所存数据是持久非易失性的,且接近于DRAM 的读写访问速度,同时提供了可执行DMA 和 RDMA 的功能。

      如下图所示,应用程序通过持久内存感知文件系统(PMEM-Aware File System) 将用户态的内存空间直接映射到持久内存设备上,从而应用程序可以直接进行加载(load) 和 存储(store) 操作。这种形式也被称为DAX(direct access).

      

 

    intel 提供了PMDK(Persistent Memory Development Kit) 用于在持久内存上进行编程。

    比较适合AD 模式场景:性能瓶颈在磁盘I/O 的应用,某些需要的较高的内存带宽来访问较大的地址空间的内存数据库的应用,需要支持更大数据集和更多客户端或者线程的应用。

    此外,还可以将PMEM配置为应用程序直接使用的存储(storage Over App Direct Mode), 用户只需要通过驱动,就可以对持久内存进行像对硬盘一样的块操作。

 

总结:该章节讲诉了CPU 与 DRAM 以及 SSD 之间的速度差,而在一些业务场景中需要大容量DRAM 或者 持久化需求,而PMEM 作为中间层可以作为没DRAM 那么贵,但是比SSD 速度快。

 

第二章:持久内存架构

  内存数据持久化:

   持久内存系统包含如下,微处理器,连接微处理器内存总线上的持久内存模组(Persistent Memory Module, PMM), 及持久内存上的非易失性存储介质。

    

    如今计算机系统都假设一旦数据完成从内存控制器(Memory Controller,MC),向外部内存总线的传输操作,持久化过程即完成,停止对持久内存的外部供电;

    然后持久内存内部还需要电量将数据写入非易失性存储介质。 

    计算机缓存和内存系统包括以下层级:

      a. L1/L2 数与每个微处理器内核;

      b. L3 为所有核心共享;

      c. 内存控制器及其内部的写队列;

      d. 持久内存;

    

    当微处理器内核发出内存写命令时,数据沿层级逐渐下移。 首先缓存控制器会检查该数据在缓存L1/L2/L3 中有没有副本,如果没有就从内存进行读取,然后将新的数据写入缓存。从程序执行角度来看,MOV 指令运行已经结束。然而写的数据还停留在缓存中,当缓存空间不足时,其会向内存控制器发出请求,将该数据写入内存。内存控制器会把数据写入内部的待写入队列(write Pending Queue, WPQ),在一定条件下再把WPQ中数据通过外部总线写入内存, 实现持久化。

    软件开发者通过执行处理器指令可以控制数据落在存取路径的哪个层次,然而哪个层次的数据在系统掉电后能够保存是由平台能力决定的。

    持久化域就是平台能力的抽象。当系统断点时,持久化域内的户所居可以保证得到持久化保存,而持久化域外的数据则无法保证。

 

    计算机的缓存 和内存系统可能支持3类持久化域:

     1. 第一类持久化域是内存本身,数据持久性由持久内存本身 即 所需的平台设计保障,对微处理器依赖最低。

      软件可以通过调用CLFLUSH, CLFLUSHOPT, CLWB, PCOMMIT 指令,可以清空缓存 和 WPQ, 确保数据抵达持久内存。

    2. 第二类持久化域是内存子系统,通过异步内存刷新(Asynchronous DRAM Re-fresh, ADR)技术保证WPQ 内的数据得到保存。

      软件调用CLFLUSH, CLFLUSHOPT, CLWB指令,就可以清空缓存,确保数据抵达持久内存。ADR 基数已经成为intel平台必备功能,目前得到普遍使用。

    3. 第三类持久化域会扩展到缓存,通过增强异步内存刷新(Enhanced Asychronous DRAM Refresh, eADR)技术保证缓存内数据得到保存。

     软件无需调用任何指令,就能保证写入内存的数据得到保存。eADR 技术只有在具备特定微处理器功能 和平台软硬件设计的系统才可以得到支持。

 

    ADR的作用是通知内存控制器把WPQ里的内容写入内存,并把内存置于自刷新模式,在自刷新模式下,内存会忽略总线上的数据,并且只要供电保持,内存上数据就能通过定势刷新得到保存。

    eADR除了清空WPQ, 还会把缓存中数据也写入内存。

     

     

    ADR 技术是实现内存子系统持久化域的关键技术

     在微处理器核心进行写入操作时,任何一个时刻,在各级缓冲区或队列里都可能存在数据。为了保证持久内存内部数据的完整性需要把持久化域内的数据写入持久内存,这需要ADR 技术实现

    系统发生意外断电时,ADR 技术保证WPQ 内数据被写入内存。

    ADR技术流程: 1. 系统电源发出掉电预警; --> 2. 供电时序控制电路向 芯片组发出ADR 触发信号; --> 3. 芯片组收到ADR信号,启动ADR 机制;--> 4.微处理器的内存控制器完成WPQ 的清空 和写入持久内存操作,完成数据保存; --> 5. ADR 完成; --> 6. 掉电控制,启动系统下电时序;

    ADR技术解决的时系统意外断电场景,正常关机,复位操作系统会由内部的硬件握手协议完成步奏4,不需要ADR 介入。

        

 

     如果希望保护数据不局限于WPQ,而是扩展到缓存,则需要eADR 技术。二者原理类似,主要区别如下。 

     

 

 持久内存的硬件架构:

  持久内存主要包含以下几个硬件模块:控制器,非易失性存储介质,动态内存和支持控制组件。  

 intel Optane PMEM 硬件模块:

    持久内存与DRAM 使用相同的硬件接口,但是不同通信协议。DRAM 使用DDR协议,PMEM使用类似DDR 协议。

    1).持久内存控制器:持久内存大部分操作都要通过持久内存控制器实现。管理着主机平台接口及DQ 缓冲区的专用总线接口。

     同时还提供完整的介质管理:包括磨损平衡,坏块管理,错误检测与修正,元数据管理 和地址转化;类似与SSD中主控;

     其中的特定寄存器可以通过主机端的SMBus链路寻址,与主机共享串行状态检测(Serial Presence Detect, SPD)数据。通过专用SMBus 与电源管理集成控制器(power management Integrated Controller, PMIC) 连接,以控制电源管理设备。

     另外还能通过专用flash 端口 与 串行外设接口(Serial Peripheral Interface, SPI) Flash 连接,用于存储一个或多个内存控制器的固件。

    2).非易失性存储介质:Optane 芯片...

    3).其他组件功能:DQ缓冲区:Optane 使用了DDR4 LRDIMM DQ 缓冲设备,它将缓冲并重新驱动所有主机接口的DQ 与 DQS信号,以降低持久内存向DRAM 主机通道提供的有效DQ 或 DQS 的电气短线长度。参考时钟发生器:持久内存控制器始终使用本地参考时钟; SPD:与标准DRAM 上使用的SPD 相同。

    4). 电源管理集成控制器: 

    

 持久内存的外部接口:

  目前市场上的持久内存都参照JEDEC 标准下DDR 的机械接口 与主机侧连接。已经发布的NVDIMM-N 规范列出了一些新的接口要求。

  持久内存 与 主机端的接口:

    1. 内存总线: Optane 采用的协议类似DDR 协议硬件物理接口则是与DDR 接口相同,因此部分信号做了重定义。如果系统同时连接DRAM  与 PMEM, 那两种协议可以在同一条总线上共存,主机侧的内存控制器会根据访问类型对信号进行适配。 主机内存控制器支持两组协议,并分别与DRAM  或 PMEM 进行通信。其外部则复用同一组引脚信号

      协议的读取和写入指令在总线上使用完整的高速缓存行地址发送,并有持久内存控制器将这些通用指令转换为特定的技术指令。写入数据 与 写入指令同时发送,并由持久内存控制器进行缓冲。 执行读指令时需要进行拆分,在执行读取指令后,持久内存控制器会在数据可用时请求使用数据总线进行传输。数据总线方向 和 时序 由总线控制, 从主机发送 到 持久内存控制器的每个发送请求的命令数据包都允许异步命令 或 数据计时, 因此持久内存控制器可以自由将命令重新排序到内存,并重新记录读取返回数据。

      

   2. SMBus: DRAM中SMBus 有两个功能:一是读写串行状态检测信息,包含详细的DIMM 特征数据(关键时序,配置,容量,部件号,序列号 和 其他相关信息); 二是温度检测;

    在持久内存中,持久内存控制器连接在SMBus上,因此主机系统可以访问持久内存控制器上的多数通用寄存器,并执行许多关键后台功能(如将更新的固件加载到持久内存控制器中。

     

    3.12V额外供电: DRAM 只支持VDD(1.2V), VTT(0.6V), VPP(2.5V) 三种电压。PMEM需要提供多种电压控制器, 所以参照NVDIMM-N规范定义了2个专用12V输入电压。通常PMEM这样比较复杂的系统 会采用集成电源芯片PMIC 提供多路输入电压,同时管理电源时序以及持久内存和主机侧的电压之间隔离。

   4. 保存信号:        

 

持久内存及主机端的固件架构:

 接口规范:

  ACPI(advanced configuration and Power Interface) 是intel, MS, Toshiba共同定制的电源管理标准,帮助操作系统合理控制 和 分配计算机硬件设备电量。 持久内存的UEFI(unified Extensible Firmware Interface) 驱动在开机自检中,根据PMEM初始化结果,船舰符合ACPI 规范的表格和代码。操作系统通过ACPI 的表格 和 代码 对持久内存进行配置 和管理。

  与持久内存相关的APCI 接口有下面4部分:

    1). 持久内存固件接口表(NVDIMM Firmware Interface table, NFIT):

      1. 系统物理地址范围表:为操作系统提供每段物理地址空间中的内存属性(内存类型(DRAM/PMEM)、缓存类型(不可/可缓存)、以及和不同微处理器内存控制器的邻近关系(proximity domain 参考异构资源亲和表);

      2. 持久内存区域映射表:为操作系统提供内存设备的生产厂商、设备ID、版本信息、制造地点、制造日期、唯一序列号等;

      3. 交织集表:持久内存的地址编码信息

      4. SMBIOS 管理信息表

      5. 持久内存控制区域表:包含如下图内容,操作系统可以通过这些索引号获取相应持久内存设备的所有硬件信息

      6.持久内存块数据区域表

      7.可清洗缓存地址表

      

    2). 异构内存属性表( Heterogeneous Memory Attribute Table, HMAT):   

    

    3). 系统资源亲和表(System Reource Affinity Table, SRAT)

    4). 系统位置距离信息表

  设备特定方法规范(Device Specific Mehond, DSM);

  统一可扩展固件接口规范(Unified Extensible Firmare interface, UEFI):用来定义操作系统与固件之间的软件界面,负责带电自检、联系操作系统、提供联系操作系统与硬件的接口。

  系统管理BIOS 规范(system Management BIOS, SMBIOS):用来是主板或系统制造商以标准格式先是产品管理信息需要遵循的统一规范;

 

 持久内存固件功能:

  1). 固件初始化:包含2个阶段,第一阶段引导ROM 负责验证及载入持久内存固件;第二阶段负责初始化介质接口及初始化介质读写策略(包含介质磨损均衡、紧急掉电处理、散热处理策略等):建立地址映射,分割介质区域, 初始化错误处理程序,初始化RAS处理程序。

  2). 介质编码 和 读写;

  3). 地址翻译;

  4). 介质管理 和 磨损均衡;

  5). 状态汇报 和 管理;

 主机端固件:

  1).主机端固件UEFI 模块框架图:

    

  2). 内存时序训练; 持久内存的内存时序训练基本与 DRAM 类似。

    UEFI 的内存初始化大麻,首先会从UEFI 配置中获取持久内存的初始化的一系列配置,然后通过SMBus 获取每根持久内存的SPD 数据(SDP 数据获取方法 及格式完全符合JEDEC标准化组织的定义),接下来UEFI 内存初始化代码根据SPD 数据中的内存类型判断是否为持久内存,然后根据从SDP 数据中获取的参数进行持久内存时序训练;

  3). 新类别内存的发现 和 上报:

    在内存时序训练结束后,UEFI 会根据持久内存模式将发现的新内存呈现在处理器地址空间中。 UEFI 将根据内存训练后发现的内存信息生成一个表格传递给后续的UEFI 驱动, 后续UEFI 驱动更加内存信息表继续创建SMBIOS表,生成APCI表格等以供操作系统使用。

  4). 配置:两种模式,BIOS都需要配置持久内存的交织集。

    AD: UEFI 会将持久内存 和 DRAM 在微处理器内存空间统一编址,设定持久内存区域的命名空间;这样UEFI 或 OS 可以通过命名空间找到交织集为边界的持久内存区域。

    MM: UEFI 只会把持久内存编址到微处理器内存空间,而不会编址易失性内存;

    交织集:指在地址编码时候,在内存空间交替叠加不同内存通道的物理介质,这样系统就可以同时访问不同通道的持久内存,充分利用内存贷款。

    

持久内存的安全考虑:

    持久内存的安全功能跨越多个层级:保护持久内存介质中存取的数据,保护持久内存的配置数据 和 控制机制。

   安全模型采用SSD 和 NVMe 技术中使用的ATA(Advanced Technology Attachment)安全模型,写入的数据由每根持久内存控制器使用XTS-AES-256 协议加密。

   MM 中的密钥在每次断电重启后都会重新生成,因此先前的数据不在可用,称为易失性;

   AD 模式:通过设置用户密码来解锁持久内存区域,并启用对命名空间内数据的访问来保证安全性。主密码:用来启动安全擦除功能,仅可用于本地介质擦除,如果主密码丢失,将无法解锁持久内存并且无法再吃使用。用户密码丢失后,可通过主密码启动安全擦除功能,重置持久内存。

 

   威胁模型:遵循标准静态数据安全威胁模型。

  安全目标

   1). 静态数据安全:机密性保护;持久内存数据的静态保护;易失性内存数据的保护;

    2). 访问控制:AD 模式访问控制;内存模式访问控制;

   3). 介质管理保护:反复均匀写入位置防止持久内存过早磨损;

  基于硬件的内存加密:

    

 持久内存的可靠性、可用性 和 可维护性:

  RAS: Reliability, Availability, Serviceability;

     

 

   硬件基础:

    1). 缓存行 与 纠错码(Error Correcting Code, ECC).

    2). 介质的组织:持久内存的介质被组织成ECC 块,每个ECC 块包括4个微处理器缓存行(每个64字节),4个毒药标志位(对应4个缓存行,存储在元数据中),其他元数据(每个缓存行的状态) 和 ECC。

    3). 空闲块管理:类是NAND  中redundant blk, 用来替换坏块。

    4). 数据毒药: 提供了一个有可能恢复介质里不可纠正数据的机制。当发生不可纠正错误(uncorrectable Error, UCE) 时候,持久内存控制器会用毒药标记错误数据,并将数据和毒药传给微处理器;

      毒药标志位被保存在持久内存介质的元数据里,MM 中重启会清除毒药标记; AD 中重启不会清除;

    5). 清除数据毒药:数据块上毒药可以通过MB 命令清除;

 

  错误检测 与 恢复:为了维护数据的完整性;

    1).读操作(可纠正错误:correctable Error, CE): 通过ECC 对数据精心校验和纠正,靠持久内存自身完成。

    2).读操作(UCE) : 如果数据不能被纠正,持久内存控制器就会用毒药标记错误,并传给主机内存控制器,之后系统或BIOS 可以通过软件进行恢复(重试、丢弃、或 忽略);

    3). 写操作(毒药区域): 写入新数据适合,数据会被正常写道持久内存毒药区域,同时毒药会被清除;

  

  单芯片数据纠正 与 双芯片数据纠正:(single Device Data Correction, SDDC; Double Device Data Correction, DDDC)

  巡检(Patrol Scrub): 也称为顺序刷新。持久内存控制器内置了一个刷新引擎,会利用空闲时间主动搜索持久内存,进行读操作,也可以利用ECC 修复CE。支持MM/AD两种模式。

  地址区间检查(Address Range Scrub, ARS):是ACPI 规范里定义的DSM。BIOS 与 持久内存驱动通过ARS 获取UCE地址,以保证每个应用程序分配的内存都在良好的地址范围。可以直接选择上次ARS 结果,叫做快速ARS。

    ARS 意义在于获取所有有问题的地址,保证应用程序不会被分配到有问题的地址空间。

    ARS 只由在AD 模式下才会生效;

  病毒模式: 大部分系统依赖毒药机制确保错误数据的抑制。对于毒药机制不能抑制的致命错误,为了延缓宕机增加可用性,系统可选择平台级错误抑制机制-病毒(Viral);系统重启会清除病毒模式;

    AD 下写操作会被丢弃,读操作不受影响; MM中写操作不受影响;

  错误报告和记录:主要下面集中UCE会被报告和记录。

    AD/MM 模式下数据事务错误; 持久内存控制器内部错误;系统初始化和引导过程中的错误;链路错误;

  持久内存故障隔离;

  错误注入由持久内存控制器来实现,有下面集中错误注入方式;

    1. CScripts(custom script) ;2.ACPI 与 DSM标准接口;

  

 持久内存的管理:  

   带内管理 和带外管理:管理软件有外部管理实体组成,可以间接访问持久内存;

    OEM (original Equipment Manufacturer)交付的管理软件使用带外管理路径; OSV/ISV(independent Software Vendor) 交付的管理软件使用带内管理路径;

     

    温度管理:

 

 持久内存的性能:

  空闲读取延时:延时是读取或写入一个数据块所需要的时间。

    读取延时包含读取请求通过各种缓冲区、处理阶段 和 内存接口传播、确定内存单元的物理地址信息、激活和检测必要的内存单元,以及将结果数据传输回微处理器核心的时间。个体请求的延时差别会有很大差异,取决于正在处理的其他请求,尤其是持久内存的配置;

    空闲读取延时:是指系统在空闲时所测量的读取延时;一部分取决于内存介质的延时, 另一部分则与微处理器和持久内存控制器相关;

    加载读取延时:是指有不同程度系统读写负载时所测量的读取延时;

 

  带宽:内存带宽是单位时间内系统对内存能够进行读取或写入的数据量;

    持久内存的带宽通常受限于内存介质的带宽、控制器的设计及功耗等因素而非总线带宽,这与DRAM不同。

 

  访问粒度:单次内存读写的最小数据长度。

    与微处理器的高速缓存行匹配,在内存总线上单次传输的数据是64字节。

    持久内存内部,数据访问粒度可能等于或大于64字节;为了支持纠错、SDDC等RAS特性,持久内存的数据会按块进行编码。在同样冗余数据量条件下,增加编码数据块是增加纠错能力的有效手段。当持久内存内部访问粒度大于64字节时,会形成写放大。

  

  加载读取延时(加载延时):是请求者在特定带宽利用率期间经历的读取延时它有空闲延时队列延时组成; 随着带宽利用率的增加,加载延时也会增加。

 

    队列延时是一种增量延时,由微处理器核心和内存之间在路径中的资源竞争引起的。

 

    处理器 与 存储单元之间可以存在许多中间阶段的路由与队列,当没有正在处理的请求时,这些中间阶段可以立即处理下一个请求,并且请求可以直达目标存储单元;但是如果在上一个请求完成前发出请求,就要等待有限的资源处理完之前的请求后才能被处理;

    当带宽利用率<60% 时,请求保持相对独立且完整,加载延时 是 空闲延时的1.3~1.5倍,因为一般情况当前请求要等上一个请求完成;当>70%时,加载延时会急剧增加。

    读取 与 写入比率对DRAM 几乎没有影响,但对PMEM则不同。因为持久内存的加载延时,不仅受带宽利用率的影响,也受读写的比率及如何分配访问地址的影响。持久内存的内部介质的读写以分区为最小单元,读取 或 写入 比率 和 地址分配会影响观察的分区占用率,从而影响分区冲突和请求的额外队列延时。持久内存中写入操作比 读取操作时间长,而且在同一个分区入/读取操作不能同时进行,分区占用造成访问冲突会导致某些请求等待,从而增加其加载延时。还与预取缓存命中率有关,并且如果存在多个并发顺序请求流,在某些极端情况会呈现随机访问特性;

    

 持久内存的性能:

  内存系统的最终衡量标准是实际应用程序在使用时的执行速度。持久内存的性能目标之一是相对于等效内存容量的纯DRAM系统,题到整体软件执行效率。但是实现很难,因为应用程序在使用和依赖系统内存方面存在很大差别,持久内存的访问时间波动比较大,取决于所访问地址的特定序列以及读取 和 写入的模式和顺序。因此分析 和 设计特定的应用程序 和基准测试,并根据一般内存配置 和使用特征定义预期性能。

  系统性能受到内存带宽 与 加载延时 两者影响,在带宽限制区,增加带宽能有效改善性能;而在延时限制区时,主要限制为可能存在多个尚未完成的请求到达内存子系统。

 

总结:该章描述了内存持久化中的三个层面,以及实现内存持久化自身需要的模块,和外部接口(接口 复用 DDR,协议用类似的DDR-T),通过持久内存控制器实现对于PMEM  和 DRAM 的不同控制,并增加对于PMEM自身需求的优化(SMBus增强,电源增强)。

    对于持久内存与主机端的固件架构中,需要统一的接口标准,固件功能与操作过程。

    数据安全保障,主要有存于物理介质上的数据加密,访问控制,已经对于介质自身管理。数据的RAS 要求与方式;

    持久内存的管理 与 性能 指标,以及应用性能;

 

posted on 2022-05-12 19:59  学海一扁舟  阅读(1167)  评论(0编辑  收藏  举报