DPVS学习(一)DPVS安装部署

我主要参考的是官方文档进行的安装,补充了下遇到的问题。官方文档链接:https://github.com/iqiyi/dpvs

1.下载DPVS

git clone https://github.com/iqiyi/dpvs.git
cd dpvs

2.安装DPDK

wget https://fast.dpdk.org/rel/dpdk-17.11.2.tar.xz
tar vxf dpdk-17.11.2.tar.xz

3.DPDK补丁

有一个用于硬件组播的DPDK kni驱动程序的补丁,如果需要就应用它。

//切换到dpvs的路径下
cd <path-of-dpvs>
//复制补丁
cp patch/dpdk-stable-17.11.2/*.patch dpdk-stable-17.11.2/
cd dpdk-stable-17.11.2/
patch -p 1 < 0001-kni-use-netlink-event-for-multicast-driver-part.patch
patch -p 1 < 0002-net-support-variable-IP-header-len-for-checksum-API.patch
patch -p 1 < 0003-enable-pdump-and-change-dpdk-pdump-tool-for-DPVS.patch
patch -p 1 < 0004-patch-dpdk-17.11.2-to-support-rh75-provided-by-Jason.patch

4.dpdk编译安装

下载依赖

yum install -y libpcap-devel

构建dpdk和导入环境变量

cd dpdk-stable-17.11.2/
make config T=x86_64-native-linuxapp-gcc
//Configuration done
make
export RTE_SDK=$PWD

设置大页内存

echo 8192 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
echo 8192 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages

mkdir /mnt/huge
mount -t hugetlbfs nodev /mnt/huge

加载驱动

我用的网卡是ens39绑定dpdk,这里需要pci号。可以用 lspci | grep Eth查询,查询结果如下:

DPVS学习(一)DPVS安装部署

modprobe uio
cd dpdk-stable-17.11.2

insmod build/kmod/igb_uio.ko
insmod build/kmod/rte_kni.ko

./usertools/dpdk-devbind.py --status
ifconfig ens39 down  # assuming ens39 is 0000:02:07.0
./usertools/dpdk-devbind.py -b igb_uio 0000:02:07.0

5.构建dpvs

cd dpdk-stable-17.11.2/
export RTE_SDK=$PWD
cd <path-of-dpvs>

make # or "make -j40" to speed up.
make install

编译时出现问题。提示ipvsadm.c:114:18: 致命错误:popt.h:没有那个文件或目录,需要安装依赖。

yum install popt-devel

Output files are installed to dpvs/bin

DPVS学习(一)DPVS安装部署

dpvs是主程序。

dpip是设置IP地址、路由、vlan、neigh等的工具。

ipvsadm和keepalive来自于LVS,都是经过修改的。

6.启动dpvs

#复制配置文件到etc下
cp conf/dpvs.conf.single-nic.sample /etc/dpvs.conf

#启动
cd <path-of-dpvs>/bin
./dpvs &

#检测是否启动
./dpip link show

启动时报错:EAL: Error reading from file descriptor 21: Input/output error

原因:在虚拟机添加的网卡,dpdk不支持导致的。需要修改一行代码,跳过dpdk pci 检查。

#修改前
pci_intx_mask_supported(udev->pdev)
#修改后
pci_intx_mask_supported(udev->pdev) || true
make clean
#重新编译
make
rmmod igb_uio
insmod build/kmod/igb_uio.ko

建议用物理机,我用的虚拟机会有很多问题。包括内存不足,队列不够等问题。

启动正常如下:

DPVS学习(一)DPVS安装部署

 

上一篇:DPDK在DPVS中的应用及原理分析


下一篇:dpdk进程启动提示无法分配足够的连续大页内存问题处理