文档目录架构 · 18 篇

设备拓扑、传输与发现

规定固定 virtio-mmio 设备的身份标识、地址、中断、传输契约以及客户机的发现方式。

译自microsoft/nvx · doc/design/2.5-device-topology-transport-and-discovery.md。技术细节以英文原文为准。

架构文档 > 2. 虚拟机架构

表 2.7 列出了固定设备。每个设备都在固定插槽上使用 virtio-mmio,并屏蔽 packed ring。完整的设备数量、类型、总线、地址、中断、特性策略和队列形态,都在解析宿主资源之前完成校验。

表 2.7. 固定的 virtio-mmio 设备。

设备 稳定身份标识 MMIO 范围 中断(IRQ) 存在性
网络 net:microvm0 0xd0000000..0xd0000fff KVM/MSHV 10,WHP 5 可选
宿主文件系统 fs:microvm0 0xd0001000..0xd0001fff 6 保留插槽;附件可选
启动控制台 console:microvm-virtio0 0xd0002000..0xd0002fff 7 可选
distro 块存储 blk:sandbox:distro 0xd0003000..0xd0003fff 4 可选,只读
scratch 块存储 blk:sandbox:scratch 0xd0006000..0xd0006fff 11 可写的最终角色
控制台 console:microvm-control0 0xd0007000..0xd0007fff 3 可选

设备放置是显式的而不是顺序分配的,因此省略某个设备绝不会使其他设备移位。全部六个插槽都被保留,窗口 0xd0004000..0xd0005fff 和 0xd0008000..0xd0008fff、IRQ 9、12 和 13,以及位于 0x30010、0x30014 和 0x30020 的状态字均未使用。

每个冷启动的微虚拟机都会实例化宿主文件系统插槽,即使没有附件也是如此,这样该插槽在捕获之前就是可发现的,快照也能记录显式的休眠状态;恢复时只有当快照记录了该插槽才保留它。该插槽上的多个宿主共享项是单个聚合附件的子项,而不是额外的设备。控制插槽在存在控制台时实例化,控制台要么是实时可认证的本地端点,要么是显式断开连接的控制台。其他可选设备仅在被配置时才存在。

客户机只从机器配置拥有、并按固定地址顺序输出的内核命令行标记中发现固定设备;参见 生效命令行。用户参数无法注入替代的设备声明。稳定身份标识来自机器配置和附件契约,而不是 Linux 设备枚举顺序或 /dev/vdX 之类的名称;客户机按 MMIO 地址把每一个块存储角色映射到其设备。

已保存状态记录确切的设备清单和传输契约。恢复以相同的顺序重建该清单,并在虚拟处理器运行之前把它与已保存状态进行校验。