openUBMC Qemu特性设计说明书

所属SIG组:CICD
落入版本:2509
设计人员:王健
日期:2025/9/6

Copyright © 2025 openUBMC Community

您对"本文档"的复制,使用,修改及分发受木兰宽松许可证, 第2版协议(以下简称"MulanPSL2")的约束。 为了方便用户理解,您可以通过访问https://license.coscl.org.cn/MulanPSL2了解MulanPSL2的概要 (但不是替代)。 MulanPSL2的完整协议内容您可以访问如下网址获取:https://license.coscl.org.cn/MulanPSL2

改版记录

日期修订版本修订描述作者审核
2025/9/6v1.0首版本王健于飞

目录

1.特性概述

1.1 目的

1.2范围

1.3特性需求列表

2.需求场景分析

2.1特性需求来源与价值概述

2.2特性场景分析

2.3特性影响分析

2.3.1硬件限制

2.3.2技术限制

2.3.3对License的影响分析

2.3.4对系统性能规格的影响分析

2.3.5对系统可靠性规格的影响分析

2.3.6对系统兼容性的影响分析

2.3.7与其他重大特性的交互性,冲突性的影响分析

2.4同类社区/商用软件实现方案分析

3.特性/功能实现原理(可分解出来多个Use Case)

3.1目标

3.2总体方案

4.Use Case一实现

4.1设计思路

4.2约束条件

4.3详细实现(从用户入口的模块级别或进程级别消息序列图)

4.4子系统间接口(主要覆盖模块接口定义)

4.5子系统详细设计

4.6DFX属性设计

4.6.1性能设计

4.6.2升级与扩容设计

4.6.3异常处理设计

4.6.4资源管理相关设计

4.6.5小型化设计

4.6.6可测性设计

4.6.7安全设计

4.7系统外部接口

4.8自测用例设计

5.Use Case二实现

6.可靠性&可用性设计

6.1冗余设计

6.2故障管理

6.3过载控制设计

6.4升级不中断业务

6.5人因差错设计

6.6故障预测预防设计

7.安全&隐私&韧性设计

7.1Low Level威胁分析及设计

7.1.12层数据流图

7.1.2业务场景及信任边界说明

7.1.3外部交互方分析

7.1.4数据流分析

7.1.5处理过程分析

7.1.6数据存储分析

7.1.7缺陷列表

7.2隐私风险分析与设计

7.2.1隐私风险预分析问卷

7.2.2隐私风险预分析总结

7.2.3个人数据列表

7.2.4XX需求设计

7.2.5YY需求设计

8.特性非功能性质量属性相关设计

8.1可测试性

8.2可服务性

8.3可演进性

8.4开放性

8.5兼容性

8.6可伸缩性/可扩展性

8.7 可维护性

8.8 资料

9.数据结构设计(可选)

10.参考资料清单

表目录

表1:特性需求列表
表2:特性场景分析
表3:同类社区/商用软件实现方案分析
表4:异常处理设计
表5:可测试性分析
表6:可服务性分析

图目录

图1:方案总体实现原理图
图2:Qemu部署与应用
图3:仿真功能全流程
图4:BMC开发者使用Qemu序列图
图5:测试工程师使用Qemu流程图
图6:CI/CD流水线使用Qemu序列图
图7:测试平台使用Qemu序列图
图8:培训学员使用Qemu序列图

List of abbreviations 缩略语清单

Abbreviations 缩略语Full spelling 英文全名Chinese explanation 中文解释
xxxxxxxxx
xxxxxxxxx

1.特性概述

本特性旨在基于Qemu构建一个高度仿真的虚拟BMC硬件环境。其核心定位是为BMC固件的开发、测试、培训及社区协作提供一套标准化的、开箱即用的、且零硬件成本的纯软件解决方案。

1.1目的

本文档对Qemu特性的功能进行设计,明确用户场景和主要处理过程,作为后续软件开发人员、测试人员的指导。

1.2范围

  • 希望了解和使用Qemu虚拟BMC环境的开发者、测试工程师和培训师。
  • 需要对该特性进行维护或扩展的Qemu社区开发者。

1.3特性需求列表

