tap网卡
根据网页Getting Started Guide — Project ACRN™ 3.4-unstable documentation,我们可以知道安装完ACRN之后,有一个使用systemd-networkd初始化网卡的命令。这时候会创建一个网桥,叫做acrn-br0。还会有tap0,这个tap0是我们可以去分配给VM的一个桥接的网卡
例如,下面的launch脚本中创建了一个RT_VM1,使用了tap0这个网卡。但是tap0只能被一个VM所使用,也就是VM1如果使用了tap0,那么VM2就无法使用tap0了。
# Invoking ACRN device model
dm_params=(
`add_cpus 8 16`
-m 4096M
--ovmf /usr/share/acrn/bios/OVMF.fd
`add_virtual_device 0:0 hostbridge`
--virtio_poll 1000000
`add_virtual_device 3 virtio-console @stdio:stdio_port`
`add_virtual_device 4 virtio-blk /home/acrn/acrn-work/eci-test.img`
--rtvm
--lapic_pt
`add_logger_settings console=4 kmsg=3 disk=5`
-s 5,virtio-net,tap=tap0
-s 9,virtio-blk,/dir/test.img
POST_RT_VM1
)
对于多个VM需要使用网卡的情况,我们需要添加tap1 tap2甚至tap3
$ cd /etc/systemd/network
$ ls
20-static.network 50-acrn.netdev 50-acrn.network 50-eth.network 50-tap0.netdev
我们创建一个50-tap1.netdev,内容如下
我配的是静态ip,所以关闭了所有的dhcp
重启电脑后,你就可以使用tap1给别的VM了
passthru 网卡
tap的问题在于两个VM直接存在较大的延迟,比如VM1用tap0,VM2用tap1,两者互相ping的延迟在2ms到5ms之间,对于工业上的应用可能无法满足。
这时候我们就需要把网卡passthru给VM了,让VM独占该网卡。比如下面可以看到vm独占了一个02:00.0的网卡
另一个win10的VM独占了03:00.0这个网卡
对应到脚本上就是这个。我们添加设备可以不用重新编译acrn-hypervisor,直接在脚本上添加对应的代码即可。
现在两个VM互相之间ping,小于1ms了。