DPDK安装配置(附脚本)及示例程序运行

去年曾经写过一篇在虚拟机里配置DPDK的文章,当时DPDK还没有支持ubuntu16.04,而且当时还不会shell编程,总体来说还是比较幼稚的。今天整理了一下写了这篇ubuntu16.04实体机下的DPDK配置博文。

DPDK是因特尔推出的数据平面开发组件,主要是提供了一个高效的用户态网卡驱动,改以往网卡驱动采用的中断方式,为绑定线程轮询网卡的高效模式,可以大幅提高吞吐率。DPDK最新版的压缩包可以去官网下载,http://dpdk.org/download. 我这里用的环境是ubuntu16.04,DPDK版本是16.11.1

在安装DPDK之前我们需要安装另一个linux下另一个跟网络数据包相关的函数库——libpcap,命令行抓包软件tcpdump也是基于这个库实现的。

1. 安装libpcap

去官网 http://www.tcpdump.org/#latest-releases 下载libpcap的压缩包。我下的是libpcap-1.8.1.
先安装依赖库m4、bison、flex:

sudo apt-get install m4 bison flex

在特权用户下,安装libpcap:

cd libpcap-1.8.1
./configure
make
make install

安装成功,但是后面安装DPDK的时候却提示找不到libpcap.so.1,因为libpcap.so.1默认安装到了/usr/local/lib下,我们做一个符号链接到/usr/lib/下即可。

sudo ln -s /usr/local/lib/libpcap.so.1 /usr/lib/libpcap.so.1

2. 安装DPDK

将压缩包解压缩,按照下面的步骤安装:

注意,以下操作中有些涉及特权级的,如果operation denied,加上sudo即可

2.1. 配置并编译DPDK,架构为64位x86linux系统,gcc编译
make config T=x86_64-native-linuxapp-gcc
sed -ri 's,(PMD_PCAP=).*,\1y,' build/.config
make
编译.png

编译过程如上图所示,其中如果有错,多数是由于依赖项,安装上依赖项就可以了。

2.2. 预配置大页存储

挂载了一个NUMA节点node0,最后一句命令的意思是在node0上预留了64个2MB的大页,即64*2048kB=128MB的内存

mkdir -p /mnt/huge
mount -t hugetlbfs nodev /mnt/huge
echo 64 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages

查看网卡信息

ifconfig
网卡信息.png

从图中看出,两个网卡分别为enp3s0和wlp2s0。

2.3. 加载模块和绑定网卡
ifconfig enp3s0 down//先把有线网卡关掉,不然下一步会报错的。
modprobe uio  
insmod build/kmod/igb_uio.ko//插入uio和igb_uio模块

这一步有可能会报错,不能插入该模块,网上查原因是因为linux 4.3.X以后的内核机制造成的,需要重启电脑进入bios,关闭secure boot即可。

python tools/dpdk-devbind.py --bind=igb_uio enp3s0//绑定igb_uio驱动到enp3s0

使用dpdk自带脚本查看状态

python tools/dpdk-devbind.py --status  
网卡绑定.png

从图中可以看到0000:03:00.0网卡绑定的是igb_uio驱动,网卡绑定成功。

由于每次运行DPDK都需要分配大页和绑定网卡驱动,很麻烦,可以编写一个shell脚本,每次运行直接配置完成。
脚本内容如下:

#!/bin/bash
DEVICE="enp3s0"
DRIVER="igb_uio"

while getopts ":hd:r:" optname
do
  case "$optname" in
    "h")
      echo "   `basename ${0}`:usage:[-d device_name] [-r driver_name]"
      echo "   where device_name can be one in: {enp3s0,wlp2s0},driver_name can be one in: {igb_uio,rte_kni}"
      exit 1
      ;;
    "d")
      DEVICE=$OPTARG
      ;;
    "r")
      DRIVER=$OPTARG
      ;;
    *)
    # Should not occur
      echo "Unknown error while processing options"
      ;;
  esac
done

mkdir -p /mnt/huge
mount -t hugetlbfs nodev /mnt/huge
echo 64 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
ifconfig $DEVICE down
modprobe uio
insmod build/kmod/$DRIVER.ko
./tools/dpdk-devbind.py --bind=$DRIVER $DEVICE

另外,再写一个类似的反向的脚本,如果想要将网卡恢复正常驱动使用的时候可以恢复:

#!/bin/bash

DEVICE="0000:03:00.0"
DRIVER="alx"

while getopts ":hd:r:" optname
do
  case "$optname" in
    "h")
      echo "   `basename ${0}`:usage:[-d device_name] [-r driver_name]"
      echo "   where device_name can be one in: {0000:02:00.0,0000:03:00.0},driver_name can be one in: {alx,iwlwifi}"
      exit 1
      ;;
    "d")
      DEVICE=$OPTARG
      ;;
    "r")
      DRIVER=$OPTARG
      ;;
    *)
    # Should not occur
      echo "Unknown error while processing options"
      ;;
  esac
done


./tools/dpdk-devbind.py --bind=$DRIVER $DEVICE

上面的网卡分别是enp3s0和wlp2s0,它们自身的驱动分别是alx和iwlwifi,根据实际修改。另外DPDK有些网卡是不支持的,需要去官网查看哪些网卡不支持。

运行如下图:

配置.png
恢复.png

3. 运行示例程序:

注意,这里演示用的是pcap的vdev,所以不需要绑定网卡,不然会报错找不到设备。当然vdev也可以按照官方教程里给的跑dpdk的vdev

./build/app/testpmd -c 7 -n 3 --vdev=eth_pcap0,iface=enp3s0 --vdev=eth_pcap1,iface=enp3s0 -- -i --nb-cores=2 --nb-ports=2 --total-num-mbufs=2048

//参数分别为-c <核数,二进制表示,7即111,三个核> -n<存储通道数> --vdev<虚拟设备名,自己给发包网卡起的名字>,iface<真实设备id> -- 端口数,buff数

运行截图:

示例程序运行1.png

在testpmd输入start开始转发流

示例程序运行2.png

输入stop,停止并显示这期间的流量。quit退出程序。

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

推荐阅读更多精彩内容

  • 1. 简介 本文档包含DPDK软件安装和配置的相关说明。旨在帮助用户快速启动和运行软件。文档主要描述了在Linux...
    半天妖阅读 17,902评论 0 22
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,215评论 9 467
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,149评论 2 34
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,637评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,831评论 25 707