文章目录
- 概述
- DPDK vhost工作机制
- DPDK vhost工作模式
- DPDK vhost管理结构
- DPDK vhost接口
- 注册vhost驱动:rte_vhost_driver_register
- 启动vhost:rte_vhost_driver_start
- vhost消息处理
- 相关参考
概述
DPDK提供了一套vhost库,用于加速virtio后端,对比于内核态的vhost方案,由于DPDK vhost是在用户态空间实现,因而也称作vhost-user。
DPDK vhost工作机制
DPDK vhost方案的核心是将数据面的处理放到用户空间中,而控制面的逻辑则通过Unix域套接字进行配置。DPDK vhost的整体框架如下:
DPDK应用程序作为单独的进程运行在宿主机上,通过Unix domain socket与QEMU完成设备控制信息的交互,包括设备属性、功能以及virtqueue配置等。virtio设备的模拟仍然由QEMU处理;在完成virtio设备的配置后,DPDK应用程序会以轮询的方式从VM的virtqueue中获得请求并进行处理。
DPDK vhost工作模式
DPDK vhost使用UNIX域套接字传输控制消息,根据vhost是作为server或client运行,vhost-user支持两种配置模式:
- vhost-user:vhost-user作为服务端运行,创建Unix域套接字服务文件,并监听来自前端的连接。这是最初vhost-user支持的模式,但存在一旦DPDK业务进程挂掉,就会对所有VM造成影响;
- vhost-user-client:vhost-user作为客户端运行,由DPDK业务进程负责发起对服务端的连接。
DPDK vhost管理结构
DPDK vhost核心数据结构关联如下:
其中:
- vhost_user:vhost-user全局管理结构,维护所有vhost驱动
- vhost_user_socket:对于每个vhost驱动,都维护着一个Unix domain socket,负责与外部应用进行通信;
- vhost_user_connection:
DPDK vhost接口
DPDK本身提供的是一套vhost库接口,由上层应用通过调用对应的接口实现特定的vhost驱动,目前已有的实现包括DPDK自带的vhost-net驱动、SPDK基于DPDK vhost接口实现的vhost-blk和vhost-scsi驱动等。DPDK vhost提供的几个关键接口如下:
- rte_vhost_driver_register:注册vhost驱动;
- rte_vhost_driver_set_features:设置vhost驱动的feature信息;
- rte_vhost_driver_callback_register:注册vhost驱动特定的回调,由vhost-user在合适的流程中进行调用;
- rte_vhost_driver_start:启动vhost;
- rte_vhost_enqueue_burst:从Host向Guest传输数据;
- rte_vhost_dequeue_burst:从身体Guest接收数据。
注册vhost驱动:rte_vhost_driver_register
启动vhost:rte_vhost_driver_start
vhost消息处理
vhost_user_read_cb负责接收Unix domain socket的消息,并进行处理。
相关参考
- Vhost Library