欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

OvS-DPDK源码安装+实践的超完整教程

程序员文章站 2022-07-07 14:01:58
...

最近需要扩展OvS-DPDK交换机,最基础的要学会系统的搭建OvS-DPDK环境,故记录了在摸索过程中的笔记,包括从OVS-DPDK的安装验证,到简单的实践,小白菜也可以动手实现的超完整版教程~

OvS-DPDK

相比较于Native OvS,减少了内核协议栈的处理、大量cpu中断及上下文切换、锁等,性能提高了不少。对流量的处理都在用户空间完成,通过特殊的驱动可以直接从网卡收数据包交给用户空间处理,不经过内核。

搭建环境

由于硬件不足,先用virtualbox虚拟机搭建环境调试。

  • Ubuntu16.04.6-server
  • Ovs2.11.0
  • DPDK18.11.0

前期准备

安装必需工具和依赖

apt-get update
apt-get install -y gcc python numactl libnuma-dev make autoconf automake libtool build-essential openssl desktop-file-utils groff graphviz checkpolicy python-sphinx python-twisted-core
apt-get install -y build-essential

DPDK安装

  • 源码下载
wget http://fast.dpdk.org/rel/dpdk-18.11.tar.xz
tar xf dpdk-18.11.tar.xz
  • 执行脚本安装
vim dpdk-install.sh
bash ./dpdk-install.sh
#!/bin/sh
export DPDK_DIR=/usr/src/dpdk-18.11
cd $DPDK_DIR
export DPDK_TARGET=x86_64-native-linuxapp-gcc
export DPDK_BUILD=$DPDK_DIR/$DPDK_TARGET
make install T=$DPDK_TARGET DESTDIR=install

注意,DESTDIR指定安装目录。 如果没有T参数和DESTDIR参数或者环境变量,默认安装到/usr/local下面。
这里的DESTDIR=install,会使得DPDK安装目录变成/usr/src/dpdk-18.11/install;即当前目录下的install文件夹。也可以换成DESTDIR=/usr/local或者其他目录。

  • 验证,安装完成会输出complete信息

静态库:在/usr/src/dpdk-stable-17.11.3/install/lib下面可以看到libdpdk.a以及所有以librte_开头的文件

头文件在/usr/src/dpdk-stable-17.11.3/install/include/dpdk目录下。

OvS-DPDK安装

  • 源码下载
wget https://www.openvswitch.org/releases/openvswitch-2.11.0.tar.gz
tar -zxvf openvswitch-2.11.0.tar.gz
  • 执行安装脚本安装
vim dpdk-install.sh
bash ./dpdk-install.sh
#!/bin/sh
export OVS_DIR=/usr/src/openvswitch-2.11.0
export DPDK_DIR=/usr/src/dpdk-18.11
export DPDK_TARGET=x86_64-native-linuxapp-gcc
export DPDK_BUILD=$DPDK_DIR/$DPDK_TARGET
cd $OVS_DIR
./configure --with-dpdk=$DPDK_BUILD
make
make install

设置大页内存

  • 设置大页, 共512个hugepage,每个page 2M,所以hugepages就占用1G内存
echo 512 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
mkdir /mnt/huge
mount -t hugetlbfs nodev /mnt/huge
# 可以验证是否设置成功
grep Huge /proc/meminfo
  • 挂载
mount -t hugetlbfs none /dev/hugepages
  • 加载uio驱动
    官网文档推荐用vfio驱动,但是由于我用的虚拟机不支持虚拟化,就直接用uio了。
    • 绑定的网卡不能是Active的,如果是需要ifconfig把它down了之后再绑定
    • –bind的参数igb_uio,默认是使用e1000驱动
    • 绑定成功后可以看到绑定了DPDK的网卡和非DPDK的网卡
export DPDK_DIR=/usr/src/dpdk-18.11
modprobe uio
modprobe uio_pci_generic
insmod $DPDK_DIR/x86_64-native-linuxapp-gcc/kmod/igb_uio.ko
$DPDK_DIR/usertools/dpdk-devbind.py --status
$DPDK_DIR/usertools/dpdk-devbind.py --bind=igb_uio 0000:00:08.0
# $DPDK_DIR/usertools/dpdk-devbind.py --bind=igb_uio enp0s8
$DPDK_DIR/usertools/dpdk-devbind.py --status

启动Ovs-dpdk

  • 配置&启动数据库
  • 设置Ovs-dpdk参数
  • 启动守护进程
#!/bin/sh
export DPDK_DIR=/usr/src/dpdk-18.11
export OVS_DIR=/usr/src/openvswitch-2.11.0
cd $OVS_DIR
mkdir -p /usr/local/etc/openvswitch
mkdir -p /usr/local/var/run/openvswitch
ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema
mkdir -p /usr/local/var/log/openvswitch
ovs-vsctl --no-wait init
ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,Open_vSwitch,manager_options --private-key=db:Open_vSwitch,SSL,private_key --certificate=db:Open_vSwitch,SSL,certificate --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert  --pidfile --detach --log-file

export PATH=$PATH:/usr/local/share/openvswitch/scripts
export DB_SOCK=/usr/local/var/run/openvswitch/db.sock
ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true
ovs-ctl --no-ovsdb-server --db-sock="$DB_SOCK" start

验证结果

$ovs-vsctl get Open_vSwitch . dpdk_initialized
true

$ovs-vswitchd --version
ovs-vswitchd (Open vSwitch) 2.11.0
DPDK 18.11.0

$ovs-vsctl get Open_vSwitch . dpdk_version
"DPDK 18.11.0"
  • 创建网桥br0,并绑定DPDK端口
ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev
ovs-vsctl add-port br0 myportnameone -- set Interface myportnameone type=dpdk options:dpdk-devargs=0000:06:00.0

OvS-DPDK源码安装+实践的超完整教程

参考网站&文档

DPDK官网
OvS官网
Ovs-dpdk最新官方文档

相关标签: ovs linux c语言