一文读懂NPEM(Native PCIe Enclosure Management)

1 篇文章 0 订阅
1 篇文章 0 订阅

目录

前言

1. NPEM的定义

 Enclosure

LED management

2. 从PCIe协议看NPEM

2.1 寄存器解析

 2.2 NPEM在系统中的位置

2.3 软件工作流程

3. 关于IBPI

3.1 IBPI的定义

3.2 IBPI制定的标准

3.3 IBPI在SSD上的应用 

3. 硬件实现

3.1 传统模式的硬件实现

3.1.1 VPP和PCA9555

 3.1.2 传统模式的硬件框图


前言

        本文从PCIe协议即软件的角度和硬件实现的角度,详细介绍讨论了NPEM(Native PCIe Enclosure Management)。文中加了很多我自己的见解,方便理解。如有错误,欢迎各位大佬指出,我将积极改正。 

1. NPEM的定义

        在最开始我们先搞清楚NPEM是什么?NPEM全称Native PCIe Enclosure Management,是一种新的,更高级的LED management。不熟悉的小伙伴可能要问,Enclosure是啥?LED management又是啥?

 Enclosure

        机柜,在这里指包含一个或多个PCIe SSD硬盘的平台、机架、一个盒子或一组盒子。说简单点就是放SSD的盒子。 盒子上有灯,用于指示SSD硬盘状态的指示灯。

LED management

        说白了就是一般硬盘上有2个或者3个LED指示灯,指示硬盘的状态,怎么根据硬盘的不同状态点这个LED灯,就是LED management。

 

        而NPEM,其实就是用于控制SSD硬盘状态灯的一种增强型的新机制,它比传统的LED management支持更多的硬盘状态,也有多种不同的实现方式。NPEM是从PCIe 4.0开始引入,预计将来的PCIe4.0 或PCIe 5.0的SSD都将支持此功能。

2. 从PCIe协议看NPEM

2.1 寄存器解析

        传统的LED management模式中,通过Slot Control Register中的Bit 6-7 的Attention Indicator Control (AIC)和Bit 8-9 的Power Indicator control (PIC)来控制LED,如下图。这四个bit具体是依据什么规则控制LED的呢,这涉及到IBPI,我们放到后面再聊。

        

        从PCIe 4.0开始为NPEM扩展了4组寄存器,分别是NPEM Extended Capability Header,NPEM Capability Register,NPEM Control Register和NPEM Status Register,如下图所示。

NPEM Extended Capability Header

        只读寄存器,主要存放NPEM扩展Capability ID和version等,用于定位标识这组寄存器。与NPEM具体功能没有关系。

NPEM Capability Register

         这组寄存器是用来表示NPEM在该设备上的支持情况的,该设备是否支持NPEM功能以及NPEM的可选功能是否在这个设备上实现了。如果该Bit为1,则代表该Bit对应的功能是支持的。

        比如Bit 0 - NPEM Capable如果置1,代表该设备支持NPEM功能。

NPEM Control Register

        这个寄存器就是控制NPEM是否使能和点灯操作了。但想要操作生效的前提就是NPEM Capability Register中的对应Bit是置1的。

NPEM Status Register

        这个寄存器只有一个重要的Bit就是NPEM Command Completed。这个Bit的功能就是当NPEM机制完成了一次操作的响应后,就把这个Bit置1。所以在操作NPEM Control Register的时候,必须确定上一次的操作完成了,才能发起下一次操作。具体NPEM的软件工作流程,在后面会提到。

        以上就是对NPEM的PCIe寄存器的大致介绍,具体每一个Bit是干什么用的这里就不展开讲了,感兴趣的小伙伴可以在PCIe 4.0或更新版本的规范中去找,在Native PCIe Enclosure Management Extended Capability (NPEM ExtendedCapability) 这一节。这里附上PCIe 4.0的下载地址:https://members.pcisig.com/wg/PCI-SIG/document/10912?downloadRevision=active

 2.2 NPEM在系统中的位置

        驱动根据SSD的状态操作NPEM寄存器,将寄存器的值转换成为LED的亮灭这一系列的操作,在这里我们称为NPEM机制。在PCIe协议中规定了NPEM机制既可以实现在下游端口(Downstream Port),也可以实现在上游端口(Upstream Port)。协议中对上下游端口的定义是:靠近RC的端口称为上游端口,扩展出来的端口称为下游端口。

        我在这里的理解是NPEM机制可以实现在服务器等平台端,也可以实现在终端设备,比如SSD上。

实现在平台端框图如下:

实现在终端设备的框图如下:

2.3 软件工作流程

