1. 基础设备对象
1.1 PCIe设备对象 (PCIeDevice_1)
{
"PCIeDevice_1": {
"DeviceName": "PCIe Card $ (设备型号)",
"FunctionClass": 1, // 功能类型
"Position": "", // 设备位置(容器名称)
"Container": "${Container}", // 载板对象
"GroupPosition": "PCIeDevice_${GroupPosition}", // 板卡组位置
"PCIeDeviceType": "SingleFunction", // 设备类型
"SlotType": "HalfLength", // 插槽类型
"FunctionProtocol": "PCIe", // 协议类型
"FunctionType": "Physical" // 功能类型
}
}
- 用途:定义PCIe设备的基本属性和类型
- 必须配置:是
- 关键属性:设备名称、功能类型(1是raid卡)、设备类型、插槽类型
1.2 raid卡对象 (PCIeCard_1)
{
"PCIeCard_1": {
"Name": "设备型号",
"Description": "设备描述",
"VendorID": "厂商ID",
"DeviceID": "设备ID",
"SubVendorID": "子厂商ID",
"SubDeviceID": "子设备ID",
"Manufacturer": "制造商",
"PartNumber": "部件号",
"RefChip": "关联的芯片",
"Model": "型号",
"FirmwareVersion": "固件版本",
"SerialNumber": "序列号"
}
}
1.3 Riad适配器对象(Controller_1)
环境会先加载pcie对象,再加载controller对象
{
"Controller_1": {
"Name": "raid卡名称",
"TypeId": "raid卡类型Id",
"OOBSupport": "是否支持带外管理",
"CtrlOption1": "raid控制器策略",
"CtrlOption2": "raid控制器策略",
"CtrlOption3": "raid控制器策略",
"BOMNumber": "BOM编码",
"ChipManufacturer": "raid卡芯片厂商"
}
}
- 定义raid卡的功能属性
- 必须配置:是
- 关键属性:
- TypeId:存储组件基于typeid判断raid卡的类型,根据判断出的类型会决定存储组件使用的回调函数库,以及判断raid卡支持的带外管理通道类型
- OOBSupport:表征raid卡是否支持带外管理,0表示不支持,1表示支持,支持带外管理的raid卡存储模块才能正常获取信息
- CtrlOption1:表明raid卡支持的相关功能,存储组件会基于该属性判断raid卡支持的读策略、写策略、IO策略、访问策略,具体参数含义见storage代码仓common_def.lua中option1_format定义
- CtrlOption2:表明raid卡支持的相关功能,存储组件会基于该属性判断raid卡支持的硬盘缓存策略、工作模式,具体参数含义见storage代码仓common_def.lua中option2_format定义
- CtrlOption3:表明raid卡支持的相关功能,存储组件会基于该属性判断raid卡支持的写缓存策略、raid级别,具体参数含义见storage代码仓common_def.lua中option3_format定义
- BOMNumber:raid卡硬件资产编号,也是raid卡四元组信息的一部分
1.4 电容对象(Battery_1)
{
"Battery_1": {
"@Parent": "关联的raid卡对象",
"RefControllerDeviceName": "关联的raid资源名称",
"RefControllerSlotId": "关联的raid卡槽位id",
"RefControllerTypeId": "关联的raid卡类型id"
},
}
电容对象非必须配置,raid支持bbu时可配置
2 raid卡功能对象
2.1 phy误码诊断(SASphy_)
{
"SASPhy_1": {
"@Parent": "关联的raid卡对象",
"PhyId": 255,
"InvalidDwordCount": 0,
"LossDwordSyncCount": 0,
"PhyResetProblemCount": 0,
"RunningDisparityErrorCount": 0
},
}
对应Raid卡的Phy误码诊断通道,相关功能在Storage组件的:phy_object.lua
2.2 raid卡告警对象
{
"Component_PCIeCard": {
"FruId": 255,
"Type": 8,
"Health": 0,
"PowerState": 1,
"GroupId": 1,
"Instance": 1,
"Name": "<=/PCIeDevice_1.DeviceName",
"Presence": 1,
"ReplaceFlag": 0,
"PreviousSN": "N/A",
"SerialNumber": "<=/PCIeCard_1.SerialNumber"
},
}
在soft文件中配置,表征pcie对象,关联raid相关的告警,由fru模块管理,触发告警时会根据告警级别设置关联的raid卡的健康状态
3 raid卡加载流程
加载到CSR,加载了Controller对象会进入流程:
function c_controller:ctor(obj)
function c_controller:init()
日志打印:
log:notice(‘controller init obj.Id = %s, object_id = %s’, self.obj.Id, self.object_id)
然后会进入Raid卡的注册流程:
function c_controller:register()
日志打印:
log:notice(‘controller%s begin register’, self.Id)
log:notice(‘ctrl%s add_controller_to_link_topo successfully’, self.Id)
log:notice(‘ctrl%s add_controller_to_sml successfully’, self.Id)
log:notice(‘ctrl%s register_controller_to_sml successfully’, self.Id)
如果以上日志都打印出来了,那么注册流程就算是走完了,也就意味Raid卡识别到了。
下一步就是一些例测任务。