需求名称特性描述文档名
支持hi1711 最小集芯片仿真代码-
支持hi711 SOC芯片仿真代码https://gitcode.com/openUBMC/qemu/issues/6
支持板卡Localbus总线的仿真https://gitcode.com/openUBMC/qemu/issues/7
Qemu仿真性能满足真机要求https://gitcode.com/openUBMC/qemu/issues/8
支持板卡Hisport总线的仿真https://gitcode.com/openUBMC/qemu/issues/9
支持板卡多路转换器的设备仿真https://gitcode.com/openUBMC/qemu/issues/10
支持板卡寄存器的设备仿真https://gitcode.com/openUBMC/qemu/issues/11
支持Qemu仿真数据插件化管理https://gitcode.com/openUBMC/qemu/issues/12
支持eeprom器件功能仿真和验证https://gitcode.com/openUBMC/qemu/issues/13
支持MCTP复杂协议的仿真支持mctp复杂协议的仿真.md
支持PCIe卡的通用功能仿真支持PCIe卡的通用功能仿真.md
支持SMBus复杂协议的仿真支持SMBus复杂协议的仿真.md
支持带内IMU通信仿真支持带内IMU通信仿真.md
支持板卡MCU器件的仿真支持板卡MCU器件的仿真.md
支持Hi182x网卡通过I2C/SMBUS/标准SMBUS协议获取信息支持标准网卡通过SMBUS协议获取信息.md
支持Hi182x网卡通过Ncsi Over Mctp协议获取信息支持标准网卡通过ncsi over mctp协议获取信息.md

2.需求场景分析

2.1特性需求来源与价值概述

传统的BMC开发严重依赖物理服务器或开发板,这不仅带来了高昂的物料成本,也导致了开发环境碎片化、测试流程难以自动化、新人上手困难等问题。随着开源BMC(如openUBMC)的兴起,社区对一种轻量级、可标准化部署的开发和测试环境的需求日益迫切。Qemu作为业界领先的开源硬件模拟器,是解决这一问题的理想基石。通过扩展Qemu来模拟BMC硬件,我们能够完美地将BMC开发工作流程迁移到软件层面,从而赋能社区的敏捷协作与创新。

2.2特性场景分析

使用者时间/频率关键场景/任务/场景
社区开发者与贡献者日常包括但不限于内核驱动开发者、协议栈开发者、功能特性开发者等,用于其日常的编码、调试和验证工作。
测试工程师与质量保障团队日常用于构建从持续集成到系统级验证的自动化测试流水线。
技术培训师培训教学用于制作教学材料、搭建实验环境以及进行技术演示。
初学者与爱好者偶尔使用为希望学习BMC开发、了解IPMI/Redfish等管理协议的用户提供一个零门槛的入门途径。

2.3特性影响分析

                  +-----------------------------------+
                  |                                   |
                  |      Qemu 虚拟BMC 环境            |
                  |                                   |
                  |  (核心引擎:提供标准化的虚拟硬件)   |
                  |                                   |
                  +-----------+-+---+-----------------+
                              | |   |
              +---------------+ |   +-----------------------+
              |                 |                         |
     应用1    |          应用2  |                  应用3    |
(本地开发调试) |    (冒烟/组件独立测试)|             (系统级深度测试)|
              |                 |                         |
    +---------v-------+   +-----v-----------+   +---------v-----------+
    |                 |   |                 |   |                     |
    |   BMCStudio     |   |  社区CI/CD流水线 |   |      测试平台        |
    |  (本地IDE/环境)  |   |                 |   |                     |
    |                 |   |                 |   |                     |
    +-----------------+   +-----------------+   +---------------------+

2.3.1硬件限制

2.3.2技术限制

操作系统:linux

编程语言:C

2.3.3对License的影响分析

不涉及

2.3.4对系统性能规格的影响分析

不涉及

2.3.5对系统可靠性规格的影响分析

不涉及

2.3.6对系统兼容性的影响分析

不涉及

2.3.7与其他重大特性的交互性,冲突性的影响分析

特性影响分析章节

2.4同类社区/商用软件实现方案分析

仿真特性OpenBMCopenUBMC对比
处理器与开发板AST2400、AST2500、AST2600、AST2700等BMC专用SoC华为系列SoC,如:1711持平
总线与外设接口1. I2c/SMBus控制器:模拟SoC内置的I2c主控制器,支持挂接虚拟I2c设备(如温度传感器)
2. LPC总线:仿真主机与BMC之间的LPC通信接口,用于IPMI命令传输。
3. SPI控制器:支持NOR Flash模拟(如加载BMC固件镜像)
1. I2c/SMBus控制器:模拟SoC内置的I2c主控制器,支持挂接虚拟I2c设备(如Eeprom、温度传感器)
2. IPMB:仿真BMC与鲲鹏CPU间的BT接口;BMC与CPU/NPU 通信的IPMB接口。
3. Hisport: 仿真BMC与天池组件间的Hisport接口。
4. mctp/smbus: 仿真BMC与网卡间的复杂协议接口
持平
UART串口提供虚拟串口(ttySO等),用于OpenBMC控制台输出提供虚拟串口(uart),用于openUBMC控制台输出持平
定时器与看门狗仿真SoC内置的硬件定时器(WDT),OpenBMC可通过驱动操作该虚拟硬件。仿真SoC内置的硬件定时器(WDT),支持驱动模拟该硬件
Qemu环境实现的软件功能支持模拟事件日志(SEL)记录支持软件仿真所有硬件告警
传感器监控基于虚拟I2c设备(如模拟tmp423温度传感器)生成数据,OpenBMC通过hwmon读取并暴露为IPMI SDR借助总线和外设仿真能力通过CSR构造sensor和精细化告警持平
IPMI协议栈在虚拟LPC/SMBus上实现IPMI命令交互(如主机通过Qemu虚拟接口发送ipmitool命令)访问BMC实现IPMI命令“真实”响应持平
整机仿真支出Kunpeng整机仿真,具备典配机型仿真能力,包括BCU、EXU、RISER、PCIe等典型配置
Raid卡仿真支持华为Raid卡仿真和测试用例验证
SATA/SAS硬盘仿真包括SATA控制器、AHCI硬盘、virtio-blk设备等支持仿真获取SATA/SAS硬盘信息,固件信息,硬盘状态信息持平
KVM仿真obmc_ikvm(视频流处理)、bmcweb(WebSocket通信)和webui(前端界面)构成,支持远程键盘、鼠标及屏幕的虚拟映射
网卡仿真1. 仿真通过MCTP发送LLDP报文获取网卡连接交换机端口及端口设计信息。
2. 仿真通过I2c/SMBus/标准SMBus协议获取网卡信息。
3. 仿真通过Ncsi Over Mctp协议获取信息
自动化测试支持通过Qemu仿真环境完成自动化测试

3.特性/功能实现原理

3.1目标

  • 保真度: 模拟的行为必须与真实硬件足够接近。
  • 可重复性: 每次运行的状态应可预测和复现,这对于调试和自动化测试至关重要。
  • 性能: 在保证功能正确的前提下,应具备足够的运行速度,不影响开发测试效率。
  • 可操控性:能够方便地注入事件、模拟故障,支持自动化脚本操作。

3.2总体方案

精确模拟BMC所依赖的底层芯片(soc-hi711),使标准的BMC固件镜像无需修改即可在Qemu虚拟机中正常运行,从而将BMC的开发与测试活动从对物理服务器的强依赖中彻底解放出来。


图1:方案总体实现原理图

Qemu工具与仿真镜像采用独立设计,将通过应用市场发布,以支持社区流水线、测试平台及BMC Studio本地集成。社区开发者可对已支持协议的PCIe卡进行仿真文件配置,并独立发布和维护相关资源。开发者可根据实际需求,打包生成适用于不同机型的仿真镜像包,以便在各种场景中灵活部署和使用。


图2:Qemu部署与应用

在Qemu协议仿真中,采用文件打桩方式模拟板载器件的硬件数据,无需修改现有BMC业务逻辑即可实现仿真功能。具体流程如下:

  • 自发现服务: 该服务从固定路径读取 root.sr 文件,解析其中的CSR数据,建立设备拓扑关系,识别下级连接器并访问对应的下级板卡。Eeprom器件通过仿真实现——当需访问硬件Eeprom时,实际转向读取对应的Eeprom仿真二进制文件(bin文件)。
  • 数据分发与解析: 自发现服务在识别并解析板卡CSR数据后,将数据分发至各业务子系统。各子系统将接收到的数据解析为资源协作接口对象。
  • 数据访问: 用户(通过北向接口、组件app或mdb_ctrl)访问资源协作接口时,消息会被转发至对应的简单协议或复杂协议器件。这些器件均通过文件打桩实现,实际数据从仿真文件中读取


图3:仿真功能实现全流程

4.Use Case一实现

4.1设计思路

首先识别出所有与Qemu虚拟BMC交互的关键角色(Actors),然后为每个角色梳理他们要通过该工具达成的核心目标,最后详细描述为了达成这些目标而发生的交互序列(Use Cases)。角色识别:

  1. BMC开发者:编写和修改BMC代码的工程师。需要频繁地编译、运行和调试固件。
  2. 测试工程师:负责编写和执行测试用例,保证BMC软件质量。关注功能的正确性和稳定性。
  3. CI/CD流水线:一个自动化系统,它的角色是自动触发、执行任务并报告结果。
  4. 培训学员:BMC领域的初学者。需要一個安全的环境来学习和实验。
  5. 测试平台管理系统:用于管理复杂测试任务的自动化系统或平台,它能批量调度和管理Qemu实例。

