博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DPDK的编译安装
阅读量:4205 次
发布时间:2019-05-26

本文共 1739 字,大约阅读时间需要 5 分钟。

最近在研究vpp+dpdk,此过程中遇到了不少问题,在此记录

刚毕业的时候接手的第一个项目就是dpdk了。虽然这个项目在不久后就黄了,但我也通过这个项目对dpdk多多少少有些了解。

以下概念借鉴了这篇博客。

dpdk是Intel提供个的一个开发套件。为 Intel 处理器架构下用户空间高效的数据包处理提供了库函数和驱动的支持,它不同于 Linux 系统以通用性设计为目的,而是专注于网络应用中数据包的高性能处理。也就是 dpdk 绕过了 Linux 内核协议栈对数据包的处理过程,在用户空间实现了一套数据平面来进行数据包的收发与处理。在内核看来,dpdk 就是一个普通的用户态进程,它的编译、连接和加载方式和普通程序没有什么两样。我理解的dpdk就是一个驱动,可以接管网卡,使得这个网卡不归内核管理。被dpdk绑定的网卡在ifconfig命令下是看不到的。这样的好处有

1.应用程序可以直接从网卡获取数据包,然后绕过内核协议栈,进入用户自己的协议栈。可能是开源的协议栈(ofp),也可能是商用协议栈。这些协议栈的性能要比Linux内核的协议栈性能好很多。

2.内核接管的网卡,当有数据包到来时,会触发CPU的中断。而dpdk采用轮询的方式,当有数据包到来时不会产生中断,从而减少了中断的额外开销。

3.dpdk采用循环队列,没有锁。还没具体的研究这个机制。。。

dpdk 能够绕过内核协议栈,本质上是得益于 UIO 技术,通过 UIO 能够拦截中断,并重设中断回调行为,从而绕过内核协议栈后续的处理流程。UIO 设备的实现机制其实是对用户空间暴露文件接口,比如当注册一个 UIO 设备 uioX,就会出现文件 /dev/uioX,对该文件的读写就是对设备内存的读写。除此之外,对设备的控制还可以通过 /sys/class/uio 下的各个文件的读写来完成。

1.获取dpdk源码。

   选择版本下载。我下载的是19.02的版本。下载解压后,假设目录是/home/dpdk-19.02,进入该目录

2.设置巨页HugePages(巨页相关概念参考)

HugePages是通过使用大页内存来取代传统的4kb内存页面,使得管理虚拟地址数变少,加快了从虚拟地址到物理地址的映射以及通过摒弃内存页面的换入换出以提高内存的整体性能

3.设置环境变量,主要是来编译测试程序

export RTE_SDK=<dpdk目录>

export RTE_TARTGET=x86_64-native-linuxapp-gcc

4.编译dpdk

make config T=x86_64-native-linuxapp-gccsed -ri 's,(PMD_PCAP=).*,\1y,' build/.configmake

 中途出现的错误大多数都是依赖库不匹配或者找不到。重新下载即可。

如果出现这个错误* /lib/modules/3.10.0-693.11.6.el7.x86_64/build: No such file or directory. Stop.这类的问题,说明应该是系统没有安装内核开发包或者是安装的内核开发包版本不匹配。需要重新下载内核开发包。yum install kernel-devel。然后进入/lib/modules/3.10.0-693.11.6.el7.x86_64/,查看build连接到哪个版本的内核开发包,然后将刚才下载的软链接到这个版本的名称即可,然后执行make

dpdk-17.11/lib/librte_eal/linuxapp/eal/eal_memory.c:56:18: fatal error: numa.h: No such file or directory

 yum install numactl-devel*x86_64

5.安装编译生成的dpdk驱动

在/home/dpdk-19.02目录下会有x86_64-native-linuxapp-gcc这个目录,进入该目录下的kmod文件夹,会有生成的网卡驱动。然后执行modprobe uio,insmod igb_uio.ko,insmod rte_kni.ko.完成dpdk驱动的安装。

转载地址:http://lyali.baihongyu.com/

你可能感兴趣的文章
Markdown 语法
查看>>
Python学习笔记(一) 之 基础语法
查看>>
JAVA 中的Collection FrameWork
查看>>
JAVA中的IO流
查看>>
JAVA中枚举类的使用
查看>>
Intellij IDEA 生成 JavaDoc
查看>>
JAVA注解Annotation介绍
查看>>
WireShark 过滤表达式
查看>>
ZipUtils 压缩工具包
查看>>
JAVA 线程之守护线程Daemon Thread
查看>>
JAVA 线程之内存可见性
查看>>
JAVA 线程之带有返回值的Callable和Future
查看>>
JAVA 多线程学习资源
查看>>
JNI HelloWorld的例子
查看>>
JAVA 网络编程
查看>>
JAVA 反射机制详解
查看>>
JAVA 读取Properties配置文件
查看>>
JavaWeb 使用Intellij IDEA部署Web项目出现JmxAdminException
查看>>
Maven 使用Intellij IDEA部署添加Maven Module出现 'pom.xml' already exists in VFS
查看>>
Git .gitignore文件比较完善的写法
查看>>