IBM 虚拟管理通道内核驱动程序 (IBMVMC)¶
- 作者:
Dave Engebretsen <engebret@us.ibm.com>, Adam Reznechek <adreznec@linux.vnet.ibm.com>, Steven Royer <seroyer@linux.vnet.ibm.com>, Bryant G. Ly <bryantly@linux.vnet.ibm.com>,
简介¶
注意:要理解本文档,需要具备虚拟化技术知识。
一个好的参考文档是
https://openpowerfoundation.org/wp-content/uploads/2016/05/LoPAPR_DRAFT_v11_24March2016_cmt1.pdf
虚拟管理通道 (VMC) 是一种逻辑设备,它提供虚拟机管理程序和管理分区之间的接口。此接口类似于消息传递接口。此管理分区旨在提供一种替代方案,以取代使用基于硬件管理控制台 (HMC) 的系统管理系统。
IBM 开发的主要硬件管理解决方案依赖于名为硬件管理控制台 (HMC) 的设备服务器,该服务器以外部塔式或机架式个人计算机的形式打包。在 Power Systems 环境中,单个 HMC 可以管理多个基于 POWER 处理器的系统。
管理应用程序¶
在管理分区中,存在一个管理应用程序,使系统管理员可以通过命令行界面 (CLI) 或表述性状态传输应用程序 (REST API) 配置系统的分区特性。
管理应用程序在由 PowerVM 虚拟化的基于 POWER8 或更新处理器的服务器上的 Linux 逻辑分区上运行。传统上需要 HMC 的系统配置、维护和控制功能可以使用 HMC 到虚拟机管理程序接口以及现有操作系统方法的组合在管理应用程序中实现。此工具提供 HMC 实现的功能的子集,并支持基本的分区配置。管理应用程序组件支持的 HMC 到虚拟机管理程序的消息集通过 VMC 接口传递到虚拟机管理程序,VMC 接口定义如下。
VMC 使管理分区能够提供基本分区功能
逻辑分区配置
启动和停止各个分区操作
显示分区状态
虚拟以太网管理
虚拟存储管理
基本系统管理
虚拟管理通道 (VMC)¶
定义了一个名为虚拟管理通道 (VMC) 的逻辑设备,用于在管理应用程序和虚拟机管理程序之间进行通信。它基本上创建了启用虚拟化管理软件的管道。此设备作为虚拟设备呈现给指定的管理分区。
此通信设备使用命令/响应队列 (CRQ) 和远程直接内存访问 (RDMA) 接口。定义了一个三次握手,必须先进行三次握手,以确立通道的虚拟机管理程序和管理分区侧都在运行,然后再发送/接收任何协议消息。
此驱动程序还利用传输事件 CRQ。当虚拟机管理程序检测到其中一个对等分区异常终止,或者一方调用 H_FREE_CRQ 来关闭其 CRQ 时,会发送 CRQ 消息。为 VMC 设备引入了两个新的 CRQ 消息类。VMC 管理消息用于使用 VMC 的每个分区,以向其合作伙伴传达功能。HMC 接口消息用于管理分区和虚拟机管理程序之间 HMC 消息的实际流动。由于大多数 HMC 消息远远超过 CRQ 缓冲区的大小,因此在每个 HMC 接口 CRQ 消息之前完成 HMC 消息数据的虚拟 DMA (RMDA)。只有管理分区驱动 RDMA 操作;虚拟机管理程序永远不会直接导致消息数据的移动。
术语¶
- RDMA
远程直接内存访问是从服务器到其客户端或从服务器到其合作伙伴分区的 DMA 传输。DMA 指的是物理 I/O 到内存操作以及内存到内存的移动操作。
- CRQ
命令/响应队列,一种用于在合作伙伴分区之间进行通信的工具。从虚拟机管理程序到分区的信号传输事件也在此队列中报告。
示例管理分区 VMC 驱动程序接口¶
本节提供了管理应用程序实现的示例,其中设备驱动程序用于连接到 VMC 设备。此驱动程序包含一个新设备,例如 /dev/ibmvmc,它提供打开、关闭、读取、写入接口,并对 VMC 设备执行 ioctl。
VMC 接口初始化¶
设备驱动程序负责在加载驱动程序时初始化 VMC。它首先创建和初始化 CRQ。接下来,执行 VMC 功能交换,以指示管理分区和虚拟机管理程序中的代码版本和可用资源数量。最后,虚拟机管理程序请求管理分区创建 VMC 缓冲区的初始池,每个可能的 HMC 连接一个缓冲区,这些缓冲区将用于管理应用程序会话初始化。在此初始化序列完成之前,设备将对 open() 调用返回 EBUSY。所有 open() 失败都将返回 EIO。
Management Partition Hypervisor
CRQ INIT
---------------------------------------->
CRQ INIT COMPLETE
<----------------------------------------
CAPABILITIES
---------------------------------------->
CAPABILITIES RESPONSE
<----------------------------------------
ADD BUFFER (HMC IDX=0,1,..) _
<---------------------------------------- |
ADD BUFFER RESPONSE | - Perform # HMCs Iterations
----------------------------------------> -
VMC 接口打开¶
在初始化基本 VMC 通道之后,可以建立 HMC 会话级别的连接。应用程序层对 VMC 设备执行 open(),并对其执行 ioctl(),指示此会话的 HMC ID(32 字节数据)。如果 VMC 设备处于无效状态,则将为 ioctl() 返回 EIO。设备驱动程序为此 HMC ID 创建一个新的 HMC 会话值(范围为 1 到 255)和 HMC 索引值(从索引 0 开始,范围到 254)。然后,驱动程序执行 HMC ID 的 RDMA 到虚拟机管理程序,然后向虚拟机管理程序发送接口打开消息以通过 VMC 建立会话。在虚拟机管理程序收到此信息后,它会向管理分区发送添加缓冲区消息,以为新的 HMC 连接提供缓冲区的初始池。最后,虚拟机管理程序发送接口打开响应消息,以指示它已准备好进行正常的运行时消息传递。以下说明了此 VMC 流程
Management Partition Hypervisor
RDMA HMC ID
---------------------------------------->
Interface Open
---------------------------------------->
Add Buffer _
<---------------------------------------- |
Add Buffer Response | - Perform N Iterations
----------------------------------------> -
Interface Open Response
<----------------------------------------
VMC 接口运行时¶
在正常运行时,管理应用程序和虚拟机管理程序通过信号 VMC 消息和 RDMA 操作交换 HMC 消息。当向虚拟机管理程序发送数据时,管理应用程序对 VMC 设备执行 write(),并且驱动程序将数据 RDMA 到虚拟机管理程序,然后发送信号消息。如果在虚拟机管理程序提供 VMC 设备缓冲区之前尝试 write(),或者当前没有可用的缓冲区,则会返回 EBUSY 以响应 write()。对于所有其他错误(例如无效的设备状态),write() 将返回 EIO。当虚拟机管理程序向管理发送消息时,数据将放入 VMC 缓冲区,并且信号消息将发送到管理分区中的 VMC 驱动程序。驱动程序将缓冲区 RDMA 到分区中,并通过对 VMC 设备的 read() 将数据传递到相应的管理应用程序。如果没有可读取的缓冲区,则 read() 请求将阻止。管理应用程序可以使用 select() 等待 VMC 设备准备好读取数据。
Management Partition Hypervisor
MSG RDMA
---------------------------------------->
SIGNAL MSG
---------------------------------------->
SIGNAL MSG
<----------------------------------------
MSG RDMA
<----------------------------------------
VMC 接口关闭¶
当应用程序层对设备执行 close() 时,管理分区会关闭 HMC 会话级别的连接。此操作会导致接口关闭消息流向虚拟机管理程序,从而导致会话终止。设备驱动程序必须释放为此 HMC 连接分配的任何缓冲区存储。
Management Partition Hypervisor
INTERFACE CLOSE
---------------------------------------->
INTERFACE CLOSE RESPONSE
<----------------------------------------
其他信息¶
有关 CRQ 消息、VMC 消息、HMC 接口缓冲区和信号消息的文档的更多信息,请参阅 Linux on Power Architecture 平台参考。F 节。