与VIRTIO框架相比,VHOST将设备放到HOST上,让Guest和Host Kernal Space之间共享virtqueue,减少Exception Level切换。
对于数据的传递,依次经历:Guest UserSpace(EL0)-> Guest KernelSpace(EL1)-> KVM(EL2)->VHOSTSCSI device (EL2)-> Target core/SCSI layer(EL2)。
在虚拟机中,VHOST SCSI设备仍是PCIE设备,同时也是VIRTIO设备,这里对于虚拟机中呈现与VIRTIO-SCSI一样,因此驱动执行过程和VIRTIO-SCSI完全一样。
在QEMU中,它也会模拟VHOST SCSI设备,但对于数据的传递机制,并没有设置,因此在数据传递时并不会切换到QEMU中。但对于配置空间等模拟,仍在QEMU中模拟。
在HOST上,需要模拟VHOST SCSI设备的数据传递部分,包括ioeventfd用于虚拟机通知HOST数据准备好,irqfd用于Host通知虚拟机中断注入。