4.2约束条件

  • 系统权限要求:需要root用户权限运行Qemu。
  • 功能模拟局限:功耗与热管理模拟不真实,可以模拟温度传感器读数,但没有真正的热力学模型。风扇转速变化不会导致模拟的“温度”发生变化,功耗读数也是完全虚拟的。

4.3详细实现

4.3.1 BMC开发者Use Case实现过程


图4:BMC开发者使用Qemu序列图
  • 开发者本地IDE编写lua代码,一键同步生效到Qemu环境,在IDE上可观测生效后的资源协作接口和数据库数据。
  • 开发者本地IDE编写C/C++代码,一键同步生效到Qemu环境,在IDE上可观测生效后的资源协作接口和数据库数据。
  • 开发者在BMC Studio上配置CSR和接口映射配置,一键同步生效到Qemu环境,在BMC Studio上可观测生效后的资源协作接口和数据库数据。

4.3.2 测试工程师Use Case实现过程


图5:测试工程师使用Qemu流程图
  • QEMU模块: 提供丰富的控制和观测接口,允许脚本动态注入数据。
  • 测试框架模块: 需集成QEMU启动、监控、终止的生命周期管理。
  • 测试能力: 从手动物理操作变为全自动化、可编程的测试。提升用例覆盖率和执行效率。

4.3.3 CI/CD流水线Use Case实现过程


图6:CI/CD流水线使用Qemu序列图
  • 产品构建,流水线启动Qemu,执行冒烟测试,确保产品包基本功能正常。
  • 组件代码上库,流水线启动Qemu,执行组件独立测试,确保组件包功能正常。

4.3.4 测试平台Use Case实现过程


图7:测试平台使用Qemu序列图
  • 管理员在测试平台配置自动化测试策略。
  • 平台自动触发(也可管理员手动触发)全量自动化测试,确保产品所有功能的正确性,稳定性和性能。
  • 测试平台显示自动化测试结果,识别到测试用例执行异常会自动通知到管理员或订阅者。

4.3.5 培训学员Use Case实现过程


图8:培训学员使用Qemu序列图
  • 学员可通过脚本启动培训流程(也可部署到社区进行在线教学),脚本为每位学员启动一个Qemu用于BMC培训教学。
  • 学员可通过虚拟BMC页面学习和了解BMC知识。
  • 学员可在指定页面(或文件)编写代码,完成简单BMC功能开发,并一键生效到Qemu环境,通过虚拟BMC页面观察生效结果。

4.4子系统间接口(主要覆盖模块接口定义)

在这个章节只要说本次修改涉及哪个 .h 的哪个接口的修改,大致的修改内容简述下即可。

4.5子系统详细设计

详细描述各模块的修改点。

4.6DFX属性设计

4.6.1性能设计

该特性不影响已有的相关性能指标,但该特性本身的性能要求不低于真机性能的150%

4.6.2升级与扩容设计

不涉及

4.6.3异常处理设计

异常场景潜在影响消减措施
宿主机内存不足 (OOM)Qemu进程被系统杀死,虚拟BMC实例突然断电,可能导致固件文件系统损坏。在启动Qemu前,脚本应检查宿主机可用内存和磁盘空间,确保满足最低要求
宿主机CPU过载虚拟BMC响应极其缓慢,模拟的IPMI命令超时,被误认为BMC固件故障。为Qemu进程设置内存和CPU使用上限,防止单个实例耗尽整个系统资源。
Qemu进程崩溃虚拟BMC突然停止,等同于硬件断电,可能导致固件损坏。提供经过充分测试的、稳定的Qemu版本,避免使用开发中的不稳定特性。
端口冲突无法启动Qemu实例,或网络无法连通。自动化系统动态分配和管理端口号,避免冲突。

4.6.4资源管理相关设计

宿主机要求:

  • 内存:16G
  • CPU:8核
  • 硬盘:200G

4.6.5小型化设计

不涉及

4.6.6可测性设计

Qemu虚拟BMC特性具备高度的可测试性。通过构建一个涵盖功能、性能、安全、可靠性、边界值和异常场景的全面测试体系,不仅可以保证Qemu模拟器本身的质量和稳定性,更能为BMC固件提供一个无比强大的测试平台,从而在软件层面提前发现和解决大量潜在问题,最终显著提升整个BMC软件项目的开发效率和产品质量。

