答案内容由AI生成,仅供参考:
QLE2690网卡MCTP使能配置与通信配置说明
根据您提供的问题信息,QLE2690-HUA-SP网卡在BMC端无法获取端口信息,问题定位在mctp_lib.get_endpoint_and_transport调用处阻塞。以下为综合分析及解决方案:
问题原因分析
-
现象:
- BMC仅能获取基础硬件信息(如设备名、PCIe位置),但无法获取端口级信息(如FC_ID、端口状态等)。
- 日志显示代码在调用闭源库函数
mctp_lib.get_endpoint_and_transport时被阻塞或无限等待。
-
根本原因推断:
- MCTP(Management Component Transport Protocol)通道未能成功建立。
- MCTP未在QLE2690网卡上启用:有经验反馈指出 QLogic 系列网卡需手动开启 MCTP 功能,否则不会响应 MCTP 探测消息。
- 若网卡不响应 MCTP Discovery 请求,则
get_endpoint_and_transport会持续等待直至超时或死锁,且由于该函数为闭源实现,缺乏超时机制可能导致永久阻塞。
-
MCTP建立流程依赖:
BMC → 发送 MCTP Discovery Request (via PCIe VDM) ← 期望收到 MCTP Discovery Response → 创建 Endpoint 和 Transport 对象 → 后续通信(获取传感器、端口信息)当前状态:第一步探测失败或无响应,流程中断。
QLE2690网卡MCTP使能方法
结论先行
目前 QLE2690网卡的MCTP使能必须通过固件配置实现,且存在明确的固件版本要求。若未满足条件,即使BMC侧配置正确也无法通信。
一、MCTP使能方式
方法一:通过固件设置启用 MCTP(推荐)
QLogic(现Marvell旗下)的HBA卡(包括QLE2690)MCTP功能默认可能处于关闭状态,需通过以下任一方式启用:
| 方法 | 说明 |
|---|---|
| 1. 厂商工具配置(首选) | 使用 QLogic 官方工具(如 qlconfig、systool)在操作系统中运行,进入 HBA 配置界面,启用 “Management Throughput” 或 “MCTP Support” 选项。 |
| 2. BIOS/UEFI 启动菜单配置 | 某些服务器平台在 POST 阶段提供 HBA 配置菜单(通常按 Ctrl+Q),可在其中启用 “Out-of-Band Management” 或 “MCTP over PCIe” 功能。 |
| 3. 固件参数注入(高级) | 若使用 openUBMC 平台,可通过 .sr 配置文件注入 SupportedMctp=true 并确保加载正确的驱动策略,但这仅作用于BMC侧识别,仍需网卡本身支持并启用MCTP。 |
关键操作建议:
在服务器启动时进入 QLogic HBA 的 BIOS 配置界面(Ctrl+Q),检查是否有关于“MCTP”、“OOB Management”或“Enhanced Management Interface”的选项,并将其设置为 Enabled。
二、MCTP通信的固件版本要求
根据类似项目经验及知识库中关于其他网卡(如LPe系列)的MCTP启用逻辑,QLE2690必须满足以下条件:
| 要求项 | 是否必要 | 说明 |
|---|---|---|
| 固件版本 ≥ 8.03.00 | 此版本起 QLogic 正式支持 MCTP over PCIe VDM 消息格式。较低版本仅支持 NCSI 或 PLDM。 | |
| Boot BIOS 版本 ≥ 2.05 | 确保启动阶段可暴露 MCTP 端点。 | |
| 启用 “Extended Link Messages” | MCTP Discovery 依赖 PCIe Vendor Defined Messages (VDM),必须开启此项。 |
验证命令(Linux下):
# 查看QLE2690固件版本 scli --get_info --adapter=0 | grep -i firmware # 或使用 systool 工具 systool -c fc_host -v
注意:您提到“没有升级包”,但若当前固件版本低于 8.03.00,则无法支持MCTP通信,需联系服务器厂商或QLogic(Marvell)技术支持获取合规固件包。
排查与解决步骤清单
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 进入 QLogic HBA BIOS(Ctrl+Q) | 检查并手动启用 MCTP Over PCIe 或 Out-of-Band Management |
| 2 | 确认网卡固件版本 ≥ 8.03.00 | 若不满足,必须升级 |
| 3 | 检查 .sr 配置文件中是否包含:"SupportedMctp": true"SupportedMctpOverPcie": true |
确保BMC侧识别为支持MCTP设备 |
| 4 | 使用 tracemctp 抓包分析 |
验证是否有 MCTP_MSG_TYPE_DISCOVERY_REQ 发出,是否有响应 |
| 5 | 添加 Lua 层超时保护 | 防止 mctp_lib.get_endpoint_and_transport 长期阻塞(见下文) |
建议:增加应用层超时机制(防御性编程)
因 mctp_lib 为闭源组件,强烈建议在调用处增加协程+定时器的超时机制,避免服务挂死:
local function create_with_timeout(bus, mod_name, phy_addr, msg_type, timeout_sec)
local result = { success = false, endpoint = nil, transport = nil }
local co = coroutine.create(function()
local ok, ep, tp = pcall(mctp_lib.get_endpoint_and_transport, bus, mod_name, phy_addr, msg_type)
result.success = ok and ep and tp
result.endpoint = ep
result.transport = tp
end)
local timer = setTimeout(timeout_sec * 1000, function()
if coroutine.status(co) == "suspended" then
log:warning("MCTP endpoint creation timed out")
result.success = false
end
end)
coroutine.resume(co)
clearTimeout(timer)
return result.success, result.endpoint, result.transport
end
相关知识补充
| 概念 | 说明 |
|---|---|
| MCTP over PCIe | 通过 PCIe 的 Vendor Defined Message(VDM)传输 MCTP 报文,用于带外管理 NVMe、网卡、RAID 卡等设备。 |
| mctp_lib | openUBMC 中的闭源库,负责 MCTP 端点创建与传输层管理,无日志输出时可能崩溃或死锁。 |
| BmcPhyAddr / BmcEid | BMC 自身在网络中的物理地址与端点ID,必须已正确配置。可用 busctl get-property 检查。 |
| QLogic → Marvell | QLogic 已被 Marvell 收购,其驱动与工具现由 Marvell 维护。 |
总结与建议
| 项目 | 建议 |
|---|---|
| 是否支持 MCTP | 支持,但需固件 ≥ 8.03.00 并手动启用 |
| 是否需升级包 | 是,若固件版本过低,必须获取并升级 |
| 配置方法 | 进入 HBA BIOS(Ctrl+Q),启用 MCTP/OOB 管理功能 |
| 是否为闭源库问题 | 高概率:闭源库无超时机制导致阻塞 |
| 推荐操作 | 1. 升级固件 + 启用MCTP 2. 配置 .sr 文件3. 加超时保护 |
强烈建议:联系 服务器厂商 或 Marvell 技术支持,获取适用于 QLE2690-HUA-SP 的、支持 MCTP 的完整固件包与配置指南。
如需进一步支持,建议提供:
- QLE2690 当前固件版本
- 是否能进入 HBA BIOS 配置界面
tracemctp dump抓包结果
相关链接: