DPDK学习之开篇介绍
1、前言
记得刚开始工作的时,老大将我安排到数据面组,当时第一次听说”数据面“这个概念,感觉挺新鲜的。误打误撞就开始搞了,刚开始接触的时候,由于不懂其中的原理,觉得很神奇,因为报文的转发是在应用层,通过一个进程进行转发。而传统的报文转发是基于内核的,要想控制报文,需要写驱动程序。后面接触了一段时间,发现原来报文转发是基于intel开源的DPDK开发的,分为控制面和数据面。这就是当前比较火热的软件定义网路SDN的一种应用场景。DPDK应用程序是运行在用户空间上利用自身提供的数据平面库来收发数据包,绕过了Linux内核协议栈对数据包处理过程。Linux内核将DPDK应用程序看作是一个普通的用户态进程,包括它的编译、连接和加载方式和普通程序没有什么两样。intel为什么要搞一个DPDK出来呢?有什么优势呢?运用了哪些技术呢?带着这些疑问,加深学习一下。
2、背景分析
网路刚开始时,只是在小范围内使用,并发量和响应时间要求并不高,而随着网路的普及,网路的范围越来越大,对服务器的并发量和响应时间要求越来越高,从而出现C10k问题。而现在C10k问题已经得到解决,又出现新的挑战,为了满足日益增长的需求主要采用分布式集群来分担负荷,应对大量的用户请求。对网路的要求越来越高。
网路的核心是报文的转发过程,linux网路是通过内核协议栈进行转发的,报文控制平面和数据转发平面没有分离,不适合处理大规模网络数据包,因为linux分为内核区和用户区,报文先进入内核区然后拷贝到用户区,供给上层应用程序处理。并且为了全面的支持用户空间的各个功能,协议栈中嵌入了大量用于对接的接口。如果能让应用程序直接接管网络数据包处理、内存管理以及CPU调度,那么性能可以得到一个质的提升。
如今的处理器都是多核,而且内存也越来越大,可以提高多核和大内存的扩展性,减少CPU多核之间任务的切换,内存cache miss,因为内存的访问速度永远也赶不上cache和cpu的频率,为了能让性能平行扩展,最好是少访问。
要提高网路报文转发,从如下几个方面着手:
1.控制层留给Linux做,其它数据层全部由应用程序来处理。
2.减少系统调度、系统调用、系统中断,上下文切换等
3.摒弃Linux内核协议栈,将数据包传输到用户空间定制协议栈
4.使用多核编程技术替代多线程,将OS绑在指定核上运行
5.针对SMP系统,使CPU尽量使用所在NUMA系统节点的内存,减少内存刷写
6.使用大页面,减少访问
7.采用无锁技术解竞争
3、DPDK的优势

