我尝试使用以下命令为我的虚拟机创建一个点击设备
tap0
vm1
:
$ tunctl -t tap0 -u root
$ brctl addif br0 tap0
$ ifconfig tap0 up
检查其频道时,出现以下错误:
$ ethtool -l tap0
Cannot get device channel parameters
: Operation not supported
我想也许我创建的方法
tap0
不正确,但我不知道正确的方法。
如有任何帮助,我们将不胜感激。
关于这个问题,我还是不知道如何实现。但我找到了另一种方法来使用
qemu-kvm
为虚拟机创建多队列分流设备。这是我的脚本:
#!/bin/bash
qemu-kvm -name vm1 -smp cpus=8 -m 8192 \
-drive file=/opt/kvm/vm1.qcow2,if=virtio \
-netdev tap,id=dev0,script=no,downscript=no,ifname=tap0,vhost=on,queues=8 \
-device virtio-net-pci,netdev=dev0,mac=52:54:00:56:78:90,mq=on,vectors=18 \
-daemonize
if [ $? -eq 0 ];then
sleep 5
brctl addif br1 tap0
ifconfig tap0 up
fi
该脚本创建一个具有 8 个队列的分接设备
tap0
,将 tap0
添加到桥 br0
,并设置 tap0
。
您可以在虚拟机中使用
ethtool -l [ifname]
,这是我的输出:
$ ethtool -l eth0
Pre-set maximums:
RX: 0
TX: 0
Other: 0
Combined: 8
Current hardware settings:
RX: 0
TX: 0
Other: 0
Combined: 8 # current has 8 queues enabled
完成。
我使用以下命令来设置多队列 tun0 设备。
sudo ip tuntap add dev tap0 mode tap group netdev multi_queue
然后我使用以下网络设置运行 QEMU VM。
NETWORK=" -netdev tap,ifname=${TAP:-tap0},id=n1,script=no,downscript=no,queues=4 -device virtio-net-pci,mac=AA:BB:CC:DD:CA:B1,netdev=n1,mq=on,vectors=18"
重要选项是
virtio-net-pci
和 mq=on,vectors=18
。
有关向量参数的信息https://www.linux-kvm.org/page/Multiqueue
另外,为了防止 QEMU 尝试管理 tap0,我禁用了脚本
script=no,downscript=no
我的结果
root@ubuntu:/shared# ethtool -l ens5
Channel parameters for ens5:
Pre-set maximums:
RX: n/a
TX: n/a
Other: n/a
Combined: 4
Current hardware settings:
RX: n/a
TX: n/a
Other: n/a
Combined: 2
两个核心之间的中断分配(我用两个核心运行vm)
root@ubuntu:/shared# cat /proc/interrupts |grep virtio.-input
28: 20079840 0 PCI-MSI 81921-edge virtio1-input.0
30: 1 20235243 PCI-MSI 81923-edge virtio1-input.1
32: 0 0 PCI-MSI 81925-edge virtio1-input.2
34: 0 0 PCI-MSI 81927-edge virtio1-input.3