目 录
1. 前言 3
2. 实验环境 3
2.1. ONOS环境 3
2.1.1. 环境依赖 3
2.1.2. 本文实验环境 4
2.2. DPDK和OVS编译安装 4
2.2.1. 安装DPDK 4
2.2.2. 安装OVS 4
2.2.3. 配置hugepage 5
2.2.4. 使用DPDK绑定网卡 5
2.2.5. 启动OVS和DPDK 5
2.2.6. 添加OVS网桥和端口 6
2.3. 环境测试 6
2.3.1. 环境搭建 6
1. 前言
OVS是一个高质量的,多层虚拟交换机(网络分层的层),其目的是让大规模网络自动化可以通过编程扩展,同时仍然支持标准的管理接口和协议。Dpdk是X86平台报文快速处理的库和驱动的集合,不是网络协议栈,不提供二层,三层转发功能,不具备防火墙ACL功能,但通过DPDK可以轻松的开发出上述功能。Dpdk的优势是可以将用户态的数据,不经过内核直接转发到网卡,实现加速目的。本文向大家展示了DPDK和OVS环境搭建的过程,同时针对功能进行了测试。
2. 实验环境
2.1. ONOS环境
2.1.1. 环境依赖
DPDK环境:
*Kernel version >= 2.6.34
glibc >= 2.7
memory >= 1024
vcpu = 2*
检查环境的网卡是否被DPDK支持,可以从下面的官网查询:
http://www.dpdk.org/doc/nics
OVS环境:
OVS各版本支持的Linux内核如下,可以根据下表选择适合的Linux系统安装。
2.1.2. 本文实验环境
DPDK版本: dpdk-stable-16.07.1
Ovs版本: Open vSwitch 2.6.1
Linux版本: 3.10.0-123.el7.x86_64
Red Hat版本: 4.8.2-16
2.2. DPDK和OVS编译安装
如果安装环境有OVS,需要卸载重新编译,因为安装OVS+DPDK,OVS编译时需要使用DPDK的库。
2.2.1. 安装DPDK
打开安装目录: cd /home/sdn/
下载安装包: wget http://dpdk.org/browse/dpdk/snapshot/dpdk-16.07.zip
解压安装包: unzip dpdk-16.07.zip
设置全局变量: *export DPDK_DIR=/usr/src/dpdk-16.07
export DPDK_TARGET=x86_64-native-linuxapp-gcc
export DPDK_BUILD=$DPDK_DIR/$DPDK_TARGET*
安装DPDK: make install T=$DPDK_TARGET DESTDIR=install
2.2.2. 安装OVS
打开安装目录: cd /home/sdn
下载安装包: wget http:// openvswitch.org/ releases/ openvswitch-2.6.1.tar.gz
解压安装包: tar -zxvf openvswitch-2.6.1.tar.gz
设置全局变量: export OVS_DIR=/home/sdn/openvswitch-2.6.1
安装OVS: *cd $OVS_DIR
./boot.sh
./configure --with-dpdk=$DPDK_BUILD
make install*
2.2.3. 配置hugepage
1) 修改hugepage的页数为2048
echo ‘vm.nr_hugepages=2048’ > /etc/sysctl.d/hugepages.conf
2) 查看设置的hugepage配置
grep HugePages_ /proc/meminfo
3) 挂载hugepage
mount -t hugetlbfs none /dev/hugepages
2.2.4. 使用DPDK绑定网卡
1) 设置驱动为VFIO
modprobe vfio-pci
2) 绑定物理网卡
$DPDK_DIR/tools/dpdk-devbind.py –bind=vfio-pci 06:00.1
3) 查看网卡绑定状态
$DPDK_DIR/tools/dpdk-devbind.py –status
2.2.5. 启动OVS和DPDK
1) 创建数据库
*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*
2) 启动ovsdb-server
*ovsdb-server –remote=punix:/usr/local/var/run/openvswitch/db.sock \
–remote=db:Open_vSwitch,Open_vSwitch,manager_options \
–pidfile –detach*
3) 首次运行时要创建初始化数据库
ovs-vsctl –no-wait init
4) 启动ovs和dpdk
*export DB_SOCK=/usr/local/var/run/openvswitch/db.sock
ovs-vsctl –no-wait set Open_vSwitch . other_config:dpdk-init=true
ovs-vswitchd unix:$DB_SOCK –pidfile –detach*
2.2.6. 添加OVS网桥和端口
1. 配置流程
1) 增加网桥
ovs-vsctl add-br br4 – set bridge br4 datapath_type=netdev
2) 创建两个DPDK类型的端口(这两个端口与之前添加的DPDK网口顺序一致,是一一对应的)
*ovs-vsctl add-port br4 dpdk0 – set Interface dpdk0 type=dpdk
ovs-vsctl add-port br4 dpdk1 – set Interface dpdk1 type=dpdk*
3) 创建完DPDK端口之后,就会创建一个轮询线程,循环监测DPDK端口,因此ovs-vswitchd进程的CPU利用率会一直保持100%,通过top命令可以查看
4) 创建完可以使用ovs-vsctl show查看
2. 注意事项:
添加网桥之前最好使用ifconfig命令查看一下主机已有的网桥,OVS创建的网桥不能和已有的重复,不然网桥的逻辑端口状态一直在up/down之间跳转。
要创建”netdev” 类型的网桥,否则创建完网桥会报错:could not open network device br0 (Invalid argument)
2.3. 环境测试
2.3.1. 环境搭建
1) 使用OVS连接controller
ovs-vsctl set-controller br4 tcp:192.168.6.253:6653
2) 创建host,下发group和flow表项
Topo图:
Group表:
Flow表:
3) 查看网桥端口流量情况