4.6.7安全设计

不涉及

4.7系统外部接口

不涉及

4.8自测用例设计

描述自测用例是如何设计的,如何测试保证功能符合预期

5.Use Case二实现

同第 4

6.可靠性&可用性设计

6.1冗余设计

不涉及

6.2故障管理

不涉及

6.3过载控制设计

不涉及

6.4升级不中断业务

不涉及

6.5人因差错设计

不涉及

6.6故障预测预防设计

不涉及

7.安全&隐私&韧性设计

不涉及

7.1Low Level威胁分析及设计

7.1.12层数据流图

不涉及

7.1.2业务场景及信任边界说明

不涉及

7.1.3外部交互方分析

不涉及

7.1.4数据流分析

不涉及

7.1.5处理过程分析

不涉及

7.1.6数据存储分析

不涉及

7.1.7缺陷列表

不涉及

7.2隐私风险分析与设计

不涉及

7.2.1隐私风险预分析问卷

不涉及

7.2.2隐私风险预分析总结

不涉及

7.2.3个人数据列表

不涉及

7.2.4XX需求设计

不涉及

7.2.5YY需求设计

8.特性非功能性质量属性相关设计

8.1可测试性

Qemu虚拟BMC特性高度可测试。其本质是一个软件程序,所有行为均可通过命令行参数、网络交互和日志输出进行控制和验证,非常适合自动化测试。

测试方向测试内容
核心功能启动测试: 不同版本的BMC固件镜像能否正常启动?
外设模拟: 虚拟传感器读数能否被BMC正确获取?IPMI命令能否正常收发?
网络连通性: Host主机能否通过IPMI、Redfish等协议与虚拟BMC通信?
性能与资源启动速度: 从执行命令到BMC服务就绪需要多久?(建立基线,防退化)
资源消耗: 跑一个Qemu实例要占多少CPU和内存?(用于规划CI资源)
接口性能: BMC各接口访问效率。(提升自动化测试效率)
稳定与可靠性长时运行: 连续运行几天,进程会不会崩溃或内存泄漏?
重复启停: 反复重启1000次,是否每次都能成功?
兼容性固件兼容: 不同版本(新旧)的BMC固件镜像能否在同一个Qemu版本上运行?

8.2可服务性

必须提供一套清晰、准确、易于查找的文档。

文档类型内容描述目标用户
快速入门指南如何启动一个预配置的虚拟BMC。所有用户,特别是初学者
详细配置手册所有命令行参数的详细说明。高级用户、测试工程师
API/接口文档说明如何动态查询状态、注入事件等。开发者、自动化脚本编写者
常见问题解答(FAQ)汇总常见错误(如启动失败、网络不通、无法调试)及解决方案。所有用户
发布说明每个版本的新增特性、已修复的Bug、已知问题。所有用户

8.3可演进性

  1. 仿真总线协议灵活扩展: 全面支持I2C、Localbus、Hisport、SMBus、MCTP等常用总线协议的仿真。基于这些协议的板卡与器件均可通过配置化的方式灵活接入和扩展,无需修改核心仿真框架,显著提升组态的适应性和可定制性。
  2. Qemu与仿真镜像分离设计: Qemu二进制文件与机型仿真镜像实现完全分离。Qemu可作为通用仿真平台,动态加载不同机型的定制镜像,从而实现对多机型的统一、良好支持,大幅提升平台扩展性和版本管理的灵活性。
  3. 基于Manifest的动态硬件组织: 支持通过manifest清单文件动态定义和组织待加载的板卡设备。用户可根据实际需求自定义机型所支持的硬件组合,实现机型功能的灵活装配与快速部署,增强仿真环境的可重构能力。

8.4开放性

Qemu工具源码在GitCode上开放,社区开发者可基于此开放源码进行定制和开发。

8.5兼容性

不涉及

8.6可伸缩性/可扩展性

每个Qemu虚拟机实例都是独立的进程。因此,可以在单台强大的宿主机上并行运行数十个甚至上百个独立实例,尤其适用于CI/CD流水线和测试平台。

  • CI/CD: 可以同时启动多个实例,对不同的代码提交或不同的测试套件进行并行测试,极大缩短反馈时间。
  • 压力测试: 测试平台可以调度和管理一个Qemu实例集群,模拟出成百上千个BMC设备同时运行的场景,进行压力、负载和稳定性测试。

8.7可维护性

不涉及

8.8资料

  • openUBMC Qemu特性设计说明书
  • openUBMC Qemu特性详细设计说明书

9.数据结构设计

不涉及

10.参考资料清单