OVS DPDK vhost-user搭建全过程(四十四)

系统: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
Open vSwitch(OVS)是一个开源的虚拟交换机软件,用于实现网络交换功能。它提供了一套灵活的网络转发和流量处理机制,并且可以与不同类型的网络虚拟化技术(如OpenStack、KVM等)集成。 OVS-DPDK是OVS的一个变种,使用了Data Plane Development Kit(DPDK)来加速数据包处理。DPDK是一个用于快速数据包处理的开源项目,它提供了一组用户空间的库和驱动程序,使网络应用程序能够绕过操作系统内核,直接访问网络硬件。通过与DPDK集成,OVS-DPDK可以实现更高的数据包处理性能和更低的延迟。 OVS-DPDK具有以下特性: 1. 高性能:使用DPDK加速,可以处理更多的数据包以及更低的延迟。这使得OVS-DPDK非常适合需要高性能的虚拟化环境。 2. 大规模网络:OVS-DPDK支持大规模网络环境,可以处理数十万个虚拟机和大量的网络流量。 3. 高级流量管理:OVS-DPDK提供了丰富的流量管理功能,如流量分类、QoS(Quality of Service)、ACL(Access Control List)等,可以根据应用需求对流量进行精细控制和管理。 4. 灵活的虚拟化集成:OVS-DPDK可以与不同类型的虚拟化技术(如OpenStack、KVM等)集成,提供灵活的网络虚拟化解决方案。 总之,OVS-DPDK是在传统的OVS基础上加入了DPDK加速技术,以提供更高性能和更低延迟的网络转发和流量处理能力。这使得它成为虚拟化环境中处理大规模网络流量的理想选择。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值