通过 vfio-ccw 直通子通道
vfio-ccw 基于中介 VFIO 设备基础设施,允许将特定 I/O 子通道及其设备提供给客户机。主机将不再与这些子通道或设备交互。
注意,虽然 vfio-ccw 应当适用于大多数非 QDIO 设备,但实际仅测试过 ECKD DASD。
配置示例
步骤 1:配置主机设备
每个 mdev 都通过 UUID 标识,因此第一步是获取一个 UUID:
[root@host ~]# uuidgen
7e270a25-e163-4922-af60-757fc8ed48c6
注意:建议使用 mdevctl 工具进行实际的主机设备配置。
要定义与下文相同的设备配置,并使其自动启动,请使用
[root@host ~]# driverctl -b css set-override 0.0.0313 vfio_ccw
[root@host ~]# mdevctl define -u 7e270a25-e163-4922-af60-757fc8ed48c6 \
-p 0.0.0313 -t vfio_ccw-io -a
如果不能或不想使用 mdevctl,请遵循以下手动流程。
找到设备的子通道(本例中设备为
0.0.2b09):[root@host ~]# lscss | grep 0.0.2b09 | awk '{print $2}' 0.0.0313
将子通道(本例中为
0.0.0313)从标准 I/O 子通道驱动解绑,再绑定到 vfio-ccw 驱动:[root@host ~]# echo 0.0.0313 > /sys/bus/css/devices/0.0.0313/driver/unbind [root@host ~]# echo 0.0.0313 > /sys/bus/css/drivers/vfio_ccw/bind
创建中介设备(通过 UUID 标识):
[root@host ~]# echo "7e270a25-e163-4922-af60-757fc8ed48c6" > \ /sys/bus/css/devices/0.0.0313/mdev_supported_types/vfio_ccw-io/create
步骤 2:配置 QEMU
引用已创建的中介设备,并可选择指定呈现给客户机的设备 ID(这里为
fe.0.1234,在客户机中最终显示为0.0.1234):-device vfio-ccw,devno=fe.0.1234,sysfsdev=\ /sys/bus/mdev/devices/7e270a25-e163-4922-af60-757fc8ed48c6
启动客户机。此时应当可以使用该设备(这里为
0.0.1234):[root@guest ~]# lscss -d 0.0.1234 Device Subchan. DevType CU Type Use PIM PAM POM CHPID ---------------------------------------------------------------------- 0.0.1234 0.0.0007 3390/0e 3990/e9 f0 f0 ff 1a2a3a0a 00000000 [root@guest ~]# chccwdev -e 0.0.1234 Setting device 0.0.1234 online Done [root@guest ~]# dmesg -t (...) dasd-eckd 0.0.1234: A channel path to the device has become operational dasd-eckd 0.0.1234: New DASD 3390/0E (CU 3990/01) with 10017 cylinders, 15 heads, 224 sectors dasd-eckd 0.0.1234: DASD with 4 KB/block, 7212240 KB total size, 48 KB/track, compatible disk layout dasda:VOL1/ 0X2B09: dasda1