vhost子系统在SPDK中属于应用层或叫协议层,为虚拟机提供vhost-blk、vhost-scsi和vhost-nvme三种虚拟设备。这里我们以vhost-blk为分析对象,来讨论vhost子系统基本原理。
vhost子系统初始化
vhost子系统的描述如下:
spdk/lib/event/subsystems/vhost/vhost.c:
static struct spdk_subsystem g_spdk_subsystem_vhost = {
.name = "vhost",
.init = spdk_vhost_subsystem_init,
.fini = spdk_vhost_subsystem_fini,
.config = NULL,
.write_config_json = spdk_vhost_config_json,
};
static void
spdk_vhost_subsystem_init(void)
{
int rc = 0;
rc = spdk_vhost_init();
spdk_subsystem_init_next(rc);
}
vhost子系统初始化时,会依次偿试对vhost-scsi、vhost-blk和vhost-nvme进行初始化,如果配置文件中配置了对应类型的设备,那就会完成对应设备的创建并初始化监听socket等待qemu客户端进行连接。
spdk/lib/vhost/vhost.c:
int
spdk_vhost_init(void)
{
int ret;
...