CenOS(7.2.1511)安装DPDK(17.08)

参考文献:
https://blog.csdn.net/cloudvtech/article/details/80221236
https://www.jianshu.com/p/000b158c3605
https://www.cnblogs.com/allcloud/p/7756625.html
如有侵权,请联系删除

CenOS(7.2.1511)安装DPDK(17.08)_第1张图片

相关版本配置信息

CenOS 7.2.1511
2核2线程 (4 lcores)
内存4GB
3 NICS
DPDK17.08

安装依赖

yum makecache
yum install -y gcc gcc-c++ kernel.x86_64 net-tools kernel-headers kernel-devel
yum install -y numactl-devel.x86_64 numactl-libs.x86_64
yum install -y libpcap.x86_64 libpcap-devel.x86_64
yum install -y pciutils

注意,要下载和自己内核版本相同的内核头文件。用uname -r查看内核版本,用yum info kernel-devel查看是否和自己的内核版本一致,如果一致,则可以通过yum install kernel-devel直接安装,否则可以通过下载特定的rpm包来安装。(对kernel-headers也是同样处理,版本最好保持一致)
例如本文

需要下载3.10.0-327.el7.x86_64版本的内核头文件,可以到这里查找对应版本的rpm包并进行下载(关键词:kernel-devel):

  • 下载安装内核头文件
wget http://vault.centos.org/7.2.1511/os/x86_64/Packages/kernel-devel-3.10.0-327.el7.x86_64.rpm 下载
rpm -ivh kernel-devel-3.10.0-327.el7.x86_64.rpm  安装

如果系统已经安装了较高版本的内核头文件,则需要通过如下命令实现降级:

rpm -Uvh --oldpackage kernel-devel-3.10.0-327.el7.x86_64.rpm

编译时有可能出现找不到内核头文件,则需要重新建立软链接到内核模块

ln -fs /usr/src/kernels/3.10.0-327.el7.x86_64/  /lib/modules/3.10.0-327.el7.x86_64/build

编译安装DPDK

  • 下载
wget http://fast.dpdk.org/rel/dpdk-17.08.1.tar.xz   下载
tar -xvJf dpdk-17.08.1.tar.xz     解压
cd dpdk-stable-17.08.1/       
vi dpdkenv.rc   创建一个设置环境变量的脚本(方便每次重新打开终端运行dpdk或者编译时source)

dpdkenv.rc 内容如下:

export RTE_SDK=/root/dpdk-stable-17.08.1        DPDK的安装目录
export RTE_TARGET=x86_64-native-linuxapp-gcc     DPDK的目标环境目录
  • 修改源码(在虚拟机安装的时候)


    CenOS(7.2.1511)安装DPDK(17.08)_第2张图片
  • 编译

source dpdkenv.rc
make config T=x86_64-native-linuxapp-gcc
sed -ri 's,(PMD_PCAP=).*,\1y,' build/.config
make
make install T=x86_64-native-linuxapp-gcc

DPDK使用

注:每次重启之后都要重新走一遍DPDK的这套流程(环境变量设置、设置userspace I/O态、挂载大页、绑定网卡)

  • Hugepage配置
    一般的常规页大小为4K字节,使用大页时页大小设置为2M或1G字节。修改方式如下:
    对于2M的页,可以在系统启动后申请分配,1G的内存页在系统启动后是无法申请
    对于单NUMA或非NUMA节点的系统,如下命令所示(假设需要1024个2M页,即2GB内存):
    echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
    在一个NUMA机器上,分别在不同node上分配指定数目的内存页:
    echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
    echo 1024 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
    上述命令为每个节点各预留了1024个2M大页,即4GB内存
    要想是挂载即使是重启也永久有效,需要/etc/fstab内添加:
    挂载2M大页:nodev /mnt/huge hugetlbfs defaults 0 0
    挂载1G大页:nodev /mnt/huge_1GB hugetlbfs pagesize=1GB 0 0
  • 设置DPDK使用大页内存
echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages  (1024个2M页)
mkdir /mnt/huge
chmod 777 /mnt/huge
mount -t hugetlbfs nodev /mnt/huge

查看大页内存情况

cat /proc/meminfo | grep Huge  
ls /sys/kernel/mm/hugepages -l 
mount | grep huge
CenOS(7.2.1511)安装DPDK(17.08)_第3张图片

注:
HugePages_Total:系统当前总共拥有的HugePages数目。
HugePages_Free:系统当前总共拥有的空闲HugePages数目。
HugePages_Rsvd:系统当前总共保留的HugePages数目,更具体点就是指程序已经向系统申请,但是由于
程序还没有实质的HugePages读写操作,因此系统尚未实际分配给程序的HugePages数目。
HugePages_Surp:指超过系统设定的常驻HugePages数目的数目。
Hugepagesize:每一页HugePages的大小。

  • 加载内核模块
lsmod  | grep uio         显示已载入系统的模块
modprobe uio_pci_generic
modprobe uio
modprobe vfio-pci
insmod build/kmod/igb_uio.ko 
lsmod  | grep uio


注:卸载模块rmmod igb_uio.ko

  • 绑定网卡
    查看网卡 ip addr
    CenOS(7.2.1511)安装DPDK(17.08)_第4张图片

    查看网卡绑定状态
    ./usertools/dpdk-devbind.py --status
    CenOS(7.2.1511)安装DPDK(17.08)_第5张图片

绑定网卡命令

ifconfig eno33554960 down 
ifconfig eno50332184 down 
./usertools/dpdk-devbind.py --bind=igb_uio  02:02.0 
./usertools/dpdk-devbind.py --bind=igb_uio  02:03.0

查看绑定之后状态

ll /dev/uio*
./usertools/dpdk-devbind.py --status
CenOS(7.2.1511)安装DPDK(17.08)_第6张图片
  • 运行hellworld程序
make -C examples RTE_SDK=$(pwd) RTE_TARGET=build O=$(pwd)/build/examples
./build/examples/helloworld/build/helloworld
CenOS(7.2.1511)安装DPDK(17.08)_第7张图片
  • 运行testpmd
    TestPMD可以使用如下几种不同的转发模式。
  1. 输入/输出模式(INPUT/OUTPUT MODE)
    此模式通常称为IO模式,是最常用的转发模式,也是TestPMD启动时的默认模式。 在IO模式下,CPU内核从一个端口接收数据包(Rx),并将其发送到另一个端口(Tx)。 如果需要的话,一个端口可同时用于接收和发送。
  2. 收包模式(RX-ONLY MODE)
    在此模式下,应用程序会轮询Rx端口的数据包,然后直接释放而不发送。 它以这种方式充当数据包接收器。
  3. 发包模式(TX-ONLY MODE)
    在此模式下,应用程序生成64字节的IP数据包,并从Tx端口发送出去。 它不接收数据包,仅作为数据包源。
    后两种模式(收包模式和发包模式)对于单独检查收包或者发包非常有用。
    除了这三种模式,TestPMD文档中还介绍了其他一些转发模式。

执行命令sudo ./build/app/testpmd –l 0,1,2 –n 4 -- -i
在此例中, –l选项指定了逻辑核。核0用于管理命令行,核1和2将用于转发数据包。 -n选项用于指定系统的内存通道数。–(破折号)分开了EAL参数和应用程序参数。-i选项运行在交互模式(交互模式下通过命令行改变转发配置)

set fwd rxonly   收包模式 
set fwd txonly    发包模式
show  port stats all 查看端口统计信息
clear port stats all  清除端口统计信息
show config fwd  查看转发配置
set nbcore 2   启用两个核转发

查看转发配置 show config fwd


开始转发 start
CenOS(7.2.1511)安装DPDK(17.08)_第8张图片

查看端口统计信息 show port stats all
CenOS(7.2.1511)安装DPDK(17.08)_第9张图片

结束转发 stop
CenOS(7.2.1511)安装DPDK(17.08)_第10张图片

你可能感兴趣的:(CenOS(7.2.1511)安装DPDK(17.08))