下图是PCIe协议中给出的,操作NPEM寄存器驱动的软件流程:

  1. 驱动获取到该SSD状态发生更新,就写NPEM control Capability寄存器的对应位来操作相应的LED。
  2. 当写操作完成,NPEM机制就发出对LED的控制信号。
  3. 完成后NPEM机制就将NPEM Status寄存器中的NPEM Command Completed位置1,表示上个操作执行完成。
  4. Enclosure上的LED控制逻辑电路会将LED的操作信号转换成符合IBPI模式的LED闪烁方式,点亮LED灯。

 

        讲到这里我们就不得不引入IBPI的相关知识了,这个反复出现的IBPI到底是个啥?

3. 关于IBPI

3.1 IBPI的定义

        Serial GPIO IBPI (International Blinking Pattern Interpretation),是一个标准协议。原本是用来统一的服务器背板上SATA和SAS盘的指示灯的,比如一个盘有几个指示灯,每个指示灯什么含义,针对硬盘的不同状态每个灯是亮是灭还是闪,闪的话是按什么频率闪等等。后来也被SSD将这一标准沿用。这里附上IBPI的协议下载地址,感兴趣的同学可以下载来看看,只有十几页。

3.2 IBPI制定的标准

        IBPI定义了背板每个SAS/SATA slot可以有2个或者3个指示灯,并且规定了每个LED的含义,如下图。

        并且详细的制定了当硬盘处于某种状态时,这些LED分别都应该怎么亮,如下图。

3.3 IBPI在SSD上的应用 

        以Intel的Eagle Stream平台为例,其SSD的LED management就借鉴了IBPI,指示灯一共可以表示4种状态SSD状态:OK、Locate、Fault和Rebuild。具体对应关系如下表:

Intel Eagle Stream平台SSD LED状态图
StatusLED Status
OKoff
Locate4 Hz Blink
FaultSolid on
Rebuild1 Hz Blink

        对于软件来说想让LED改变状态设置寄存器就可以,将PCIe寄存器的值转化为对LED的操作就交给了硬件实现,那么硬件是怎么实现的呢?

3. 硬件实现

        这一节我本打算讲传统LED management模式下和NPEM模式下的硬件实现,但由于NPEM技术太新。Intel虽然已经打算在下一代CPU上支持这个功能,但具体的硬件设计目前还没有公开,无法披露。所以这一节我们就只讲传统的LED management硬件实现原来,NPEM应该也是一样的原理,只会在传统的基础上进行改造。具体NPEM的硬件实现,会在之后更新。

3.1 传统模式的硬件实现

3.1.1 VPP和PCA9555

        在开始之前我们不得不引入一个概念叫VPP。

        VPP - Virtual Pin Port,翻译过来叫虚拟pin脚端口。它的作用就是让CPU通过一个端口使用SMBus操作真实的GPIO。VPP位于SMBus上为LED management和热插拔服务。VPP的实现是使用了一个叫PCA9555的芯片。这里附上PCA9555手册的下载地址

        PCA9555的作用就是I2C/SMBus转GPIO,通过I2C或者SMBus扩展你的GPIO。

        下图是PCA9555的逻辑原理图,左边的I2C接口接CPU的SMBus,右边接SSD的LED。这样CPU就可以通过SMBus协议操作具体的LED了。

 3.1.2 传统模式的硬件框图

        上图是Intel的Eagle Stream平台上传统LED management的硬件设计框图。Eagle Stream平台上采用的是在Root port端的downstream port实现LED management电路的方式。图中实线表示真实的电路连接,虚线表示PCI Slot Control寄存器控制的对应IO,并不是真实的电路连接。

        接下来我们根据序号一一解析框图的组成:

  1. 表示的是CPU的Slot Control寄存器,此次我们关注的主要是AIC和PIC这四个对LED进行控制的Bit。之前我们提到了SSD LED的四种状态,在IBPI里定义了用Fault和Locate两种信号来控制LED,这里将AIC和PIC复用为这两个信号:APC -> Fault, PIC -> Locate。与LED状态的对应关系如下表,其实我们可以发现起作用的只有Bit1,Bit0一直是1。
  2. CXPSMB:是CPU上VPP的接口,负责和VPP通信。把PCI寄存器中的读写动作翻译成SMBus数据发送给VPP。
  3. CPU通过SMBus与VPP(PCA9555)相连,图中SMBALERT#是用于VPP通知CPU热插拔信号的,与此次内容无关。
  4. PCA9555:VPP实现的主要元器件,负责把SMBus信号转换成对具体的GPIO的控制。
  5. IBPI逻辑模块:负责把AIC和PIC控制的Pin 0和Pin 1按照上表,转化成对应的LED状态,然后控制LED。
  6. SSD LED:SSD enclosure上表示SSD状态的LED。

        以上就是关于NPEM的全部内容,关于NPEM的硬件实现等待后续更新。如有错误,欢迎各位大佬指出,我将积极改正。

  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值