其中Virtio Device是QEMU模拟出来的设备,是virtio的backend,负责操作物理设备。Virtio Driver是Guest OS中的驱动,是virtio的frontend,例如Virtio-net,Virtio-blk,负责发送Guest OS的I/O请求。前端和后端设备之间是通过Virtqueue来实现的,virtqueue是数据操作的接口,它具体是通过vring来实现的,但是只会暴露给外界virtq...
上篇讲了virtio-blk简易驱动,这篇来实验virtio-net驱动。喜欢自己鼓捣协议栈的,有virtio-net驱动之后,就可以开始了。同样,有了网络之后,内核就可以跟外界交互了,可以实验各种简易网络服务,比如memcache,ht…
Virtio 目前被用作虚拟机(VM)访问块设备(virtio-blk)和网络设备(virtio-net)的标准开放接口。Virtio-net 作为一种虚拟网卡,是 virtio 迄今为止支持的最复杂的设备。 Part I:Virtio 是如何被构建出来的? Host 通过 hypervisor 运行 VM,每个 VM 都有独立的操作系统,Host 为 VM 提供虚拟 NIC,VM 可以像使用真正的...
其中Virtio Device是QEMU模拟出来的设备,是virtio的backend,负责操作物理设备。Virtio Driver是Guest OS中的驱动,是virtio的frontend,例如Virtio-net,Virtio-blk,负责发送Guest OS的I/O请求。前端和后端设备之间是通过Virtqueue来实现的,virtqueue是数据操作的接口,它具体是通过vring来实现的,但是只会暴露给外界virtqueue的...
Virtio-net网卡发包的原理差不多。虚拟机中virtio网卡驱动往网卡缓冲区中填好报文,然后写queue notify寄存器。这样虚拟机便会退出到root模式,然后在QEMU的vcpu线程virtio_mmio_write函数中对其处理(不过virtio-blk则是在主线程中处理IO的,因为它使用的是eventfd方式)。
Virtio Driver是Guest OS中的驱动,是virtio的frontend,例如Virtio-net,Virtio-blk,负责发送Guest OS的I/O请求。前端和后端设备之间是通过Virtqueue来实现的,virtqueue是数据操作的接口,它具体是通过vring来实现的,但是只会暴露给外界virtqueue的接口。前后端通信是通过Notification机制来进行的。
virtio-blk首先是一个pci设备,初始化主要分两个阶段:pci设备初始化和设备初始化 以下是它初始化的几个阶段: PCI设备探测和初始化 虚拟机启动时,bios和系统会扫描pci总线,看看上面有没有挂载的pci设备。如果有,则会创建一个pci_dev结构。一个pci设备用一个pci_dev数据结构表示,创建之后会用pci设备配置空间信息来...
virtio-blk首先是一个pci设备,初始化主要分两个阶段:pci设备初始化和设备初始化 以下是它初始化的几个阶段: PCI设备探测和初始化 虚拟机启动时,bios和系统会扫描pci总线,看看上面有没有挂载的pci设备。如果有,则会创建一个pci_dev结构。一个pci设备用一个pci_dev数据结构表示,创建之后会用pci设备配置空间信息来...
PCIe(9) virtio-blk/virtio-rng msi-x 驱动 1221 0 09:55 App show me the code --- s028. FreeRTOS(3) 基于 virtio-blk 设备的 Fat 文件系统 166 0 07:36 App show me the code --- s031. FreeRTOS(6) UDP组播 631 0 07:00 App show me the code --- s024. PCIe(8) virtio-net ...
网络虚拟化Virtio-net ⽹络虚拟化Virtio-net ⽹络虚拟化有和存储虚拟化类似的地⽅,例如它们都是基于virtio 的,因⽽在看⽹络虚拟化的过程中,会看到和存储虚拟化很像的数据结构和原理。但是⽹络虚拟化也有⾃⼰的特殊性。例如,存储虚拟化是将宿主机上的⽂件作为客户机上的硬盘,⽽⽹络虚拟化...