1. virtio:针对Linux的I/O的虚拟化框架 在虚机中,可以通过qemu模拟e1000网卡,这样的经典网卡一般各种客户操作系统都会提供inbox驱动,所以从兼容性上来看,使用类似e1000的模拟网卡是非常一个不错的选择。 但是,e1000网卡上也包含了复杂的io端口,寄存器,缓存配置,虚拟机每次收发包都会引起更多的io和mmio操作,使得虚拟机...
vhost技术对virtio-net进行了优化,在内核中加入了vhost-net.ko模块,使得对网络数据可以在内核态得到处理 图中描述了vhost的io路径: guest发出中断信号退出kvm,kvm直接和vhost-net.ko通信,然后由vhost-net.ko访问tap设备。 这样网络数据只需要经过从用户态到内核态的一次切换,就可以完成数据的传输。大大提高了虚拟网卡...
这是通过调用cpu_physical_memory_map函数来完成的。 然后我们把信息组装成一个elem,返回给virtio_net_receive使用。(我理解的地址转换原理大概是这样的:设备在QEMU中初始化的时候(包括RAM)都会去设置设备的物理地址空间MemoryRegion,这个结构体里面的addr表示该设备的起始物理地址,所以只需要比较这个网卡缓冲区的物理地址...
vhost技术对virtio-net进行了优化,在内核中加入了vhost-net.ko模块,使得对网络数据可以在内核态得到处理。 图中描述了vhost的io路径: guest发出中断信号退出kvm,kvm直接和vhost-net.ko通信,然后由vhost-net.ko访问tap设备。 这样网络数据只需要经过从用户态到内核态的一次切换,就可以完成数据的传输。大大提高了虚拟...
Qemu中,设备的模拟称为前端,比如e1000,前端与后端通信,后端再与底层通信,我们来分别看看发送和接收...
e1000 1Gb/s virtio 10Gb/s 注意virtio是唯一可以达到10Gb/s的,根据文献一,其iperf测试速率可达到9.4。文献1还提到如果virtio配置不合理速度只能达到3.6。不用担心这个情况,经查验ovirt自己生成的虚拟机配置都是合理的。( use ‘-device virtio-net-pci’ option) ...
群晖3617的6.2.3引导的驱动包extra已添加virtio虚拟网卡驱动,pve+群晖3617正常使用中,无论从cpu占用和性能上,virtio虚拟网卡比e1000虚拟网卡好的多。应该算是第一人发3617带virtio虚拟网卡驱动引导驱动包的了吧。 注意几点: 6.2.3 群晖3617 PVE+群晖virtio虚拟网卡 ...
guest中的virtio-net driver分配skb,设置到vring上,物理网卡驱动分配sbk设置给网卡,网卡DMA,中断触发,在softirq发现物理网卡绑在桥上,查ovs流表找到虚拟机的tap口,把skb放入tap的队列中,叫醒vhost worker,vhost worker醒来一看skb到了tap队列中,把skb拷贝到guest分配的skb上,通知kvm包来了,kvm再中断guest。
好吧,重点就是咱们要分析在QEMU下i440FX和Q35两种芯片的不同,首先Q35支持默认的是pcie slot槽位,而ovmf也就是uefi目前是支持Q35模式的开发包(Q35默认支持uefi,当然也是支持传统bios的,但是这种情况下虚拟机有问题),i440FX支持的是PCI设备,支持传统BIOS,而QEMU模拟的virtio-blk、virtio-net、virtio-pci、virtio-ba...
Qemu中,设备的模拟称为前端,比如e1000,前端与后端通信,后端再与底层通信,我们来分别看看发送和接收处理的流程; 发送: Guest OS在准备好网络包数据以及描述符资源后,通过写TDT寄存器,触发VM的异常退出,由KVM模块接管; KVM模块返回到Qemu后,Qemu会检查VM退出的原因,比如检查到e1000寄存器访问出错,因而触发e1000前端工作...