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
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的目标环境目录
  • 修改源码(在虚拟机安装的时候)


  • 编译

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

注:
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

    查看网卡绑定状态
    ./usertools/dpdk-devbind.py --status

绑定网卡命令

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
  • 运行hellworld程序
make -C examples RTE_SDK=$(pwd) RTE_TARGET=build O=$(pwd)/build/examples
./build/examples/helloworld/build/helloworld
  • 运行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

查看端口统计信息show port stats all

结束转发stop

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容