虚拟通道子系统

QEMU 实现了虚拟通道子系统,包含子通道、通道路径(大多没有实际功能)和通道设备(virtio-ccw、3270 以及通过 vfio-ccw 直通的设备)。它支持多子通道集(MSS)和扩展多通道子系统(MCSS-E)。

所有通道设备都支持 devno 属性,其参数格式为 <cssid>.<ssid>.<device number>。

默认通道子系统映像 ID(<cssid>)为 0xfe。对于未启用 MCSS-E 的客户机,其中的设备会显示在通道子系统映像 0 中。注意,如果客户机操作系统未启用 MCSS-E,则具有其他 cssid 的设备不可见(目前支持的所有客户机操作系统均未启用)。

子通道集 ID(<ssid>)支持的值为 0-3。如果客户机操作系统未启用 MSS,则 ssid 不为 0 的设备不可见(任何支持 virtio 的 Linux 版本都会启用 MSS)。任何设备都可以放入任意子通道集,没有设备类型限制。

设备号范围为 0-0xffff。

如果设备未指定 devno 属性,QEMU 会选择子通道集 0 中下一个空闲设备号;如果没有剩余空闲设备号,则跳到下一个子通道集。

QEMU 将设备放在指定子通道集中的第一个空闲子通道。如果设备被热拔除后重新插入,可能出现在不同的子通道上。(这与 z/VM 的工作方式类似。)

示例

  • 自动分配 cssid/ssid/devno 的 virtio-net 设备:

    -device virtio-net-ccw
    

    在 Linux 客户机中(没有默认设备,且此设备之前未指定其他设备),它会显示为子通道 0.0.0000 下的 0.0.0000。

    QEMU 中自动分配的属性(例如通过 info qtree 查看)为 dev_id = "fe.0.0000" 和 subch_id = "fe.0.0000"。

  • 子通道集 0 中的 virtio-rng 设备:

    -device virtio-rng-ccw,devno=fe.0.0042
    

    如果将它添加到上述同一 Linux 客户机,会显示为子通道 0.0.0001 下的 0.0.0042。

    设备属性为 dev_id = "fe.0.0042" 和 subch_id = "fe.0.0001"。

  • 子通道集 2 中的 virtio-gpu 设备:

    -device virtio-gpu-ccw,devno=fe.2.1111
    

    如果将它添加到上述同一 Linux 客户机,会显示为子通道 0.2.0000 下的 0.2.1111。

    设备属性为 dev_id = "fe.2.1111" 和 subch_id = "fe.2.0000"。

  • 非标准通道子系统映像中的 virtio-mouse 设备:

    -device virtio-mouse-ccw,devno=2.0.2222
    

    此设备不会出现在标准 Linux 客户机中。

    设备属性为 dev_id = "2.0.2222" 和 subch_id = "2.0.0000"。

  • 另一个非标准通道子系统映像中的 virtio-keyboard 设备:

    -device virtio-keyboard-ccw,devno=0.0.1234
    

    此设备同样不会出现在标准 Linux 客户机中,因为 0 不是标准通道子系统映像 ID。

    设备属性为 dev_id = "0.0.1234" 和 subch_id = "0.0.0000"。