vhost-net原理分析(一)
基本流程:
首先在libvirt中会去打开一个tap设备(virNetDevTapCreate),然后记录其fd。
在添加网卡的时候会传入如下的两个设备给qemu:
-netdev tap,fd=43,id=hostnet0,vhost=on,vhostfd=44
-device virtio-net-pci,pci_hotpluggable=on,netdev=hostnet0,id=net0 -----
vhost_net_init中会去初始化网卡后端,使用net->backend去记录backend fd。
qemu使用vhost_net_set_backend函数把fd传入到内核vhost中。
我们qemu或是vhost都是把数据发给tap设备就完了。 也就是vhost只管把读写这个fd就好了。
ovs的处理会复杂一点,当tap收到数据的时候会被OVS hook,在netdev_frame_hook中对数据进行转发。
qemu与ovs的通信能否更为简单呢? 经过tap这种虚拟网卡协议栈性能肯定会差一些。

浙公网安备 33010602011771号