我是靠谱客的博主 风中大叔,最近开发中收集的这篇文章主要介绍OVS DPDK vhost-user搭建全过程(四十四)Install DPDKInstall OVSSetup OVS with DPDK datapathSetup the GuestUninstall the DPDKUninstall the OVS,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

系统:ubuntu14.04.1
系统:centos7
内核:4.4.0
qemu : >=2.7

Install DPDK

1. Download DPDK

cd /usr/src/
wget http://fast.dpdk.org/rel/dpdk-16.07.2.tar.xz
tar xf dpdk-16.07.2.tar.xz
export DPDK_DIR=/usr/src/dpdk-stable-16.07.2
cd $DPDK_DIR

2. Configure and Install DPDK

注意:以下有些操作DPDK提供了工具供使用者快捷配置,在dpdk/tools/dpdk-setup.sh

export DPDK_TARGET=x86_64-native-linuxapp-gcc
export DPDK_BUILD=$DPDK_DIR/$DPDK_TARGET
make -j8 install T=$DPDK_TARGET DESTDIR=install

Install OVS

1. Download OVS

cd /usr/src
wget http://openvswitch.org/releases/openvswitch-2.6.6.tar.gz
tar -zxvf openvswitch-2.6.6.tar.gz
export OVS_DIR=/usr/src/openvswitch-2.6.6

2. Install OVS dependencies

ubuntu

sudo apt-get update

sudo apt-get install build-essential libssl-dev linux-headers-$(uname -r) graphviz autoconf automake bzip2 debhelper dh-autoreconf libssl-dev libtool openssl procps python-all python-qt4 python-twisted-conch python-zopeinterface python-six dkms module-assistant ipsec-tools racoon  libc6-dev  module-init-tools  netbase  python-argparse  uuid-runtime automake openssl libcap-ng-dev python-pip gcc

sudo pip install six

参考链接:https://www.jianshu.com/p/107bf045451b

centos

yum -y install make gcc openssl-devel autoconf automake rpm-build redhat-rpm-config python-devel openssl-devel kernel-devel kernel-debug-devel libtool wget

3. Configure and Install OVS

cd $OVS_DIR && ./boot.sh && ./configure --with-dpdk=$DPDK_BUILD
make -j8 install

注意:建议将所有环境变量保存到/etc/profile中,这样重启之后依旧可以使用,如

vi /etc/profile
export DPDK_DIR=/usr/src/dpdk-stable-16.07.2
export DPDK_TARGET=x86_64-native-linuxapp-gcc
export DPDK_BUILD=/usr/src/dpdk-stable-16.07.2/x86_64-native-linuxapp-gcc
export OVS_DIR=/usr/src/openvswitch-2.6.6
export RTE_SDK=$DPDK_DIR
export RTE_TARGET=$DPDK_TARGET
export DB_SOCK=/usr/local/var/run/openvswitch/db.sock
source /etc/profile

Setup OVS with DPDK datapath

1. Setup Hugepages

echo 'vm.nr_hugepages=2048' > /etc/sysctl.d/hugepages.conf

执行sysctl -p命令以启用hugepages参数。

sysctl -p

验证配置

cat /proc/meminfo | grep Huge

Mount hugepages

mkdir -p /dev/hugepages
mount -t hugetlbfs none /dev/hugepages

大页内存有时不会自动释放,需要手动释放,杀死使用大页的进程后(这里是ovs和qemu的相关进程),卸载大页再挂载

umount /dev/hugepages
mount -t hugetlbfs none /dev/hugepages

注意:有可能出现大页内存不够的情况,根据系统设置合适的大页内存大小,需要留够足够的内存给系统其他软件使用。

参考链接:https://www.cnblogs.com/brucekun/p/9469209.html

2. Setup DPDK devices using VFIO

要求内核版本>=3.6.0

uname -r

主板支持VT-x、VT-d

dmesg | grep -e DMAR -e IOMMU

内核支持VT-x、VT-d

cat /proc/cmdline | grep iommu=pt
cat /proc/cmdline | grep intel_iommu=on

如果没有显示,需要进行如下配置:

vi /etc/default/grub

ubuntu

添加配置信息:添加iommu=pt intel_iommu=on到文件中的GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"行

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"//原文件的配置信息
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash iommu=pt intel_iommu=on"//添加配置信息

更新配置信息并重启

sudo grub-mkconfig -o /boot/grub/grub.cfg 
sudo reboot 

centos

添加配置信息:添加iommu=pt intel_iommu=on到文件中的GRUB_CMDLINE_LINUX="quiet splash"行

GRUB_CMDLINE_LINUX="quiet splash"//原文件的配置信息
GRUB_CMDLINE_LINUX="quiet splash iommu=pt intel_iommu=on"//添加配置信息

更新配置信息并重启

sudo grub2-mkconfig -o /boot/grub2/grub.cfg 
sudo reboot

加载vfio模块