DPDK拦截中断,不触发后续中断流程,并绕过协议栈,通过UIO技术将网卡收到的报文拷贝到应用层处理,报文不再经过内核协议栈。减少了中断,DPDK的包全部在用户控件使用内存池管理,内核控件与用户空间的内存交互不用进行拷贝,只做控制权转移,减少报文拷贝过程,提高报文的转发效率。
DPDK核心技术如下:
(1)通过UIO技术将报文拷贝到应用空间处理
(2)通过大页内存,降低cache miss ,提高命中率,进而cpu访问速度
(3)通过CPU亲和性,绑定网卡和线程到固定的core,减少cpu任务切换
(4)通过无锁队列,减少资源竞争
接下来深入学习总结一下dpdk所用到的技术,加深理解。
4、参考资料
http://www.jianshu.com/p/0ff8cb4deaef
https://chenghuiyu.gitbooks.io/openstack_neutron_dpdk/content/doc/3-dpdk/dpdk-tech.html
DPDK学习之开篇介绍的更多相关文章
- ABP理论学习之开篇介绍
返回总目录 为了和2016年春节赛跑,完成该系列博客,我牺牲了今天中午的时间来完成该系列的第一篇----开篇介绍.开篇介绍嘛,读过大学教材的同学都知道,这玩意总是那么无聊,跟考试没关系,干脆直接跳过, ...
- 一、Go语言开篇介绍
Go语言开篇介绍 Go语言 是Google公司 在2007开发一种静态强类型.编译型语言,并在 2009 年正式对外发布. Go语言以其近C的执行性能和近解析型语言的开发效率,以及近乎于完美的编译速度 ...
- [翻译svg教程]svg学习系列 开篇
目录 [翻译svg教程]svg学习系列 开篇 [翻译svg教程 ]svg 的坐标系统 [翻译svg教程]svg 中的g元素 [翻译svg教程]svg中矩形元素 rect [翻译svg教程]svg中的c ...
- React与ES6(一)开篇介绍
React与ES6系列: React与ES6(一)开篇介绍 React和ES6(二)ES6的类和ES7的property initializer React与ES6(三)ES6类和方法绑定 React ...
- 【Head-First设计模式】C#版-学习笔记-开篇及文章目录
原文地址:[Head-First设计模式]C#版-学习笔记-开篇及文章目录 最近一年断断续续的在看技术书,但是回想看的内容,就忘了书上讲的是什么东西了,为了记住那些看过的东西,最好的办法就是敲代码验证 ...
- 人工智能深度学习Caffe框架介绍,优秀的深度学习架构
人工智能深度学习Caffe框架介绍,优秀的深度学习架构 在深度学习领域,Caffe框架是人们无法绕过的一座山.这不仅是因为它无论在结构.性能上,还是在代码质量上,都称得上一款十分出色的开源框架.更重要 ...
- iOS学习之NSBundle介绍和使用
iOS学习之NSBundle介绍和使用 http://blog.csdn.net/totogo2010/article/details/7672271 新建一个Single View Applicat ...
- ASP.NET Core Web开发学习笔记-1介绍篇
ASP.NET Core Web开发学习笔记-1介绍篇 给大家说声报歉,从2012年个人情感破裂的那一天,本人的51CTO,CnBlogs,Csdn,QQ,Weboo就再也没有更新过.踏实的生活(曾辞 ...
- Oracle GoldenGate学习之Goldengate介绍
Oracle GoldenGate学习之Goldengate介绍 (2012-10-02 17:07:27) 标签: 检查点 数据传输 队列 进程 分类: Goldengate Goldengate介 ...
随机推荐
- python安装MySQLdb模块
以Ubuntu下安装为例: 下载地址:https://pypi.python.org/pypi/MySQL-python/ 解压后直接进入解压目录运行安装命令. python setup.py ins ...
- 利用HtmlAgilityPack库进行HTML数据抓取
主要介绍基于XPATH的文本分析方式的实现,代码如下: using System; using System.Collections.Generic; using System.Linq; using ...
- 解剖SQLSERVER 第六篇 对OrcaMDF的系统测试里避免regressions(译)
解剖SQLSERVER 第六篇 对OrcaMDF的系统测试里避免regressions (译) http://improve.dk/avoiding-regressions-in-orcamdf-b ...
- 分享我开发的网络电话Android手机APP正式版,图文详解及下载
分享我开发的网络电话Android手机APP正式版,图文详解及下载 分享我开发的网络电话Android手机APP正式版 实时语音通讯,可广域网实时通讯,音质清晰流畅! 安装之后的运行效果: 第一次安装 ...
- 最少知识原则(Least Knowledge Principle)
最少知识原则(Least Knowledge Principle),或者称迪米特法则(Law of Demeter),是一种面向对象程序设计的指导原则,它描述了一种保持代码松耦合的策略.其可简单的归纳 ...
- var与this,{}与function 小记
JavaScript var是用来定义一个变量,this常用来定义或调用一个属性或方法.但是在全局范围内,this和var定义变量是等价的. window console.log('window:', ...
- 诡异的 未处理的IOErrorEvent 2035
今天游戏发布上线之后,总是随机的出现卡死. 换了个safari之后,看到抛了 IOErrorEvent. 问题是,我所有的Loader都加入了contentLoaderInfo监听.而抛出来的又没有堆 ...
- Springlake-02 权限&文档设置&Role设置&Folder设置&登录
1. 权限 有3个默认的权限用户: 1.System Owner so 管理员权限全部:Type Setup; Group Setup; Form Setup; Role Setup; Share R ...
- WebApi系列~基于单请求封装多请求的设计~请求的安全性设计与实现
回到目录 对于一个Http请求如何保证它的安全,这已经不是一个新的话题,对于请求的安全我们通常考虑的无非就是"请求的被篡改性"和"请求的被复制性",第一个问题我们很容易实现,可以通过参数+密钥的方式, ...
- Node.js入门:Hello World
马上开始我们第一个Node.js应用:“Hello World”.打开你的编辑器,创建一个hello.js文件.编写代码保存该文件,并通过Node.js来执行. 控制台输出 1 console.log ...