DPDK使用入门(补充)

DPDK安装

从官网下载DPDK安装包,常用的版本是:dpdk-16.07

1.解压:

tar zxvf dpdk-16.07.tar.gz

cd   dpdk-16.07

2.设置环境变量:

export RTE_SDK=$(pwd)          #DPDK主目录

exportRTE_TARGET=x86_64-native-linuxapp-gcc

3.使用pcap库:

make config T=x86_64-native-linuxapp-gcc

sed -ri 's,(PMD_PCAP=).*,\1y,' build/.config

4.编译:

make   等等编译完成

5.挂载巨页:

mkdir -p /mnt/huge

mount -t hugetlbfs nodev /mnt/huge

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


6.加载IGB模块和绑定网卡:(建议使用dpdk-setup.sh脚本)

cd $(RTE_SDK)/tools/

./dpdk-setup.sh

运行如下图所示:

dpdk-setup.sh

根据脚本步骤提示,完成编译哪个DPDK,加载哪种驱动,绑定网卡等一系列动作。

6.1.选择[16]x86_64-native-linuxapp-gcc,等待编译完成

x86_64:系统架构

native:平台自适应

linuxapp:linux的应用程序

gcc:使用GCC编译器

6.2 选择[19] Insert IGB UIO

module ,加载驱动,常用的是IGB驱动

选择[25] Bind Ethernet device to IGB UIO module,绑定网卡到IGB驱动,输入网卡的PCI地址,中间用空格隔开。

选择[24] Display current Ethernet device settings ,查看当前网卡设置

如下图:

显示网卡设置

图中可以看出,DPDK使用的网卡有4块I350。

6.3选择 [30] List hugepage info from /proc/meminfo ,可显示当前巨页信息,也可以通过

[22] Setup hugepage mappings for non-NUMAsystems   或者

[23] Setup hugepage mappings for NUMAsystems

为系统设置巨页,但不建议在这里设置,请查看第5点或系统配置里的描述。

退出dpdk_setup.sh:输入36.  [36]Exit Script

注1:查看系统是否为NUMA架构:执行$(RTE_SDK)/tools/cpu_layout.py ,如果有2个Socket信息,为NUMA架构,只有1个Socket信息,则为non-NUMA架构。

注2:一般PCI ID 小于0000:08:00.x的网卡在Socket0,大于或等于0000:08:00.x的在Socket1.

7.执行完以上6步,DPDK环境已经初始化好了,可以正常地跑DPDK的程序了,但系统的配置没有达到最优。

系统配置

1. BIOS设置,将BIOS中的性能参数设置到最优,关闭任何省电配置和虚拟化选项,比如:

CPU Power and Performance Policy

CPU C-state Disabled

CPU P-state Disabled

Enhanced Intel® Speedstep® Tech Disabled

Turbo Boost Disabled

等等

2.Boot设置,要保证DPDK绑定的核心不被系统调度,因此需要将核心从内核调度中隔离。

修改/etc/default/grub文件,在GRUB_CMDLINE_LINUX行中加入isolcpus=2,3,4,5,6 transparent_hugepage=never

执行:grub2-mkconfig -o /boot/grub2/grub.cfg

(将修改后的配置刷新新/boot中配置去,此步骤操作完,则系统的启动参数真正的被修改了)

查看CPU性能是否为最优,执行:

cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

3./etc/default/grub,加入isolcpus时需要注意,加入的逻辑核心需要在同一个Socket上,non-NUMA架构只有一个Socket,只需要将要隔离的核心加上即可,在NUMA架构上就先要知道Socket1和Socket2上的核心有哪些?

执行$(RTE_SDK)/tools/cpu_layout.py可查看核心属性哪个Socket。把与网卡在同一Socket上的core添加到isolcpus中,目前用的i350,是绑定在Socket0中

4.设置巨页,系统默认是2M,如下图:

2M巨页

如果要修改为1G巨页,参考下图,修改GRUB_CMDLINE_LINUX为:

1G巨页

把default_hugepagesz设为1G,hugepagesz设为1G,hugepages设为8,表示设置8块1G的巨页,然后执行:grub2-mkconfig -o /boot/grub2/grub.cfg  执行之后重启服务器。

5.查看配置信息常用命令

