• VHOST-SCSI代码分析(1)VHOST SCSI设备模拟


            VHOST SCSI设备的模拟是由QEMU和HOST共同实现的,QEMU模拟VHOST SCSI设备配置空间等,而对于虚拟机通知HOST和HOST通知虚拟机机制由HOST内核实现。

            在QEMU中VHOST SCSI设备继承关系如下:

            其它设备以及对应class_init函数和realize具现化实现与VIRTIO-SCSI一致,这里介绍TYPE_VHOST_SCSI部分。

    VHOST SCSI具现化过程

    VHOST SCSI具现化过程如下:

    TYPE_VHOST_SCSI设备具现化过程如上图所示:

    (1)打开/dev/vhost-scsi文件,用于与HOST内核交互;

    (2)调用virtio_scsi_common_realize,用于初始化vq,并设置handle_output为空,因为在HOST上作handle_output,因此QEMU中并不需要设置;

    (3)初始化vhost设备,包含如上步骤:

    1. 调用vhost_set_backend_type设置后端类型,这里设置kernel_ops表示在HOST内核上模拟VHOST设备;
    2. 调用vhost_ops->vhost_set_owner,在后端创建内核线程vhost_worker,并与vq关联上;
    3. 调用vhost_ops->vhost_get_features从后端获取支持的features;
    4. 调用vhost_virtqueue_init设置virtqueue CALL机制;
    5. 注册memory_listener_register;

            上述很多操作通过/dev/vhost-scsi进行系统调用,在HOST内核上执行。

    VHOST SCSI设备启动过程

    当准备工作完成后,启动VHOST设备过程如下:

    其中重要的步骤发下:

    (1)通过k->set_guest_notifier设置通知guest机制;

    (2)启动vhost设备时,包括如下步骤:

    1. 通过vhost_ops->vhost_set_mem_table将虚拟机内存视图传递给HOST内核;
    2. 对于每个vq,与HOST内核设置virtqueue情况,包括设置每个vq的数目,对每个vq设置基地址,将VRING desc/avail/used映射到HVA并往HOST内核设置这些地址,设置KICK机制,设置CALL机制

    KVM对应操作

    (1)打开/dev/vhost-scsi

    分配vhost_scsi,初始化vhost work,设置handle_kick回调函数,用于虚拟机通知HOST设备时的执行函数。

    (2)VHOST_SET_OWNER

    VHOST_SET_OWNER用于创建内核线程,并将vq与worker关联上。

    (3)后端类型设置

    后端类型设置通过vhost_set_backend_type实现,这里包括三种VHOST后端:

    这里VHOST_KERNEL定义的kernel_ops如下所示:

    1. VHOST_KERNEL,内核用于VHOST后端
    2. VHOST_USER,用户态用于VHOST后端
    3. VHOST_VDPA,VDPA用于VHOST后端

     (4)VHOST_SET_MEM_TABLE

    (5)VRING相关的设置

    VHOST_SET_VRING_NUM用于在HOST内核中设置VRING支持数目大小

    VHOST_SET_VRING_BASE用于在HOST内核中设置VRING的基地址

    VHOST_SET_VRING_KICK用于在HOST内核中设置KICK机制的eventfd

    VHOST_SET_VRING_CALL用于在HOST内核中设置CALL机制的eventfd

  • 相关阅读:
    异常检测 | MATLAB实现BiLSTM(双向长短期记忆神经网络)数据异常检测
    多场景通吃,INDEMIND视觉导航方案赋能服务机器人更多可能
    Node.js中的单线程服务器
    【白板推导系列笔记】线性分类-线性判别分析(Fisher)-模型定义
    CAS:1207751-12-9​,Maleimide-PEG-amine,马来酰亚胺peg氨基可用于生物结合
    【计算机毕业设计】基于协同过滤算法的体育商品推荐系统的设计与实现、SpringBoot+Vue
    Dropout和BN为什么不能共同使用?
    抽奖动画 - 红包雨抽奖
    目标检测5--旷视YOLOX算法介绍
    Android 小知识 修改页面高度
  • 原文地址:https://blog.csdn.net/flyingnosky/article/details/132951101