DPDK

网络数据包转发处理
授权协议 BSD
开发语言 C/C++
所属分类 程序开发、 高性能网络开发库
软件类型 开源软件
地区 不详
投 递 者 夔桐
操作系统 Linux
开源组织
适用人群 未知
 软件概览

Intel® DPDK 全称 Intel Data Plane Development Kit,是 Intel 提供的数据平面开发工具集,为 Intel architecture(IA)处理器架构下用户空间高效的数据包处理提供库函数和驱动的支持,它不同于Linux系统以通用性设计为目的,而是专注于网络应用中数据包的高性能处理。目前已经验证可以运行在大多数Linux操作系统上,包括FreeBSD 9.2、Fedora release18、Ubuntu 12.04 LTS、RedHat Enterprise Linux 6.3和Suse EnterpriseLinux 11 SP2等。DPDK使用了BSDLicense,极大的方便了企业在其基础上来实现自己的协议栈或者应用。 

需要强调的是,DPDK应用程序是运行在用户空间上利用自身提供的数据平面库来收发数据包,绕过了Linux内核协议栈对数据包处理过程。Linux内核将DPDK应用程序看作是一个普通的用户态进程,包括它的编译、连接和加载方式和普通程序没有什么两样。

总体结构

主要有以下几个核心

  • 网络层模块

  • 内存管理模块

  • 内核管理模块

网络模块

总体分析

DPDK对从内核层到用户层的网络流程相对传统网络模块进行了特殊处理,下面对传统网络模块结构和DPDK中的网络结构做对比

传统linux网络层:

硬件中断--->取包分发至内核线程--->软件中断--->内核线程在协议栈中处理包--->处理完毕通知用户层用户层收包-->网络层--->逻辑层--->业务层

dpdk网络层:

硬件中断--->放弃中断流程
用户层通过设备映射取包--->进入用户层协议栈--->逻辑层--->业务层

对比后总结:

dpdk优势:

  • 减少了中断次数。

  • 减少了内存拷贝次数。

  • 绕过了linux的协议栈,进入用户协议栈,用户获得了协议栈的控制权,能够定制化协议栈降低复杂度

dpdk劣势

  • 内核栈转移至用户层增加了开发成本.

  • 低负荷服务器不实用,会造成内核空转.

  • 1. DPDK技术介绍 1) 简介 DPDK全称Intel Data Plane Development Kit,是intel提供的数据平面开发工具集,为Intel architecture(IA)处理器架构下用户空间高效的数据包处理提供库函数和驱动的支持。通俗地说,就是一个用来进行包数据处理加速的软件库。 DPDK不同于Linux系统以通用性设计为目的,而是专注于网络应用中数据包的高性能处理。具

  • VPP插件DPDK在注册以太网接口之后,设定处理此接口的节点索引,即由当前的节点dpdk_input_node来处理此接口。 static clib_error_t * dpdk_lib_init (dpdk_main_t * dm) { dpdk_device_t *xd; xd->hw_if_index = vnet_eth_register_interface (vnm

 相关资料
  • 虽然之前我们已经提到过不建议直接使用 LogStash::Inputs::TCP 和 LogStash::Outputs::TCP 做转发工作,不过在实际交流中,发现确实有不少朋友觉得这种简单配置足够使用,因而不愿意多加一层消息队列的。所以,还是把 Logstash 如何直接发送 TCP 数据也稍微提点一下。 配置示例 output { tcp { host => "19

  • 09.04 笔试,测评 笔试代码题sql比较简单 09.08 一面 1.自我介绍 2.一道简单sql题目 3.python:冒泡排序(实际写的快排) 4.了解实时数仓吗? 5.对Hadoop框架的了解 6.对mapreduce的了解 7.反问 09.12 二面 十分钟左右 1.自我介绍 2.python中怎么实现类型转换 3.python常用的函数 4.研究生阶段的学习计划 5.反问 10.09

  •        在网络数据菜单下设置了一个连接服务器的功能,通过这个功能,可以直接通过网络地址连接到远程的服务器,从而实现一份数据,多客户端共享。 创建一个服务器连接        只需要输入服务器的ip地址,端口号,账号和密码就可以快速建立一个连接,并保存。 删除已有连接        对于不想出现在服务器连接列表里的连接,可以选中后直接删除。 连接已有服务器        选中一个连接,直接点击

  •        在网络数据菜单下设置了一个连接服务器的功能,通过这个功能,可以直接通过网络地址连接到远程的服务器,从而实现一份数据,多客户端共享。 创建一个服务器连接        只需要输入服务器的ip地址,端口号,账号和密码就可以快速建立一个连接,并保存。 删除已有连接        对于不想出现在服务器连接列表里的连接,可以选中后直接删除。 连接已有服务器        选中一个连接,直接点击

  • 最开始发来的邮件说是电话面,当天走完了一面二面,中间只间隔了二十多分钟,当晚HR面,第二天看状态结束了。。。。凉凉 这次幸亏是电话面,手机直接录音了,记录的详细一些。 一面 面试时间:20min 自我介绍? 实习工作介绍,实习内容,所用的技术栈。。。 怎么和同事配合的?自己有开发了那些?有什么提高? 你们这个项目,你觉得还有那些地方可以做优化? 离线和实时结合,未来发展的一些看法? Hive的组成

  • # 一面9.8 自我介绍 离线项目用到什么架构 实习使用的是什么开发语言 实习做的是哪一层的开发 阿里数仓分层是怎么做的 Mysql的索引是用的什么 为什么用B+树索引 一条语句select from where group by having在mysql中执行顺序是什么 mapreduce的执行过程 hive分区表和分桶表的区别 数据倾斜有哪些是怎么处理的 给题说思路 1. 统计主键出现次数 2

  • 基本的网络包处理主要包含: Packet input:报文输入。 Pre-processing:对报文进行比较粗粒度的处理。 Input classification:对报文进行较细粒度的分流。 Ingress queuing:提供基于描述符的队列FIFO。 Delivery/Scheduling:根据队列优先级和CPU状态进行调度。 Accelerator:提供加解密和压缩/解压缩等硬件功能。

  • 我正在构建一个可联网的程序,它用SFML UDP库在2D屏幕上传输图形变化。 我想在数据被发送到连接两侧的屏幕之前做一个验证条件。我正在考虑将单个字节作为0或1发送,以表示数据的成功接收和同步。 (见图) 在更新屏幕之前,来回ping以确保数据在两端都得到了验证,然后随后运行同一件事的另一次迭代(当然是无限期的),这似乎是合乎逻辑的。 另外,在网络上发送一个字节,而不是做其他事情,比如尝试与时间同