vhost_protocal
vhost message types front-end 1
FEATURE
VHOST_USER_GET_FEATURES
从底层 vhost 实现中获取特性位掩码。特性位 VHOST_USER_F_PROTOCOL_FEATURES 表示后 端支持 VHOST_USER_GET_PROTOCOL_FEATURES 和 VHOST_USER_SET_PROTOCOL_FEATURES。
VHOST_USER_SET_FEATURES
使能底层实现的一些feature.(例如vhost_log_global_start()会使能 VHOST_F_LOG_ALL feature )
VHOST_USER_GET_PROTOCOL_FEATURES
获取protocol feature, 这相当于一个子feature,仅和协议扩展相关。
VHOST_USER_SET_PROTOCOL_FEATURES
使能某些 protocol features.
OWNER
VHOST_USER_SET_OWNER
在新建立链接的时候,前端向后端发送,表示发送方已经标记为 拥有该会话的前端,此时,后端可以认为会话已经开始。
很类似于tcp三次握手中的(seq->ack->ack)中的第二次ack, server 端在收到client端发送的ack后,认为该连接已经建立,为其该连接 分配相关资源(新版本kernel是这样做的)
VHOST_USER_RESET_OWNER
目前已经弃用,之前用其来disabling all ring(仍想保持会话建立), 但是后端会将其解 释 为还要 discard connect state(类似于close), 建议后端直接忽略次消息,要么仅用 其来disable all rings.
MEMORY REGION
VHOST_USER_SET_MEM_TABLE
将虚拟机内存信息传递到后端, 让后端可以访问这片内存,同时,需要给vhost 这片内存 和GPA的映射关系.
主要传递的信息有:
fds[]
VhostUserMemoryRegion[]
guest_phys_addr
memory_size
userspace_addr
mmap_offset
这里有两个数组, 两个数组中相同index的数组成员表示一个内存区域, 其中fds[] 存放的是文件描述符, vhost front-end 通过其建立好的socket通道,通过socket的
Ancillary messages机制2将文件描述符传递到back-end().另外,
VhostUserMemoryRegion会增加一些描述信息, 其主要的目的是将guest memory region([guest_phy_addr(gpa), gpa + memory_size])和该文件的region ([mmap_offset, mmap_offset + memory_size])的绑定关系get到, 然后调用vfio 相关接口配置iommu.vhost_user_client_and_guest_mr VHOST_USER_GET_MAX_MEM_SLOTS
VHOST_USER_ADD_MEM_REG
VHOST_USER_REM_MEM_REG
LOG
VHOST_USER_SET_LOG_BASE
VHOST_USER_SET_LOG_FD
VRING
set
VHOST_USER_SET_VRING_NUM
VHOST_USER_SET_VRING_ADDR
VHOST_USER_SET_VRING_BASE
VHOST_USER_SET_VRING_KICK
VHOST_USER_SET_VRING_ERR
VHOST_USER_SET_VRING_ENABLE
VHOST_USER_SET_VRING_CALL
VHOST_USER_SET_VRING_ENDIAN
这些一般会在guest modify common_cap.dev_status为3.1
DRIVER_OK (4) Indicates that the driver is set up and ready to drive the device.表示guest driver 已经最好准备驱动设备了,设备可以工作了.
get
VHOST_USER_GET_VRING_BASE
VHOST_USER_GET_QUEUE_NUM
migration postcopy
VHOST_USER_POSTCOPY_ADVISE
VHOST_USER_POSTCOPY_LISTEN
VHOST_USER_POSTCOPY_END
RESET
VHOST_USER_RESET_DEVICE
OTHER
VHOST_USER_SEND_RARP
VHOST_USER_NET_SET_MTU
VHOST_USER_SET_BACKEND_REQ_FD
VHOST_USER_IOTLB_MSG
VHOST_USER_GET_CONFIG
VHOST_USER_SET_CONFIG
VHOST_USER_CLOSE_CRYPTO_SESSION
VHOST_USER_SET_INFLIGHT_FD
VHOST_USER_GPU_SET_SOCKET
VHOST_USER_SET_STATUS
VHOST_USER_GET_STATUS
VHOST_USER_GET_SHARED_OBJECT
VHOST_USER_SET_DEVICE_STATE_FD
VHOST_USER_CHECK_DEVICE_STATE
堆栈
附录
vhost_virtqueue_start() stack
vhost_user_set_vring_call stack
vhost_set_vring_enable
TODO
virtio_pci_set_guest_notifiers
msix mask/unmask notify
vhost_set_vring_call
参考链接
virtio spec status field
3.1
section 2.1 Device Status Field3.2
section 4.3 Common configuration structure layout
Last updated