NCSI总结及应用分析
1 NSCI协议
1.1 NSCI的定义
网络技术的飞速发展使得人们对于服务器的带外可管理性及可控制性提出了更高的要求。通过带外管理,工程师可以在任意地点通过网络连接到相应的服务器上,进行一系列的管理与维护,而不再需要长时间驻守在嘈杂的实验室环境中。(我们就是利用BMC连接到我们的服务器进行一系列的管理与维护)。NCSI(Network Controller Sideband Interface)就是一个由分布式管理任务组(Distributed Management Task Force, DMTF)定义的用于支持服务器带外管理的边带接口网络控制器的工业标准。一般的,服务器的网络管理模块结构如图1所示。
图1 服务器网络管理模块结构图
从图1可以看出,服务器网络管理模块由一个管理控制器(MC)和一个或多个网络控制器(NCSI的电气特性最多支持4个NC)组成。为管理控制器提供网络访问,管理控制器预计将执行所有所需的网络功能。
图2为通过带外接口的网络数据包,主要分为两类:一类是在外部网络与管理控制器之间传输的普通数据包(“Pass-through” packets),网络控制器对于这类数据包只作转发处理;另一类是在管理控制器与网络控制器之间传输的携带控制信息的数据包(“Control” packets),他们往往是管理控制器对网络控制器配置的一些修改操作,对于这类数据包,网络控制器需要做出相应的响应。而管理控制器与网络控制器之间的带外接口的电气性质以及通信协议,就是由 NCSI 来定义的。
图2 NCSI数据流通图
图3 NCSI支持的NC-MC拓扑结构图
图3为目前NCSI支持的MC与NC的拓扑结构,分三种:
配置1:一个MC与一个NC连接,仅仅通过1个channel相连;
配置2:一个MC与一个NC由2个NCSI的channel相连;
配置3:一个MC与4个NC由一个NCSI相连。
1.2 NCSI协议栈
NCSI协议栈如图4所示。
- 在 NCSI 的传输协议栈中,位于最底层的是物理层,NCSI 的物理层是基于 RMII 接口的;
- 位于物理层之上的是数据链路层,NCSI 的数据链路层是基于以太介质的;
- NCSI 支持的位于数据链路层更上层的协议主要有两种:一种是管理控制器与网络控制器之间交互的 NCSI 命令协议,另一种是管理控制器与外部网络通信的网络数据协议,如:ARP 协议、DHCP 协议、NetBIOS 协议等,它们只是被网络控制器在管理控制器和外部网络之间作转发处理。
图4 NCSI协议栈
1.3 NCSI控制命令协议
MC通过NCSI给uP发送的控制命令报文,uP回给NCSI的响应报文要遵循此NCSI控制命令协议。
NCSI 控制命令允许管理控制器初始化、规范化自己的 NCSI 接口流量,配置 NCSI 信道过滤规则以及监控网络控制器的运行状态。作为 NCSI 控制命令协议的主体,管理控制器是所有控制命令的发起者,而网络控制器则响应管理控制器发送的控制命令。
1.3.1 NCSI 实例号(IID)
MC发送一个NCSI请求包,于是产生了一个匹配此请求包的IID(8比特长的标示序列),有请求包NC就会有响应包,响应包IID跟请求包是一样的。这样可以很好的识别出来不一样的NCSI请求,提高 NCSI 请求与响应匹配的鲁棒性,并且区分新的 NCSI 请求与超时重传的 NCSI 请求。
网络控制器收到标记有IID的NCSI请求时,会遵循如下原则:
- 在响应的包的相应位置会标记有该 NCSI 响应对应的 NCSI 请求的 IID。
- 如果收到的 NCSI 请求的 IID 与之前收到的相同,则表明这是一个超时重发的 NCSI 请求。NCSI 标准规定,此时网络控制器必须对重发的 NCSI 请求作出响应。网络控制器可以根据具体的 NCSI 命令,返回前一次 NCSI 命令的执行结果,如果该执行结果在当前时刻还没有失效。或者,网络控制器也可以重新在当前时刻再执行一遍 NCSI 命令。
- 如果收到的 NCSI 请求的 IID 与之前收到的不同,则网络控制器必须将这个请求看成是一个新的 NCSI 请求。
- 对于一个被重新初始化的网络控制器而言,它所收到的第一个 NCSI 请求一定是一个新的请求,而不管他在没有被重新初始化前是否收到具有相同 IID 的 NCSI 请求。
对于管理控制器而言,它在处理 IID 时遵循如下原则:
- 每个新的 NCSI 请求实例必须有与之前不同的 IID。
- 如果一个 NCSI 请求需要被重传,则其 IID 必须与之前的 NCSI 请求的 IID 相同。
- 由于 NCSI 响应包的 IID 等于其对应的 NCSI 请求包的 IID,所以 IID 可以进一步被管理控制器用作确认某个特定的 NCSI 请求是否被响应的标志。
1.3.2单线程机制
就目前而言,网络控制器只能以单线程的方式支持 NCSI 命令。也就是说,网络控制器一次只能够执行一个 NCSI 命令。只有当它对收到的某个 NCSI 请求发送了响应包之后,才能够继续接受下一个 NCSI 请求。
网络控制器的这种单线程机制使得管理控制器在对同一个网络控制器发送 NCSI 请求时也只能以单线程方式进行。当管理控制器向某个网络控制器发送了一个 NCSI 请求后,它必须保持等待状态,直到收到了网络控制器发出的 NCSI 响应或者超时重传为止。
1.3.3超时重传机制
如果在 NCSI 命令超时的时间间隔内,管理控制器还没有收到网络控制器回复的 NCSI 响应,则管理控制器必须以相同的 IID 重发之前的 NCSI 请求。
管理控制器必须尝试 NCSI 请求至少 3 次,才能够报告网络控制器发生了错误。
在网络环境相对恶劣的情况下,可能管理控制器在收到之前发送的 NCSI 请求的响应的时候,已经超过了超时重发的时间间隔。在这种情况下,管理控制器会收到对于同一个 NCSI 请求的两个响应。管理控制器必须有相应的机制能够检测出这第二个 NCSI 响应,并且将它丢弃。
1.3.4异步事件通告包
AEN(Asynchronous Event Notification)包是网络控制器在某些状态发生变化、且影响其接口正常工作的情况下向管理控制器主动发送的通告数据包。由于 NCSI 命令只是网络控制器处理的众多数据包中的一小部分,网络控制器的一系列事件都会影响到命令的正常执行。这些事件包括:链路状态变化、操作系统驱动加载及卸载、芯片复位等等。
网络控制器对哪些事件会向管理控制器发送 AEN 包是由管理控制器来定义的,管理控制器通过使用控制位(control bit),可以单独地定义网络控制器对各个事件的异步事件通告是否启用。
AEN 包是工作在 NCSI 请求 – 应答机制之外的一种 NCSI 包。也就是说,AEN 包既不是 NCSI 请求,也不是任意 NCSI 请求的响应。AEN 包没有应答,即使一个 AEN 包在传输的过程中丢失了,管理控制器也无从得知。
一个 AEN 包的 IID 始终为 0x00。
1.3.5 NCSI 包结构
1.3.5.1 NCSI 的以太网帧头
正如前文所述,NCSI 是基于以太介质的。所有的 NCSI 包都是封装在 IEEE 802.3 定义的以太网帧格式中的,即:任意一个 NCSI 包都被封装在 14 字节的以太网头及 4 字节的以太网尾中,如图 5 所示。
图 5. NCSI 包的以太帧格式
图6为MC发给NC端的NCSI请求命令的以太网头的格式图。
图 6 请求控制命令报文以太头格式
1)目的地址字段: NCSI 以太帧的第 0 到 5 字节分别代表以太网目的地址的第 5 到 0 字节。由于传输 NCSI 命令的信道并没有被分配一个特定的 MAC 地址,所以 NCSI 以太帧的目的地址为广播地址(FF:FF:FF:FF:FF:FF)。
如果网络控制器收到了一个目的地址不是 FF:FF:FF:FF:FF:FF 的 NCSI 包,则它会直接丢弃该数据包并且返回一个错误响应。
2)源地址字段: NCSI 以太帧的第 6 到 11 字节分别代表以太网源地址的第 5 到 0 字节。如果 NCSI 包来自于管理控制器,那么源地址字段可以为任意值。如果 NCSI 包来自于网络控制器,则源地址字段必须为 FF:FF:FF:FF:FF:FF。
3)类型字段: NCSI以太帧的第 12、13 字节分别代表以太网类型的第 1、0 字节。对于NCSI 控制包而言,其类型字段为 0x88F8。
4)FCS:帧校验序列字段,4字节。用于对框架的一个检查,不符合要求的都要丢弃。
1.3.5.2 NCSI 控制包头
每个 NCSI 控制包(包括 NCSI 请求包、响应包以及 AEN 包)都有一个 16 字节长的控制包头,以大端在先顺序排列,如图 7 所示:
图7 NCSI控制报文包头
Management Controller ID(MC ID)字段:MC ID 字段 1 字节长,标识了 NCSI 包对应的管理控制器。在 NCSI 1.0.1 版本中,该字节规定为 0x00。网络控制器每收到一个管理控制器发出的 NCSI 请求时都必须将请求包中的 MC ID 字段拷贝到响应包的 MC ID 字段中。
Header Revision 字段:Header Revision 字段 1 字节长,标识了 NCSI 命令包头的版本号。在 NCSI 1.0.0a 版本中,该字节规定为 0x01.
IID 字段:IID 字段 1 字节长。正如1.3.1所述,网络控制器可以用 IID 来辨别当前 NCSI 命令是一个新的请求还是一个超时重传的请求;管理控制器可以用 IID 来确认某个特定的 NCSI 请求是否得到了相应。
Command 字段:Command 字段 1 字节长,用于标识特定的 NCSI 命令请求与响应。每个 NCSI 请求命令都对应着 0x00 到 0x7F 之间唯一的一个命令号,而对该 NCSI 请求包的响应的命令号就是把 NCSI 请求的命令号的最高位置为 1,这样就建立了 128 个 NCSI 请求命令与相应的 128 个 NCSI 响应命令之间的一一对应关系。
Channel ID 字段 :Channel ID 字段 1 字节长。每个 NCSI 管理控制器可以对应一个或者多个 package,这些 package 可以属于同一个网络控制器,也可以属于不同的网络控制器。每个 package 的内部又可以定义一个或者多个信道(channel)。所有的 NCSI 数据包都是在某个特定的 channel 中传输的,Channel ID 字段就标识了当前 NCSI 数据包所在的 channel。Channel ID分为packet ID和Internal Channel ID,每个packet ID对应一个网卡,目前一个BMC就连一张智能网卡,所以packet ID的固定的,而Internal Channel ID代表软件虚拟出来的智能网卡与BMC相连的4条路径。
Payload Length 字段: Payload Length 字段 12 比特长,标识了紧随 NCSI 包头之后的 NCSI 载荷的长度。只包括其中的Data字段。(不包括checksum和pad部分)
Reserved 字段:图中标有 Reserved 的区域均为保留字段,通常被置为 0。
1.3.5.3 NCSI 控制包载荷
NCSI 控制包载荷的数据都是按照大端在先的顺序排列的,包括数据、载荷填充、校验和以及以太包填充4部分,如图 8 所示。响应包对比请求包多了Response Code和Reason Code,Response Code提供了返回状态的一般分类。Reason Code提供了与特定响应代码相关的附加详细信息。
图 8 NCSI 控制载荷格式
数据(Data)部分:NCSI 请求不含Data部分。每个 NCSI 响应都有2字节的响应值和2字节的原因值。对于某些NCSI命令的响应,还有一定长度的附加信息。
载荷填充部分:如果NCSI的Data部分长度不是4字节的整数倍,那么就需要将其填充为4字节的整数倍。所有的填充值均为 0x00.
校验和部分:校验和部分4字节长。管理控制器和网络控制器可以利用校验和部分来对 NCSI 包进行校验,也可以将校验和部分设为全 0,从而表明该 NCSI 包不需要校验。
以太包填充部分: 根据 IEEE 802.3标准,所有的以太帧长度必须大于64字节,也就是说,NCSI包头和NCSI载荷的长度之和必须大于46字节。事实上,大部分的NCSI包都无法满足这一条件。因此,几乎所有的NCSI包的末尾都需要作一定长度的填充。
1.3.5.4 AEN 包格式
NCSI 的 AEN 包格式如图 9 所示:
图9 AEN包格式
发送AEN包的网络控制器需要在 NCSI包头的Channel ID字段里标识发生相应事件的channel号。
AEN 包的NCSI头的IID字段始终为 0x00,command 字段始终为0xFF,Payload Length 字段始终为 0x04,也就是说 AEN包的NCSI载荷长度为 4。
AEN 包的NCSI载荷中3字节为保留字段,另外一个字节为 AEN 类型字段,对应的含义如表1所示:
表 1. AEN 类型值与含义的对应关系
AEN类型值 |
含义 |
0x00 |
链路状态发生了改变 |
0x01 |
需要对网络控制器进行配置 |
0x02 |
网络控制器驱动的状态发生了改变 |
0x03 ~ 0x7F |
保留 |
0x80 ~ 0xFF |
各厂商自定义的 AEN 事件 |
2 NSCI应用场景
2.1 Pass-through 与control报文应用场景
网络技术的飞速发展使得人们对于服务器的带外可管理性及可控制性提出了更高的要求。通过带外管理,工程师可以在任意地点通过网络连接到相应的服务器上,进行一系列的管理与维护,而不再需要长时间驻守在嘈杂的实验室环境中。利用BMC(baseboard management controller)就可以直接对服务器的状态进行管理和维护。
BMC: 负责各路传感器的信号采集、处理、储存以及对各种器件运行状态的监控。
如图1所示,协议介绍,NCSI主要是实现NC与BMC之间的传输,以及NETWORK与BMC之间的传输。如图67所示,智能网卡芯片就是所谓的网络控制器,NETWORK是出了智能网卡芯片到交换机去的路线,而主机侧就是CPU。
图67 NCSI应用场景
如图67所示,CPU和智能网卡都插到服务器插槽之中,通过PCIe相连,BMC是服务器自带的一个管理模块,其可以通过RJ45与交换机相连,通过RMII与智能网卡相连。如果BMC启动了,在PC机上登陆BMC的WEB界面(输入 BMC 管理网口的IP 地址)可以直接访问BMC模块(也可以利用命令行登陆),利用这个WEB界面可以让BMC对智能网卡进行配置和查询功能,也就BMC向智能网卡传输NCSI control packet。BMC与交换机相连的一根线是可以不要的,下面分连这根线和不连这根线描述一个pass-through报文的发送流程。
1) BMC与交换机直连。
首先,登陆BMC WEB界面,点击需要进行的操作,PC机直接通过交换机将命令传输到BMC中,BMC通过NCSI 控制报文给网卡发送一个请求,网卡将返回一个响应给BMC,然后BMC将信息直接发到PC让用户看到。
2) BMC不直接与交换机相连。
首先,登陆BMC WEB界面,点击需要进行的操作,PC将命令从网络侧发送给智能网卡,然后以pass-through报文的形式发送给BMC,BMC处理这个报文信息后,知道用户想要做什么,然后BMC通过NCSI 控制报文给网卡发送一个请求,网卡将返回一个响应给BMC,然后BMC将信息以pass-through报文形式发给智能网卡,通过网络侧传给PC让用户看到。
下面主要介绍下NCSI涉及到的服务器、BMC的应用场景。
2.2 服务器
智能网卡配套服务器主要提供两种形态:
² 插卡:支持全高半长、半高半长两种形态
² 扣卡:以MEZZ卡的形态扣在刀片上
2.2.1 智能网卡应用场景:配置管理
机架和x系列服务器当前方案:网卡通过NCSI和BMC对接,BMC对外输出GE管理网口接入管理平面;在外部组网时,也会使用业务网口作为边带网口,智能网卡需要支持通过业务网口传递NCSI报文。同时也要支持CLP方式进行BIOS配置。智能网卡要支持CLP、NCSI、管理命令等相关特性。
OSCA服务器当前方案:网卡没有和BMC的接口,通过PCIe的CLP接口进行带外配置和BIOS配置;BMC和管理板SMM通过管理平面相连。
后续CLP接口会逐步由MCTP替代,智能网卡需要支持MCTP配置接口。
对于新形态,自组网节点和PoCE的IO节点,单板上没有x86处理器,管理要求有些区别。当前规划是优选NCSI接口,承载自定义的一套配置管理协议;次选是SPI接口。NCSI接口比较成熟,且带宽性能较好。
SMBUS、SPI等接口目前在服务器暂时无规划使用。
大部分和业务强相关的参数,通过驱动进行PCIe的带内配置。
3 智能网卡芯片NCSI规格
3.1 NCSI模块描述
如图3.1所示,NCSI模块主要是用于与BMC之间的通信,接口使用RMII接口,work on 50MHz with two data bits,支持两种不同类型的报文传输:pass-trough 报文与control报文。(注意2KB与4KB写反了)
图3.1NCSI模块框图