virtio
virtio是一个通用的io虚拟化框架,hypervisor通过他模拟出一系列的虚拟化设备,并使得这些设备在虚拟机内部通过api调用的方式变得可用。它为客户机提供了一个高效访问块设备的方法。它包含4个部分:前端驱动、后端驱动、vring及通信间统一的接口。与其他的模拟io方式对比,virtio减少了虚拟机的退出和数据拷贝,能够极大地提高IO性能。计算机中存在不同的总线标准,而virtio采用的是pci总线(当然也可以用其他总线来实现)。每一个virtio设备就是一个pci设备。
virtio-blk的后端初始化
virtio-blk代码包保存在hw/virtio-pci.c和hw/virtio-blk.c中,通过如下函数对virtio_blk进行初始化。主要的初始化函数是virtio_blk_init_pci。这里定义了设备的信息。static void virtio_blk_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
k->init = virtio_blk_init_pci; //virtio-blk初始化函数