DPDK-虚拟机配置网卡多队列

配置网卡多队列

1.修改虚拟机设置

(1)关闭虚拟机,修改虚拟机设置

CPU设置了4个,故后面eth0网卡有4个队列

 

支持多队列网卡(eth0)和用作ssh的网卡(eth1)不能都是桥接模式,否则请求eth0对应IP时,触发的是eth1的中断。

(2)打开虚拟机配置文件 Ubuntu-1604-server.vmx

修改或添加上面4个字段,ethernet0是多队列网卡,ethernet1是ssh网卡。

vmware的vmxnet3支持网卡多队列。

 2.配置网络

上面只添加了两个网卡,故设置两个接口就可以。

sudo vim /etc/network/interfaces,输入

auto eth0
iface eth0 inet dhcp

auto eth1
iface eth1 inet dhcp

虚拟机网卡接口一般是ensXX,为了方便后面写代码这里改成了ethXX。为了IP不变,ssh网卡配置成静态IP。

3.设置巨页

sudo vim /etc/default/grub

如果是虚拟机:

GRUB_CMDLINE_LINUX改成

GRUB_CMDLINE_LINUX="find_preseed=/preseed.cfg noprompt net.ifnames=0 biosdevname=0 default_hugepagesz=2M hugepagesz=2M hugepages=1024 isolcpus=0-2"

如果是物理机:

default_hugepages=1G hugepagesz=1G hugepages=20 isolcpus=0-7

sudo update-grub

重启

注意如果CPU核心数小于isolcpus+1会导致开机失败。

4.设置网卡队列的CPU亲缘性

启动虚拟机,ifconfig -a可以看到多了个多队列网卡eth0,但是未启动

 

启动eth0:ifup eth0

查看网卡队列中断号:cat /proc/interrupts | grep eth

可以看到eth0有4个网卡队列eth0-rxtx-0、eth0-rxtx-1、eth0-rxtx-2、eth0-rxtx-3,对应的中断号分别是56、57、58、59。这里虚拟机有多少个CPU就会有多少个队列,如果你有8个CPU则设置亲缘性时要设置8个。

设置中断号的亲缘性:

root下:

echo 1 > /proc/irq/56/smp_affinity
echo 2 > /proc/irq/57/smp_affinity
echo 4 > /proc/irq/58/smp_affinity
echo 8 > /proc/irq/59/smp_affinity

 上面操作的目的是将4个网卡队列各自绑定到一个CPU。

5.设置nginx CPU亲缘性

设置每个worker绑定到一个CPU:

cd /usr/local/nginx

vim ./conf/nginx.conf

worker_processes  4;
# worker1使用1号CPU,worker2使用2号CPU...
worker_cpu_affinity 00000001 00000010 00000100 00001000;

启动nginx:./sbin/nginx -c ./conf/nginx.conf 

6.另一台机器用wrk压测

wrk连接eth0对应IP

wrk -c100 -d30s -t50 http://192.168.2.199:8888

 

可以看到eth0有4个队列,每个队列有一个中断号(56-59)。4个队列的中断数一直增加,并且只通知各自绑定的CPU。第2列到第5列分别是CPU0,CPU1,CPU2,CPU3。

注意:

压测客户端(wrk/ab)跟服务器不能是同一台物理机或同一个虚拟机,否则HTTP请求不能触发网卡中断。

可以压测客户端在windows主机,服务器是主机的linux虚拟机。

也可以压测客户端是主机的linux虚拟机A,服务器是主机的linux虚拟机B。

到此配置网卡多队列就完成了。

猜你喜欢

转载自blog.csdn.net/ET_Endeavoring/article/details/120154397
今日推荐