1.qemu-kvm提供的virtio pci设备 virtio-blk(硬盘),virtio-net(网络),virtio-balloon(气球)等pci设备,这些设备连接在pci总线上。代码位于qemu: hw/virtio-pci.c static PCIDeviceInfo virtio_info[] = { { .qdev.name = "virtio-blk-pci", },{ .qdev.name = "virtio-net-pci", },{ .qdev.name ...
-device virtio-blk-pci,iothread=iothreadxxx1,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk1,id=virtio-disk0,disable-modern=off,disable-legacy=on \ -drive format=raw,if=none,id=drive-virtio-disk1,cache=directsync,file=/data/rootfs.img,aio=native \ 对应的流程如下: 1. 初始化virt...
它对应的命令行和可用的 QMP 命令都与 Qemu 非常相似。 3. 针对VFIO-PCI 的 KVM 内核热升级方案 PCI 设备直通在当前数据中心的 KVM虚拟化场景中广泛应用,能够为虚拟机中的应用提供高性能的 IO 设备。同时,直通设备的使用也为云计算底层软件设施的运维带来了一些复杂度。 其中,对热升级和热迁移的兼容性是 PCI ...
API 上面我们看到了virtio设备的实例化过程。这里本想以virtio-blk为例看一下aio在virtio设备的实现中扮演什么角色,但限于内容较多,有空单独写一篇,这里说下基本流程: guest OS的virtio前端准备好IO buffer后,然后前端访问特定的MMIO(QEMU提前为virtio设备设置好的)触发misconfig EPT violation类型的vm-exit,并退到KVM...
qemu是一款开源的虚拟机监控器,而virtio-blk是qemu中用于虚拟机磁盘设备的驱动器。virtio-blk驱动器参数可以设置为以下几种选项: 1. cache:该参数用于设置磁盘缓存策略,...
至此,我们已经在 QEMU 层面实现了对 M1 的 CPU、PMGR、AIC、PCIE 总线等设备的基本模拟,可以通过 QEMU 命令在 PCIE 线上插上所需的 PCI 设备,如 virtio-blk、virtio-net 等,来尝试启动 MacOS 虚拟机了。 虚拟化下的MacOS和启动 既然已经完成了对 M1 虚拟机所需要的基本组件的模拟,接下来我们考虑如何在模拟...
vda是virtio-blk,它是一个pci设备,它的中断是msi信号。 net0也是pci设备,中断也是msi信号。 2,irq routing 物理环境上,irq是由硬件产生的。在虚拟化下,却是由虚拟出来的。 kvm提供了set irq line这ioctl给user-mode调用,也提供了kvm_vm_ioctl_irq_line这样的函数在kernel-mode使用。 以键盘i8042 kbd为例,如...
Virtio和virtio-ring可以看成是一层,Virtio是虚拟队列接口,就是将前端驱动程序附加到后端处理程序,算是前后端通信的桥梁,主要实现控制面,virtio-ring实现了两个环形缓冲,分别保存前后端的信息,实现具体的通讯机制和通讯流是偏向数据面,是桥梁的具体实现。 **注意:virtio设备都是pci设备...
2. 使用 virtio-blk-pci /usr/libexec/qemu-kvm -m 16384 -smp 16,sockets=1,cores=16,threads=1 -drive format=raw,id=rbd0,if=none,file=rbd:libvirt-pool/CentOS8 -device virtio-blk-pci,drive=rbd0,id=virtioblk0 -net nic -net user,hostfwd=tcp::2222-:22 ...
device specific layer:也就是上图的最上层,如virtio-net, virtio-blk等,是具体的设备驱动层。 virtio layer:上图的中间层,实现virtio queue及在其之上的buffer传输。 transport layer:上图的最下层,具体的物理传输层,比如pci, mmio, channel io。 2.2,对象层次 ...