该文介绍一个物理机上的spdk与qemu进行通信,由于是在同一个操作系统中,所以可以采用域套接字方式实现通信。实现通信的步骤大体分为两步。第一步:通过spdk的rpc命令创建对应类型的域套接字,spdk作为服务端。第二步:创建虚拟机时将该套接字的信息传递给qemu,qemu作为client端。
首先介绍下第一步,spdk如何创建套接字,并且绑定与该套接字上的相关信息。spdk中vhost的实现方式有两种:scsi 和 blk。以scsi为例,介绍下spdk中代码实现流程。
vhsot_scsi在spdk中以子系统方式存在,在spdk初始化时对其子系统进行初始化,子系统的初始化可参考spdk初始化流程,初始化接口vhost_scsi_subsystem_init。spdk作为服务端需要先创建服务端的域套接字,创建套接字是通过rpc接口实现,接口调用栈大体如下(spdk版本24.05):
spdk创建scsi控制器的rpc接口: vhost_create_scsi_controller
-->rpc_vhost_create_scsi_controller
-->vhost_scsi_dev_construct
-->vhost_dev_register