DPDK 虚拟机配置网卡多队列

  原文链接:https://blog.csdn.net/et_endeavoring/article/details/120154397

  配置网卡多队列

  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,输入

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

  3.设置巨页

  sudo vim /etc/default/grub

  如果是虚拟机:

  GRUB_CMDLINE_LINUX改成

  如果是物理机:

  

  重启

  注意如果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下:

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

  5.设置nginx CPU亲缘性

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

  cd /usr/local/nginx

  vim https://zhuanlan.zhihu.com/p/conf/nginx.conf

  

  启动nginx:https://zhuanlan.zhihu.com/p/sbin/nginx -c https://zhuanlan.zhihu.com/p/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。

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

  Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能 系统性学习课程Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化 学习视频教程

  DPDK 学习资料、教学视频和学习路线图 分享有需要的可以自行添加学习交流 群973961276 获取