为4096,表示一个页的大小;notify,是virtio-pci注册的函数vp_notify,当要通知qemu端取vring中的数据时,就调用notify函数;callback,是qemu端完成IO请求返回后,前端处理的回调函数,virtio-blk的回调函数就是blk_done。
需要注意的是,在上述流程中,会以virtio_blk描述结构为io_device通过spdk_io_device_register函数进行注册,以便当SPDK应用程序执行IO操作时能够通过设置的回调函数bdev_virtio_blk_ch_create_cb,在各个使用的CPU核上将bdev的io_channel和virtqueue(vring)关联起来。 同时,在BSC(Big Spring Canyon , 一种基于FPGA实现的...
回到virtio_pci_modern_probe,依次找到virtio规范定义的几种类型的cap在配置空间的偏移,注意common,isr,notify和device变量存放的是配置空间的偏移,最后的device结构与具体virtio设备有关,每种virtio设备实现自己的配置空间,virtio-blk的device-specific结构为virtio_blk_config common = virtio_pci_find_capability(pci_dev...
StratoVirt 的 virtio crate 中的 lib.rs 中定义了为所有 virtio 设备定义的 VirtioDevice Trait。virtio-blk 设备实现了该 Trait。 当前StratoVirt 中 virtio-blk 设备支持一个队列:request_queue。该队列负责 block 设备的初始化以及 IO 命令传输。StratoVirt 为该队列配置了对应的 event_fd 和 handler 函数。 定...
ncpus_cmp_func+0x10/0x10[25338.554061]virtblk_probe+0xe6/0x8a0[virtio_blk][25338.558846]virtio_dev_probe+0x158/0x1f0[25338.562861]really_probe+0x255/0x4a0[25338.566524]?__driver_attach_async_helper+0x90/0x90[25338.571567]driver_probe_device+0x49/0xc0[25338.575660]bus_for_each_drv+0x79/0x...
其中Virtio Device是QEMU模拟出来的设备,是virtio的backend,负责操作物理设备。Virtio Driver是Guest OS中的驱动,是virtio的frontend,例如Virtio-net,Virtio-blk,负责发送Guest OS的I/O请求。前端和后端设备之间是通过Virtqueue来实现的,virtqueue是数据操作的接口,它具体是通过vring来实现的,但是只会暴露给外界...
qemu是一款开源的虚拟机监控器,而virtio-blk是qemu中用于虚拟机磁盘设备的驱动器。virtio-blk驱动器参数可以设置为以下几种选项: cache:该参数用于设置磁盘缓存策略,可选值包括none、writeback和writethrough。none表示不使用缓存,writeback表示使用写回缓存,writethrough表示使用写穿透缓存。根据应用场景和性能需求,...
virtio-blk和virtio-scsi的用户态驱动代码在 “SPDK/module/bdev/virtio” 目录中,其主要处理对象是 “Virtio block device” 和“Virtio SCSI” 的pci controller,将virtio pci controller初始化成spdk中的spdk_bdev设备对外提供服务。virtio-blk和virtio-scsi的设备的代码流程和前述的virtio-net的驱动流程类似。具体...
Finally, we check the device type, and if the device is a block device, we continue to virtio_blk_init().在此函数中,我们将根据 virtio 规范第 3.1 节进行初始化的第一步。首先,我们向设备的状态寄存器写 0,重置设备。然后,我们设置 ACKNOWLEDGE 位,告知设备我们已观察到它,接着我们设置 DRIVER 位,...
当 hypervisor 识别到与设备列表中的设备 ID 相匹配的新设备时,将调用probe函数(由virtio_driver对象提供)来传入virtio_device对象。将这个对象和设备的管理数据缓存起来(以独立于驱动程序的方式缓存)。可能要调用virtio_config_ops函数来获取或设置特定于设备的选项,例如,为virtio_blk设备获取磁盘的 Read/Write 状态或...