玩转OurBMC第二十二期:OurBMC之PCIe接口应用(上)
【栏目介绍:“玩转OurBMC”是OurBMC社区开创的知识分享类栏目,主要聚焦于社区和BMC全栈技术相关基础知识的分享,全方位涵盖了从理论原理到实践操作的知识传递。OurBMC社区将通过“玩转OurBMC”栏目,帮助开发者们深入了解到社区文化、理念及特色,增进开发者对BMC全栈技术的理解。
欢迎各位关注“玩转OurBMC”栏目,共同探索OurBMC社区的精彩世界。同时,我们诚挚地邀请各位开发者向“玩转OurBMC”栏目投稿,共同学习进步,将栏目打造成为汇聚智慧、激发创意的知识园地。】
PCI-Express (peripheral component interconnect express)是一种高速串行计算机扩展总线标准,它采用高速串行点对点双通道的传输架构,使得每一个所连接的设备都能够被分配到独享的通道带宽,与传统共享总线带宽的方式截然不同,独享通道带宽有效避免了多个设备争抢带宽的情况,从而显著提升了数据传输的效率和稳定性。PCI - Express主要支持主动电源管理,错误报告,端对端的可靠性传输,热插拔以及服务质量(QOS)等重要功能,这些功能共同构建起了一个高效、稳定且灵活的计算机扩展总线系统。
飞腾腾珑E2000 PCIe介绍
PCIe拓扑结构采用点对点的链路连接方式,多个组件通过这些点对点链路相互连接,形成一个有机的整体,以实现设备之间高效的数据交换和通信。下图展示的是一个单一的结构实例,在PCIe体系里,将其称为一个层级,由根复合体(RC)、多个端点(I/O 设备)、交换机(Switch)和 PCI Express 到 PCI/PCI-X 桥接器组成,这些硬件都通过 PCI-Express 链路相互连接,共同构成了一个功能强大、高效稳定的 PCIe 拓扑结构。
注:上图引用<PCI Express Base Specification, Rev. 4.0 Version 1.0>
BMC通常作为Endpoint(EP,端点设备)连接在RC或Switch下用于图形显示,在系统下被识别为一个GPU,操作系统根据厂商号、设备号加载对应的GPU驱动,然后系统便能够将图形界面数据输出到对应的视频接口,常见的视频接口包括VGA、DP、HDMI。
BMC与处理器之间通过 PCIe 接口以内存映射或 I/O 映射的方式进行数据交互。在内存映射方式下,PCIe 设备的寄存器和数据缓冲区被映射到 BMC 的内存地址空间,BMC 可以直接通过内存读写操作来访问设备的寄存器和传输数据,这种方式数据传输速度快,效率高。如下图 BAR0上地址 80058800000 则映射的是飞腾腾珑E2000 上 DC 控制器,BAR2上 80400000000 地址映射的是BMC内存空间,此部分内存空间会被 DC 驱动用作显存。在 BMC 固件中,需要将这部分内存预留出来,以确保 GPU 驱动能够正常使用。
PCIe接口应用:共享内存
飞腾腾珑E2000 的 PCIe EP 使用的是Type0配置空间头,单个 function 最多可支持6个32位 BAR(0-5)或3个64位的BAR(0、2、4)空间。飞腾腾珑E2000 用作GPU时需要使用BAR0和BAR2。此时我们可以将未使用的BAR4利用起来,让BMC内核申请一块内存直接映射到 BAR4 上。完成配置后,如下图所示,Host和BMC映射地址的内容一致,Host 软件或 BIOS 向 BAR4 地址内读写数据,BMC 应用软件向申请的内存读写数据,即可基于 PCIe 接口实现 Host 与 BMC 以共享内存机制进行通信。
现在硬件上共享内存机制已经实现,Host与BMC通信还需要协商一种适合共享内存机制的通信协议来进行数据交互。针对共享内存的特性,DMTF组织定义MMBI(Memory-Mapped Buffer Interface)协议,常用于服务器场景的BIOS与BMC的通信。
MMBI协议在共享的内存空间定义 H2B(Host to BMC,即Host只写、BMC只读)和 B2H(BMC to Host,即BMC只写Host只读)空间,限制Host和BMC读和写范围,使用者可在数据结构中通过定义状态标志位同步、消息队列优先级、超时重传机制、互斥锁保护等机制确保H2B、B2H交互有序性,避免数据冲突。
注:上图引用<MCTP MMBI Transport Binding Specification>
正常来说用户到这里就可以基于MMBI协议自定义业务的通信协议实现BIOS与BMC的交互。但在复杂的系统管理场景中,往往涉及多组件协作、标准化协议兼容或跨介质扩展等需求。由于MMBI不规定传输的数据结构(如命令类型、参数格式、校验规则),若单独使用,BMC 与主机需自定义私有协议,导致兼容性差(不同厂商的实现无法互通)。当系统中存在多个管理组件(如 BMC、BIOS、NVMe 控制器、网卡管理模块等)时,MMBI 无法标识 “数据该发给哪个组件”,也无法实现跨组件的消息转发。MMBI 依赖 PCIe 实现共享内存映射,若未来系统需要通过其他介质(如 I2C、以太网)传输管理消息,单独的 MMBI 无法支持 “一套上层逻辑适配多底层” 的需求。
这时可以引入MCTP作为管理消息的传输协议,同样DMTF组织定义了《MCTP MMBI Transport Binding Specification》(MCTP over MMBI)规范,用于在MMBI通路上传输MCTP消息。这里只粗略描述MCTP功能特性,不深入阐述。
MCTP在每种通信介质(如PCIe、I2C、I3C等)一般都会定义Discovery机制发现MCTP设备并分配EID,MCTP消息内通过Destination EID、Source EID确定消息收发者。TO、Msg Tag区分报文请求、应答包。搭配SOM、EOM等字段实现拆包组包,可兼容不同通信介质下传输数据数量上限。
注:上图引用<MCTP MMBI Transport Binding Specification>
MCTP 作为中间传输层协议,本身不会定义具体的功能协议。通过 MsgType 字段确认后续 MessageData 字段的具体含义。同样的DMTF组织定义 NVMe-MI、PLDM、NCSI over MCTP 等规范,不同功能的设备可以自由选择支持的功能,如NVMe盘的选择NVMe-MI,网卡 NCSI 等。基于此满足复杂的系统管理场景中,多组件协作、标准化协议兼容或跨介质扩展等需求。
注:上图引用<Management Component Transport Protocol (MCTP) IDs and Codes>
下图为数据传输流程示例(NVMe-MI over MCTP over MMBI):
- NVMe-MI 等是 “应用层协议”,定义具体的管理命令,依赖 MCTP 实现传输;
- MCTP是 “中间传输协议”,负责管理消息的格式定义和端到端传输,承上启下;
- MMBI是 “数据链路层”,提供基于共享内存的通信能力,处于 MCTP 之下;
- PCIe是“物理层”,提供最基础的硬件传输能力,是 MMBI 能够实现 “内存直接访问” 的硬件基础。
这种层次划分既保证了底层通信的高效性(MMBI 的共享内存),又实现了上层协议的灵活性(MCTP 支持多介质、应用层聚焦业务),是现代服务器管理通信的典型架构。
本期内容着重为大家介绍了基于 PCIe 接口实现的应用场景--共享内存,共享内存作为一种高效的数据交互方式,通过 PCIe 接口实现时,能够充分发挥 PCIe 接口的高带宽和低延迟特性。在这种应用场景下,CPU 与 BMC 能够直接访问同一块物理内存区域,为大数据量传输提供了高效的通信基础。该机制尤其适用于需快速响应的中断场景,使用无握手的协议,CPU 可在触发中断后立即退出中断处理流程,迅速返回正常业务操作,从而显著减少中断延迟来提高系统的整体性能。下期我们将继续围绕PCIe接口应用为大家深入剖析另一个应用场景——虚拟网卡。敬请关注!
欢迎大家关注OurBMC社区,了解更多BMC技术干货。
OurBMC社区官方网站:

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
七夕不止儿女情长,更有开发自由:Zadig v4.0 正式发布
这一次,告别约束,拥抱自由 你是否也曾想象过一个完全由自己掌控、随心定制、无缝集成所有工具的研发平台? 今夜,我们以最具分量的产品发布,致敬每一位用代码改变世界的创造者——Zadig V4.0 携“开发自由”而来。 🌟 无限自定义:你的平台,你定义 这不再是一个需要你迁就的工具,而是真正为你而生的开发平台。 Zadig v4.0 带来革命性的 IDP 自定义能力,打造真正贴合你心意的开发门户。灵活编排导航栏,菜单结构随习惯而定;自定义业务字段,精准匹配实际场景;配置专属标签页,关键信息一目了然。 全面增强的 OpenAPI: 发布计划、Helm Values 查看、用户管理…一切皆可调用 这不再是一个需要你迁就的工具,而是为你而生的开发平台。 🌍 全球化支持:无边界协作 Zadig v4.0 实现完整英文支持,覆盖权限、通知、审批等全场景,让分布式与国际化团队无缝协作。 无论是硅谷、上海、柏林,还是班加罗尔,所有人都能在同一平台上流畅协同。 ✅ 全球化支持: 官网、文档、产品全面支持英文本地化;支持国际版飞书审批,跨时区协作更顺畅。 🔗 深度生态集成: ...
-
下一篇
IntelliJ IDEA 2025.1.5 发布
IntelliJ IDEA 2025.1.5 现已发布,具体更新内容包括: 现在,当连接第二台显示器时,IDE 界面可以在 macOS 上的 Google Meet 屏幕共享期间无缝运行。[JBR-7582] UrlClassLoader.getFiles现在返回预期的java.nio.file.Path实例,而不会与其他路径冲突。[IJPL-187780] 要了解有关已解决问题的更多信息,请参阅发行说明。 可以从 IDE 内部、通过Toolbox App 或使用 Ubuntu 的 snap 包更新到此版本。也可以从网站下载。
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8编译安装MySQL8.0.19
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2整合Redis,开启缓存,提高访问速度
- MySQL数据库在高并发下的优化方案
- Docker使用Oracle官方镜像安装(12C,18C,19C)