本文参考了https://gist.github.com/mcastelino/43cc733e53d65ef67452ecaf78e936c2
vhost-net是一种较virtio-net更为高效的网络虚拟化技术。在qemu中使用vhost-net非常容易,只需在 -netdev tap,之后加上vhost=on。但是默认情况下host只会产生一个vhost线程,当虚拟机有多个核心时无法发挥最大的效率。下面展示一下如何创建与vcpu数量匹配的vhost线程数。
qemu \
...
-netdev tap,fd=3,4,id=hostnet0,vhost=on,vhostfd=5,6 3<>$"$tapdev" 4<>$"tapdev" 5<>/dev/vhost-net 6<>/dev/vhost-net
上面的tapdev是macvtap。创建macvtap的方法:
ip link del testbr
ip link del testvlan
ip link del testtap
ip link add name testbr type bridge
ip link add link testbr name testvlan type macvlan mode bridge
ip addr add 172.20.0.1/16 dev testvlan
ip link set dev testvlan up
ip link set dev testbr up
ip link add link testbr name testtap type macvtap mode bridge
ip link set testtap up
tapindex=$(< /sys/class/net/testtap/ifindex)
tapdev=/dev/tap"$tapindex"
不使用macvtap的方法我没找到,因为一般的tap设备不会产生对应的字符设备。