modprobe vfio-pci
sudo /usr/bin/chmod a+x /dev/vfio
sudo /usr/bin/chmod 0666 /dev/vfio/*
$DPDK_DIR/tools/dpdk-devbind.py --bind=vfio-pci eth1
$DPDK_DIR/tools/dpdk-devbind.py --status

如果eth1是up的,绑定eth1会失败,需要

ifconfig eth1 down

此时如果你的主机只有一个网卡则就会断网了,使用ssh需要注意。

注意:vfio模块每次重启就消失了,所以一旦重启记得重新执行加载vfio操作

参考链接:https://www.cnblogs.com/vancasola/p/9378970.html

3. Setup OVS

创建DB

mkdir -p /usr/local/etc/openvswitch
mkdir -p /usr/local/var/run/openvswitch
rm /usr/local/etc/openvswitch/conf.db
ovsdb-tool create /usr/local/etc/openvswitch/conf.db  
       /usr/local/share/openvswitch/vswitch.ovsschema

启动ovsdb-server

ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock 
         --remote=db:Open_vSwitch,Open_vSwitch,manager_options 
         --pidfile --detach --log-file

初始化DB

ovs-vsctl --no-wait init

启动vswitchd

export DB_SOCK=/usr/local/var/run/openvswitch/db.sock
ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-socket-mem=2048
ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true
ovs-vswitchd unix:$DB_SOCK --pidfile --detach --log-file

注意:日志文件的目录就在/usr/local/var/log/openvswitch里

创建bridge和dpdk设备

ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev
ovs-vsctl add-port br0 dpdk0 -- set Interface dpdk0 type=dpdk

配置br0地址

当eth0从内核驱动卸载之后,被dpdk0接管,eth0的ip也就消失了,此时我们可以将eth0的ip地址绑定到br0上

ifconfig br0 10.10.27.165/24 up

再配置一下网关,即可连接外网

ip route add default via 10.10.26.1 dev br0

dpdk0就是在网卡上轮询的设备,我们再创建一个vhost-user设备,供vm使用

ovs-vsctl add-port br0 vhost-client-1 -- set Interface vhost-client-1 type=dpdkvhostuserclient options:vhost-server-path=/home/bob/openvswitch-2.6.6/vhost-client-1

ovs-vsctl add-port br0 vhost-client-2 -- set Interface vhost-client-2 type=dpdkvhostuserclient options:vhost-server-path=/home/bob/openvswitch-2.6.6/vhost-client-2

此时我们查看下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
不配置流表,使用OVS默认即可。

Setup the Guest

OVS提供了两种vhost user端口:

  1. vhost-user (dpdkvhostuser ports)
  2. vhost-user-client (dpdkvhostuserclient ports)

第一种是将ovs看成服务端,vm看成客户端,但是这种情况如果ovs崩溃了,则vm也无法正常运行,故已经废弃。我们采用第二种方法,将ovs看成客户端,vm看成服务端。要求:QEMU version >= 2.7

先提前将虚拟机安装好

qemu-img create -f qcow2 /home/bob/images/ubuntu1.qcow2 20G
qemu-img create -f qcow2 /home/bob/images/ubuntu2.qcow2 20G

安装虚拟机系统

qemu-system-x86_64 -m 512M -enable-kvm -cpu host  /home/bob/images/ubuntu1.qcow2 -cdrom /home/bob/isoes/ubuntu-12.04-server-amd64.iso

qemu-system-x86_64 -m 512M -enable-kvm -cpu host  /home/bob/images/ubuntu2.qcow2 -cdrom /home/bob/isoes/ubuntu-12.04-server-amd64.iso

然后再将虚拟机挂载到vhost-user-client进行通信

qemu-system-x86_64 -name u1 -cpu host -enable-kvm -m 512M -object memory-backend-file,id=mem,size=512M,mem-path=/dev/hugepages,share=on -numa node,memdev=mem -mem-prealloc -smp sockets=1,cores=2 -drive file=/home/bob/images/ubuntu1.qcow2 -chardev socket,id=char1,path=/home/bob/openvswitch-2.6.6/vhost-client-1,server -netdev type=vhost-user,id=mynet1,chardev=char1,vhostforce -device virtio-net-pci,mac=00:00:00:00:00:01,netdev=mynet1,mrg_rxbuf=off -vnc :0

qemu-system-x86_64 -name u2 -cpu host -enable-kvm -m 512M -object memory-backend-file,id=mem,size=512M,mem-path=/dev/hugepages,share=on -numa node,memdev=mem -mem-prealloc -smp sockets=1,cores=2 -drive file=/home/bob/images/ubuntu2.qcow2 -chardev socket,id=char2,path=/home/bob/openvswitch-2.6.6/vhost-client-2,server -netdev type=vhost-user,id=mynet2,chardev=char2,vhostforce -device virtio-net-pci,mac=00:00:00:00:00:02,netdev=mynet2,mrg_rxbuf=off -vnc :1

通过ubuntu上remmina remote desktop client软件打开即可正常运行虚拟机

Uninstall the DPDK

只需要将$DPDK_DIR下的x86_64-native-linuxapp-gcc删除,再重新安装即可

rm -rf /usr/src/dpdk-stable-16.07.2/x86_64-native-linuxapp-gcc

删除之后重新安装DPDK和OVS即可使用

Uninstall the OVS

cd $OVS_DIR && make uninstall && make distclean

最后

以上就是风中大叔为你收集整理的OVS DPDK vhost-user搭建全过程(四十四)Install DPDKInstall OVSSetup OVS with DPDK datapathSetup the GuestUninstall the DPDKUninstall the OVS的全部内容,希望文章能够帮你解决OVS DPDK vhost-user搭建全过程(四十四)Install DPDKInstall OVSSetup OVS with DPDK datapathSetup the GuestUninstall the DPDKUninstall the OVS所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部