
DPDK
文章平均质量分 94
废言Pro
时间加努力
展开
-
DPDK收发包流程分析(一)
一、 前言】 DPDK是intel工程师开发的一款用来快速处理数据包的框架,最初的目的是为了证明传统网络数据包处理性能低不是intel处理器导致的,而是传统数据的处理流程导致,后来随着dpdk的开源及其生态的快速发展,dpdk成为了高性能网络数据处理的优秀框架。本篇文章主要介绍DPDK接收与发送报文的流程,包括CPU与网卡DMA协同工作的整个交互流程、数据包在内存、CPU、网卡之间游走的过程。 ...转载 2021-02-24 09:27:30 · 2188 阅读 · 0 评论 -
dpdk大页内存实现
上一篇文件介绍了linux内存管理以及大页内存的原理,有了原理的支撑,接下里分析dpdk大页内存源码就轻松了,才不会云里雾里不知道在说啥。所谓的dpdk大页内存的实现,说白了就是dpdk自己实现了一套大页内存的使用库,这个和libhugetlbfs.so是类似的,就是自己实现了大页内存的申请,释放操作, 替代了传统的malloc, free系统调用。先从整体上看下dpdk大页内存有哪些内容。 当应用层需要申请内存时,直接调用rte_malloc接口进行内存申请; 而rte_malloc...转载 2021-02-07 10:05:45 · 1205 阅读 · 1 评论 -
桃李春风一杯酒,江湖夜雨十年灯 - 老兵夜话DPDK
20年弹指一挥间。技术在飞速的发展,从最初接触ixp1200 的耳目一新,到如今DPDK, smart NIC的 如火如荼。我也已经从昔日的青葱少年,变成了两鬓微霜的打工人。午夜梦回, 在感慨人生有如逆旅之余,心中也有很多想法不吐不快。前传2000年是网络处理器的黄金时代,Intel在那个时候也有一个Network Processor产品,名为IXP1200,主要是通过可编程的专用引擎来加速网络报文处理。IXP1200/2400/2800本身带有N个微引擎,可供编程。但是编程的难度很大,尤其是在高并转载 2020-12-10 10:02:40 · 392 阅读 · 0 评论 -
全用户态网络开发套件F-Stack架构分析
F-Stack是一个全用户态(kernel bypass)的高性能的网络接入开发包,基于DPDK、FreeBSD协议栈、微线程接口等,适用于各种需要网络接入的业务,用户只需要关注业务逻辑,简单的接入F-Stack即可实现高性能的网络服务器。 本文介绍F-Stack的详细架构及如何解决内核协议栈面临的问题。传统内核协议栈的性能瓶颈在传统的内核协议栈中,网络包处理存在诸多瓶颈,严重影响网络包的收发性能。性能瓶颈主要包括以下几个方面局部性失效 - 一个数据包的处理可能跨多个CPU核心、缓存失.转载 2020-05-09 15:10:40 · 3058 阅读 · 0 评论 -
基于dpdk的用户态协议栈f-stack实现分析
f-stack是腾讯基于dpdk开发的一套用户态协议栈,目前已经开源,相关介绍可以看这里:https://cloud.tencent.com/developer/article/1005179。开源代码在这里:https://github.com/F-Stack/f-stack.git。项目背景F-Stack这个项目起始于DNSPod的授权DNS项目,当时是12年,DPD...转载 2020-04-27 20:20:57 · 1692 阅读 · 0 评论 -
DPDK QOS 5 -- Enqueue && Dequeue详细流程分析
入队流程我们先看看,官网上是怎么说的:Enqueue PipelineThe sequence of steps per packet:Accessthe mbuf to read the data fields required to identify the destination queue for the packet. These fields are: port, s...原创 2020-04-09 20:21:57 · 2152 阅读 · 0 评论 -
DPDK 中文编程指南
https://dpdk-docs.readthedocs.io/en/latest/linux_gsg/index.htmlhttps://dpdk-docs.readthedocs.io/en/latest/prog_guide/index.html编程指南1. 简介 1.1. 文档地图 1.2. 相关刊物 2. 概述 2.1. 开发环境 2.2. ...原创 2019-11-19 09:21:03 · 2573 阅读 · 0 评论 -
(转)DPDK 实现的不完全理解
写在前面本系列记录了作者在项目过程中由于好奇心驱使而了解到的部分DPDK实现细节。比较适合有同样好奇心的DPDK的初学者,通过本文您可以学习到DPDK的整体工作原理以及部分实现细节您不能学习到应用DPDK进行性能调优如果对DPDK的起源不是很清楚的话,可以先浏览下绝对干货!初学者也能看懂的DPDK解析,重点就是Linux + x86网络IO瓶颈这部分,总结一句话就是Linu...转载 2019-07-05 15:22:50 · 1233 阅读 · 0 评论 -
DPDK数据流过滤规则例程解析—— 网卡流处理功能窥探
本文转载自DPDK与SPDK社区当前的高性能网卡通常都支持对数据流的定向和过滤功能,可通过配置将指定的数据流定向到指定的设备队列中,并且如果监听此队列的核心正是运行处理此数据流的应用所在核心,将获得一定的性能优势。另外网卡的流过滤功能还可设定丢弃指定的流,可实现在硬件层面屏蔽非法的访问等,而不需要处理器的干预。DPDK的示例flow_filtering演示第一种流定向功能。该示例flo...转载 2019-07-05 14:53:51 · 2970 阅读 · 2 评论 -
DPDK编程指南 (1 --3)
1.简介本文档提供软件架构信息,开发环境及优化方案。有关编程示例以及如何编译运行这些示例,请参阅《DPDK示例用户指南》。有关编译运行应用程序的基本信息,请参阅《DPDK入门指南》。1.1.文档路线图以下是一份建议顺序阅读的DPDK参考文档列表:发行公告:提供特定发行版本的信息,包括支持的特性、限制条件、修复的问题、已知的问题等等。此外,还以FAQ的方式提供了常见问题的解...翻译 2019-07-03 13:25:04 · 4028 阅读 · 1 评论 -
DPDK-UIO 驱动认识
缘由前期学习了一些DPDK的demo,了解了一些基础DPDK的应用。对dpdk的一些底层原理没做过多分析,今天主要学习用户态驱动程序的实现情况。用户态驱动程序UIOUIO(Userspace I/O)是运行在用户空间的I/O技术。Linux系统中一般的驱动设备都是运行在内核空间,而在用户空间用应用程序调用即可。UIO的内核部分和用户空间的工作内核空间UIO的少量运行在内核空...转载 2019-06-19 09:28:10 · 1481 阅读 · 0 评论 -
Intel DPDK 源代码分析
作者:王智民贡献者:创建时间:2013-8-8稳定程度:初稿修改历史 版本 日期 修订人 说明 1.0 2013-8-8 王智民 初稿 ...转载 2019-06-19 09:21:26 · 4985 阅读 · 1 评论 -
dpdk对虚拟化的支持
目录:虚拟化 dpdk的实现研究 virtio vhost SR-IOV 热迁移相关 研究拓展本文记录近期对dpdk在虚拟化和云计算领域应用的研究成果,内容梳理如下。虚拟化虚拟化,抽象来说,就是将物理资源逻辑化。具体来说,虚拟技术的实现是在系统中加入一个虚拟化层(也就是hypervisor),将下层的物理资源(如disk,nic,cpu,memory等)抽...转载 2019-06-19 08:59:50 · 2037 阅读 · 0 评论 -
DPDK设备驱动的匹配和初始化
前言:DPDK使用了UIO(用户空间I/O)的机制,跳过内核态的网卡驱动,转而使用用户态的收发包驱动,从驱动到内存和数据包,继而到数据包的处理,这是一个完整的收发包流程。这篇主要介绍设备驱动的初始化,和收发包的处理。所选代码以DPDK-17.02版本为依据。数据包的驱动初始化是在rte_eal_init()进行的,总体上分为2个阶段进行。1.第一阶段是rte_eal_pci_init(),...转载 2019-06-19 08:50:16 · 1743 阅读 · 0 评论 -
DPDK收发包全景分析
前言:DPDK收发包是基础核心模块,从网卡收到包到驱动把包拷贝到系统内存中,再到系统对这块数据包的内存管理,由于在处理过程中实现了零拷贝,数据包从接收到发送始终只有一份,对这个报文的管理在前面的mempool内存池中有过介绍。这篇主要介绍收发包的过程。一、收发包分解收发包过程大致可以分为2个部分1.收发包的配置和初始化,主要是配置收发队列等。 2.数据包的获取和发送,主要是从队列中获...转载 2019-06-19 08:27:21 · 865 阅读 · 0 评论 -
DPDK性能优化技术汇总
Memory AccessAddress Alignment在内存中存取一个变量最高效的方式是将其放在一个可以被它的长度整除的地址上。(void *)&variable % sizeof(variable) == 0所谓的按某个长度对齐就是这个意思。GCC编译器会自动帮我们处理这些事情。比较特殊的方式是将一个大型的结构体,或者静态数组按64byte的方式对齐:in...转载 2019-06-19 08:25:05 · 4555 阅读 · 1 评论 -
DPDK rte_eal_init 初始化分析(根据最新的更新)
端口初始化流程1. 注册设备驱动到“dev_driver_list”链表中 2.扫描系统中的pci设备,并注册到“pci_device_list”中 3、初始化注册的驱动 4、网卡设备初始化端口初始化流程如上所示给出了端口打开的简单流程图,下面以ixgbe驱动为例详细说明:1. 注册设备驱动到“dev_driver_list”链表中这个链表节点为:/**...原创 2019-05-17 10:45:18 · 12802 阅读 · 1 评论 -
为DPDK eal动态库添加新函数 ld不过的问题
最近对DPDK生成库做了一个封装,需要对log函数rte_log做一些修改,为了避免对原来的函数产生影响,因此在同文件下将该函数重新拷贝了一份,改名为rte_test_log(),在这个函数中修改。同时在h文件中添加了该函数的定义。但在使用时,程序提示找不到该函数。nm 有这个函数,但就是ld不过,奇怪啊经过一番分析与资料查找,发现DPDK的编译利用了ld的--version-scri...原创 2019-05-14 15:15:21 · 526 阅读 · 0 评论 -
DPDK之PMD原理
PMD是Poll Mode Driver的缩写,即基于用户态的轮询机制的驱动。本文将介绍PMD的基本原理。在不考虑vfio的情况下,PMD的结构图如下:图1. PMD结构图虽然PMD是在用户态实现设备驱动,但还是依赖于内核提供的策略。其中uio模块,是内核提供的用户态驱动框架,而igb_uio是DPDK kit中拥有与uio交互,bind指定网卡的内核模块。当使用DPDK脚本d...转载 2019-05-08 09:06:42 · 5825 阅读 · 1 评论 -
DPDK之KNI原理
DPDK是一个优秀的收发包kit,但它本身并不提供用户态协议栈,因此由将数据报文注入内核协议栈的需求,也就是KNI(Kernel NIC Interface)。作为用户态和内核的接口,其因为没有系统调用和内存拷贝,因此比传统的tun/tap设备要更高效。借用DPDK文档的一个KNI的结构图。图1. kni结构图毫无疑问,KNI必然要也需要内核模块的支持,即rte_kni.ko...转载 2019-05-08 09:05:52 · 5125 阅读 · 1 评论 -
(转)DPDK收发包处理流程01 -- 网卡初始化
本文基于DPDK-1.8.0分析。网卡驱动模型一般包含三层,即,PCI总线设备、网卡设备以及网卡设备的私有数据结构,即将设备的共性一层层的抽象,PCI总线设备包含网卡设备,网卡设备又包含其私有数据结构。在DPDK中,首先会注册设备驱动,然后查找当前系统有哪些PCI设备,并通过PCI_ID为PCI设备找到对应的驱动,最后调用驱动初始化设备。一、网卡驱动注册以e1000网卡驱动为例说明。...转载 2019-04-30 13:20:19 · 491 阅读 · 0 评论 -
(转)DPDK内存管理05 -- rte_mbuf
本文主要介绍rte_mbuf与rte_mempool数据结构之间的组织关系、以及网卡接收到的数据是如何存储在rte_mbuf中的。一、rte_mbuf、rte_mempool及网卡收到的数据包在内存中的组织结构 调用rte_mempool_create()函数创建rte_mempool的时候,指定申请多少个rte_mbuff及每个rte_mbuf中elt_size的大小...转载 2019-04-30 12:40:51 · 303 阅读 · 0 评论 -
(转)DPDK内存管理 04 ---- rte_malloc内存管理
内存分配组织结构一个socket上所有的可用内存为一个堆。每个堆由大小不同的块组成,每个块是一个连续的存储器片。申请内存时可以指定堆(socket),或者任意堆,当指定为任意堆时,会优先使用本地堆(本地socket)。结合前面说的dpdk内存初始化,每个堆的原始块是相同socket_id的所有memseg。每个memseg段就是一个地址连续的块。内存申请(rte_malloc)就是把一个堆中...转载 2019-04-30 11:28:33 · 2052 阅读 · 0 评论 -
(转)DPDK内存管理03 -- rte_mempool内存管理
一、文件组织rte_mempool.h:mempool类的属性、方法rte_mempool.c:mempool对象的创建实现、mempool对象与ring对象(默认)的联系。rte_mempool_ops.c:mempool对象的操作方法定义rte_mempool_ring.c:mempoolring类型的操作方法rte_mempool_stack.c:mempool stack...转载 2019-04-30 10:58:40 · 1564 阅读 · 0 评论 -
(转)DPDK内存管理 02 -----初始化
一 前言http://www.dpdk.org/ dpdk 是 intel 开发的x86芯片上用于高性能网络处理的基础库,业内比较常用的模式是linux-app模式,即利用该基础库,在用户层空间做数据包处理,有了这个基础库,可以方便地在写应用层的网络包处理高性能程序,目前该库已经开源。Main librariesmulticore framework 多核框架,dpdk库面...转载 2019-04-30 10:43:56 · 432 阅读 · 0 评论 -
(转)DPDK内存管理 01 -----初始化
1 前言DPDK通过使用hugetlbfs,减少CPU TLB表的Miss次数,提高性能。DPDK将利用hugepage预留的物理内存统一的组织管理起来,然后以库的方式对外提供使用的接口。下图展示了DPDK中内存有关的模块的相互关系。rte_eal 是统一的组织管理者(当然rte_eal不只是做内存的工作)rte_malloc 对外提供分配释...转载 2019-04-30 10:20:53 · 338 阅读 · 0 评论 -
DPDK -1 -- 好的学习网址,记录下好自己查询
https://blog.youkuaiyun.com/hejin_some/article/category/6919298https://blog.youkuaiyun.com/cloudvtech/column/info/22951https://blog.youkuaiyun.com/xy010902100449/article/category/5709001https://blog.youkuaiyun.com/pang...原创 2019-04-24 09:56:55 · 387 阅读 · 0 评论 -
DPDK QOS4 -- PORT数据结构的初始化
DPDK的Port初始化的时候已经把整个树建立起来了,并没有靠配置来动态增加和删除,而且从初始化的整个过程来看,为了后续入队和出队流程的流水线的处理以及cache的处理来加快性能,整个树是被压扁了的。我们先来看看,官网上对于整个数据的组织图示:A schematic of the internal data structures in shown in with details in....原创 2019-04-24 08:49:38 · 748 阅读 · 0 评论 -
DPDP ACL 1 -- DPDK ACL算法介绍
DPDK提供了三种classify算法:最长匹配LPM、精确匹配(Exact Match)和通配符匹配(ACL)。其中的ACL算法,本质是步长为8的Multi-Bit Trie,即每次可匹配一个字节。一般来说步长为n时,Trie中每个节点的出边为2^n,但DPDK在生成run-time structures时,采用DFA/QRANGE/SINGLE这几种不同的方式进行数据结构的压缩,有效去除了...转载 2019-04-19 08:59:54 · 4207 阅读 · 2 评论 -
DPDK QOS 3 -- rte meter令牌桶的实现
为了解决各种限速的问题,我们先来解决TB的实现。令牌桶(Token-Bucket)是目前最常采用的一种流量测量方法,用来评估流量速率是否超过了规定值。关于令牌桶处理报文的方式,RFC 中定义了两种令牌桶算法:单速率三色标记(single rate three color marker,srTCM,RFC2697定义,或称为单速双桶算法)算法,主要关注报文尺寸的突发。 双速率三色标记(...原创 2019-04-19 08:43:34 · 2350 阅读 · 0 评论 -
DPDK QOS2 -- DPDK的QOS框架
VPP HQOS处理报文整体框架如下图所示:上图的QOS就是DPDK实现的HQOS,它的层次如下,官网摘录:The scheduling hierarchy As shown below. The first level of the hierarchy is the Ethernet TX port 1/10/40 GbE, with subsequent hierarchy lev...原创 2019-04-19 08:39:10 · 1810 阅读 · 1 评论 -
DPDK QOS1 -- Linux HQOS的框架
QOS具体的原理这里不展开,QOS包含流量分类、流量标记、流量监管、流量整形、拥塞管理、拥塞避免等技术,上面各种QOS技术在设备上处理的顺序如下:HQOS与传统的一层QOS相比,最大的区别是可以将调度队列划分为如物理级别、逻辑级别、应用或业务级别等多个调度级别,每一级别可以使用不同的特征进行流量管理,为了理解HQOS我们先了解下递归控制的概念,所谓的递归控制就是分层次地控制,而对于每个层次...原创 2019-04-17 21:03:57 · 1724 阅读 · 0 评论 -
深入理解dpdk rte_ring无锁队列
一、简介同样用面向对象的思想来理解无锁队列ring。dpdk的无锁队列ring是借鉴了linux内核kfifo无锁队列。ring的实质是FIFO的环形队列。ring的特点:无锁出入队(除了cas(compare and swap)操作) 多消费/生产者同时出入队使用方法:1.创建一个ring对象。接口:structrte_ring *rte_ri...转载 2019-04-10 17:14:50 · 1137 阅读 · 0 评论 -
对dpdk的rte_ring实现原理和代码分析
前言dpdk的rte_ring是借鉴了linux内核的kfifo实现原理,这里统称为无锁环形缓冲队列。环形缓冲区通常有一个读指针和一个写指针。读指针指向环形缓冲区中可读的数据,写指针指向环形缓冲区中可写的数据。通过移动读指针和写指针就可以实现缓冲区的数据读取和写入。在通常情况下,环形缓冲区的读用户仅仅会影响读指针, 而写用户仅仅会影响写指针。如果仅仅有一个读用户和一个写用户,那么不...转载 2019-04-10 17:13:42 · 3901 阅读 · 0 评论 -
DPDK学习0 -- 学习步骤
1、学习DPDK的基础概念,包括基本原理,基本框架2、学习DPDK 如何编译(X86下),有时间可以深入Makefile学习下,如果构建的整体工程3、DPDK 跑起来 1、启动前的准备,设置大页内存,为何要设置? 2、加载KO,这些KO主要是做什么的? 3、如何绑定网卡的?如何收、发包的?如何RSS的?4、运行L2FWD以及其它的sa...原创 2019-04-08 11:16:18 · 1006 阅读 · 0 评论 -
无锁队列详细分解 — 顶层设计
无锁队列是一个非常经典的并行计算数据结构,已经有很多相关的文章以及论文对其进行了探讨。它在DPDK中是一个非常基础且关键的组件,其中包含了很多非常特定的优化技巧。本文试图从顶层设计和具体实现分别来阐述DPDK无锁队列的优点以及正确使用的边界条件。在开始之前,我们还需要先进行两个知识点的铺垫。RTE_Ring 数据结构 1 2 3 4 5 6...转载 2019-04-03 17:50:55 · 374 阅读 · 0 评论 -
DPDK框架原理简介(0003转)
索引导读:X86平台报文处理加速技术分类总揽 各技术维度及采用的实现技巧产生效果是多维、非线性、相互影响的 “消除IO延迟阻塞CPU”技术实现技巧浅谈 DPDK作为数据转发平台框架是优秀的,但是作为数通产品基础平台,需持续优化随着云计算的兴起,SDN/NFV等网络技术快速发展,越来越多的SDN/NFV开源项目选用DPDK作为基础的报文处理加速平台。本系列文章将深入分析DPDK和硬件体系...转载 2019-04-03 17:03:04 · 839 阅读 · 0 评论 -
DPDK框架原理简介 (0002转)
大纲:一、 网络IO的处境和趋势二、 Linux + x86网络IO瓶颈三、 DPDK的基本原理四、 DPDK的基石UIO五、 DPDK核心优化:PMD六、 DPDK的高性能代码实现七、 DPDK生态一、网络IO的处境和趋势从我们用户的使用就可以感受到网速一直在提升,而网络技术的发展也从1GE/10GE/25GE/40GE/100GE的演变,从中可以得出单机的网...转载 2019-03-29 00:13:55 · 488 阅读 · 0 评论 -
用户态驱动--UIO机制的实现
uio理论部分1.1为什么出现了UIO? 硬件设备可以根据功能分为网络设备,块设备,字符设备,或者根据与CPU相连的方式分为PCI设备,USB设备等。它们被不同的内核子系统支持。这些标准的设备的驱动编写较为容易而且容易维护。很容易加入主内核源码树。但是,又有很多设备难以划分到这些子系统中,比如I/O卡,现场总线接口或者定制的FPGA。通常这些非标准设备的驱动被实现为字符驱动。这些驱动使用...转载 2019-03-29 00:06:28 · 615 阅读 · 0 评论 -
DPDK学习1 -- DPDK环境搭建和测试helloword
官方文档请访问http://dpdk.org/,这里面很多干货DPDK(Intel Data Plane Development Kit)是Intel提供的数据平面开发工具集,专注于网络应用中数据包的高性能处理。DPDK应用程序运行在用户空间,利用自身提供的数据平面库来收发数据包,绕过了Linux内核协议栈对数据包处理过程。DPDK其实也是网络开发框架和开发库、高效数据结构、众多Linux系统...原创 2019-03-29 00:05:01 · 1969 阅读 · 0 评论