查看系统巨页:cat /proc/meminfo| grep -i huge

查看绑定的网卡:./$(RTE_SDK)/tools/dpdk-devbind.py-s

查看网卡PCI信息:lspci | grep -i eth

查看lcore在哪个Socket上:./$(RTE_SDK)/cpu_layout.py

查看挂载点信息:cat /proc/mounts   或者mount

查看CPU型号:cat /proc/cpuinfo | grep -i 'model name'

查看内存频率:dmidecode -t memory | grep Speed

功能点测试

Testpmd测试:

在初始化完DPDK环境后,我们通常需要测试环境是否正常,我们使用的测试程序是用dpdk_setup.sh脚本,因为方便。启动脚本之后,选择

[29] Run testpmdapplication in interactive mode ($RTE_TARGET/app/testpmd)

然后输入掩码位,如果绑定了4个网口,输入:0xf0即可。

由于testpmd的命令很多,无法一一说明,这里只验证环境是否正常。

1.输入 ? 可查看所有的命令。

2.往端口上发送数据,查看是否有收到数据,查看命令:show port stats all

如果收有数据,则环境正常

3.退出:quit

4.退出脚本:输入36.  [36]Exit Script

Test测试:

这个测试是各个库模块的独立测试

编译:

cd $(RTE_SDK)

make –C app/test

执行:./app/test/test –c 0xf0 –n 4

输入 ? 查看所有的测试单元

输入version_autotest

RTE>>version_autotest

Version string: 'DPDK 16.07.0'

Test OK

RTE>>

这里面有很多测试,常用的有核心的测试:per_lcore_autotest

内存的测试:memory_autotest 队列性能测试:ring_perf_autotest 等等

可以测试队列大小对性能的影响,可以测试使用不同的队列接口函数对性能的影响,也可以测试burst_size 或bulk_size大小不同,对性能的影响,因为我们的程序与这里的测试环境是一样的,这里的测试结果对修改一些程序参数可以起到参考作用。

RTE>>quit

注:test程序也可以通过 dpdk_setup.sh启动,选择

[28] Run test application($RTE_TARGET/app/test)

问题解决

1. 编译DPDK程序的时候,出现:

make: ***/lib/modules/3.10.0-123.el7.x86_64/build: No such file or directory.

解决:

cd/lib/modules/3.10.0-123.el7.x86_64/

ln -s/usr/src/kernels/3.10.0-327.36.3.el7.x86_64/ build

1.1.如果在解决问题1的时候出现,发现/usr/src/kernels/  中没有3.10.0-327.36.3.el7.x86_64

解决:

rpm -ivhkernel-devel-3.10.0-123.el7.x86_64.rpm           #要先下载对应的rpm包:

https://buildlogs.centos.org/c7-updates/kernel/3.10.0-123.el7/20140630120647/

2.执行脚本./dpdk_devbind.py –s 出现下面的问题:

Traceback (most recent call last):

  File "./dpdk_nic_bind.py", line539, in

    main()

  File "./dpdk_nic_bind.py", line535, in main

    get_nic_details()

  File "./dpdk_nic_bind.py", line228, in get_nic_details

    dev_lines =check_output(["lspci", "-Dvmmn"]).splitlines()

  File "./dpdk_nic_bind.py", line120, in check_output

    stderr=stderr).communicate()[0]

  File"/usr/lib64/python2.7/subprocess.py", line 711, in __init__

    errread, errwrite)

  File"/usr/lib64/python2.7/subprocess.py", line 1308, in _execute_child

    raise child_exception

OSError: [Errno2] No such file or directory


这是由于没有安装 lspci的原因。

解决:yum installpciutils -y


3.执行skeleton出现下面现象:

...

EAL: Error reading from file descriptor 13:Input/output error

EAL: Error reading from file descriptor 15:Input/output error

...

修改代码行

lib/librte_eal/linuxapp/igb_uio/igb_uio.c

把pci_intx_mask_supported(dev) 修改为pci_intx_mask_supported(dev)||true

重新编译dpdk.

用dpdk-setup.sh 执行以下操作

remod igb_uio

insmod

igb_uio


DPDK的基础就介绍到这里,下次再统一介绍 l2fwd,l3fwd,test-pipeline等模型。

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

推荐阅读更多精彩内容