版本要求
DPDK18.11.10
Open vSwitch 2.12.1
linux kernel:3.10.0-1160.6.1.el7.x86_64(可使用CentOS7.7 搭载的内核版本完全一致)
(对于DPDK和OVS的版本,两者的版本是要对应的,不能随便搭配,具体的可以自行搜索。)
对于CentOs内核版本的说明
可以先进入这个网站找到要求的内核版本对应的release版本号
再进入这个网站找到对应的Archived Versions,点击后面的Tree即可下载对应的CentOs
编译安装DPDK
先做一下准备工作,以防后面会遇到一些问题
- 安装相关依赖
$ yum install numactl
$ yum install numactl-devel
$ yum install gcc
$ yum install gcc kernel-devel-$(uname -r)
- 查看内核
cd /usr/src/kernels/
我这里遇到的问题是,打开后,发现竟然是个空文件夹,原来是没有安装kernel-devel
解决方法:
$ yum install kernel-devel -y
然后查看一下内核ll
3. 进入/lib/modules/3.10.0-1062.el7.x86_64 查看
$ cd /lib/modules/3.10.0-1062.el7.x86_64
$ ll
如果有闪烁,且有红色的字体,则说明这里有问题,不然后面make时会出现make: *** /lib/modules/3.10.0-1062.el7.x86_64/build: No such file or directory.的问题
解决方法:
$ rm -rf build
$ ln -s /usr/src/kernels/3.10.0-1160.49.1.el7.x86_64 /lib/modules/3.10.0-1062.el7.x86_64/build
正确的显示应该是这样的:
4. 安装DPDK
$ wget http://fast.dpdk.org/rel/dpdk-18.11.10.tar.gz
$ tar -zxvf dpdk-18.11.10.tar.gz
$ cd dpdk-stable-18.11.10
$ mkdir -p /usr/src/dpdk
$ make config T=x86_64-native-linuxapp-gcc
*作为后面编译ovs使用的dpdk库*
$ make install T=x86_64-native-linuxapp-gcc DESTDIR=/usr/src/dpdk
$ make install T=x86_64-native-linuxapp-gcc DESTDIR=/usr //将dpdk安装在当前系统内,可以在安装目录外使用dpdk的命令
因为DPDK需要绑定网卡、配置大页等操作,参考了别人的教程自己还是搞不明白,然后找到了下面的方式安装的过程可以一并解决。也可以参考其他教程,会比下面的方式更详细:基于DPDK的OVS安装与配置
$ 进入dpdk源码的文件夹
$ cd usertools
./dpdk-setup.sh
选择15 x86_64-native-linuxapp-gcc
选择18 insert IGB UIO module
选择22 Setup hugepafe mappings for NUMA systems
输入:1024
选择23 Display cuerrent Ethernrt/Crypto device settings
会显示挂载在kernel上的网卡信息
需要将你想挂载到DPDK上的网卡down掉$ ifconfig ens38 down
ens38就是你想要的挂载的网卡(这里可能有人会和我一样,发现只有一个网卡,建议不要将这个网卡挂载到dpdk上,要提前添加一个新的空闲网卡,具体方法可以参考其他教程)
后续实现应该是需要挂载两张网卡的,所以提前添加两个空闲网卡挂载到dpdk。
选择24 Bind Ethernet/Crypto device to IGB UIO module
输入ens38(即你刚才down掉的网卡)
选择35 退出
- 测试有没有安装成功
$ 还是回到dpdk的安装目录
$ cd examples/helloworld
$ make
$ cd build
$./helloworld
编译安装ovs
$ wget http://openvswitch.org/releases/openvswitch-2.12.1.tar.gz
$ tar -zxvf openvswitch-2.12.1.tar.gz
$ cd openvswitch-2.12.1/
$ ./boot.sh
- ./boot.sh报错
./boot.sh:行2: autoreconf: 未找到命令
解决:yum install autoconf automake libtool
$ ./configure --with-dpdk=/usr/src/dpdk
$ make
$ make install
- 接下来,按照cocosketch实验指导中写的,将ovs-doif-netdev文件夹下的所有.h文件,复制到openvswitch-2.12.1/lib/下
- 将dpif-netdev.patch文件也复制到openvswitch-2.12.1/lib/下
$ patch dpif-netdev.c dpif-netdev.patch
- 重新编译ovs
如果在make时出现这样的报错:
lib/dpif-netdev.c:86:20:fatal error: rte_ip.h:No such file or directory
compilation terminated.
因为rte_ip.h是dpdk中的的库文件,所以一定是dpdk没有和ovs正确链接上,到这一步有什么补救措施我也不太清楚,我采取的方式是:从头再来一遍(尴尬)
参考:
网卡绑定和解绑
dpdk+ovs安装和编译
Ovs+Dpdk简单实践
openvswitch2.11.0修改源码后重新编译
虚拟机的ovs+dpdk搭建
Open vSwitch with DPDK(官网)