![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DPDK学习
文章平均质量分 85
庞叶蒙
没有最牛逼的技术,只有最适合的技术。
展开
-
DPDK-同步互斥机制
0x01 缘由 继续学习DPDK设计思想。0x02 概念 原子操作:多个线程执行一个操作时,其中任何一个线程要么完全执行完此操作,要么没有执行此操作的任何步骤,那么这个操作就是原子的。原子操作操作系统中:“不能被进一步分割的最小粒子”。 原子保证操作:一些基础的内存事务操作,如对一个字节的读和写,它们总是原子的。对于边界对齐的字节、字、双字和四字节都可原创 2017-11-15 15:02:51 · 1557 阅读 · 0 评论 -
DPDK-实战之skeleton(basicfwd)
0x01 缘由 继续学习DPDK示例,主要熟悉每个环节和设计理念,今天要学习的是一个相对简答的服务,仅仅从一个网口抓取数据包转发到另外一个网口,这样做双向转发,相当于桥的功能。其他基础业务都不做。0x02 直接上源码分析#include #include #include #include #include #include #include #define R原创 2017-10-13 15:17:32 · 4848 阅读 · 1 评论 -
DPDK-实战之helloworld
0x01 缘由 “纸上得来终觉浅,绝知此事要躬行”,前面学习了linux tcp/ip协议栈、DPDK基础理论,学下来的感觉是:以前对这几个方面都充满敬畏感,觉得很神秘、很高端,但是学习下来总结了一点----只要不断去摸索去调式去找资料,不懂的都会变得你懂的。仅仅学习理论是不够的,还得在实践中运用。然而在公司产品实践中有时无法接触这方面的知识的应用,所以只能通过一些例子和实现开源解决方原创 2017-10-12 16:06:07 · 6119 阅读 · 0 评论 -
DPDK-实战之l3fwd-vf(虚拟化环境)
0x01 缘由 年初,学习了l3fwd的例子,进行三层转发,现在学习下特定转发,这个在虚拟化设备中常见,也是加强对dpdk的熟悉。0x02 介绍 在虚拟化环境下的L3层转发应用是用DPDK处理数据包的一个简单例子。这个L3层转发应用充分发挥SR-IOV的特征。 这个应用演示如何使用hash和LPM DPDK库去实现数据包转发。这个转发策略是基于输入包的信息。原创 2017-10-19 10:45:34 · 6688 阅读 · 1 评论 -
DPDK-KERNEL NIC INTERFACE(内核NIC接口)
0x01 缘由 还是继续学习DPDK相关知识点,前期在用户态协议栈的研究过程中,使用到了虚拟设备,现在了解一下DPDK的虚拟设备的用法和实现。0x02 介绍 DPDK内核NIC接口(KNI)允许用户态应用程序访问linux*控制面板。 DPDK KNI的优势: a.比Linux TUN/TAP接口要快(通过消除系统调用copy_to_user()原创 2017-08-30 16:30:24 · 2107 阅读 · 0 评论 -
DPDK-MULTI-PROCESS SUPPORT 多进程支持
0x01 缘由 最近学习DPDK,翻译DPDK相关文档,已经将基础的数据结构走读了一次,现在就是温习和实践相关例子。0x02 介绍 在DPDK中,多进程支持旨在允许一组DPDK进程以简单的透明方式协同工作,来处理数据包或其他工作负载。为了支持此功能,已经对核心DPDK环境抽象层(EAL)进行了一些增加。 EAL已被修改为允许不同类型的DPDK进程被产生,每个原创 2017-08-29 15:01:11 · 4160 阅读 · 2 评论 -
DPDK-包分类和访问控制(PACKET CLASSIFICATION AND ACCESS CONTROL)
0x01 缘由 继续学习DPDK -ing。 0x02 介绍 DPDK提供一个访问控制库(ACL),可以基于分配规则去对输入的包进行分类。 ACL库用于对具有多个类别的一组规则执行N元组搜索,并为每个类别找到最佳匹配(最高优先级)。 API: 1.创建一个新的AC上下文; 2.加入规则到上下文;原创 2017-09-07 11:18:59 · 818 阅读 · 0 评论 -
DPDK-PACKET DISTRIBUTOR LIBRARY 包分发库
0x01 缘由 在产品开发过程中,通过无锁队列去实现生产者和消费者模型。类似DPDK下面这种模式类似,单生产者多消费者模式。0x02 简介 DPDK包分发库使用来做流量动态负载均衡,而一次仅支持单个数据包。但使用这个库时,逻辑核的绑定要考虑两种用途:(1)一个分发逻辑核,负责负载均衡和派发包。(2)许多工作逻辑核负责接收分发器分发的数据包然后进行处理。这个模式如下图:原创 2017-08-24 12:05:22 · 2065 阅读 · 0 评论 -
DPDK-服务质量(QOS)框架
0x01 缘由 继续学习dpdk相关文档。QoS听了、看了好多次,但是从来没接触,趁现在学习下。 QoS(Quality of Service,服务质量)指一个网络能够利用各种基础技术,为指定的网络通信提供更好的服务能力, 是网络的一种安全机制, 是用来解决网络延迟和阻塞等问题的一种技术。0x02 介绍 DPDK Quality of Service原创 2017-09-06 09:13:22 · 3514 阅读 · 0 评论 -
DPDK-IP分片和重组库
0x01 缘由 在网络数据包处理过程中,大量的包处理,就涉及到IP分片和重组。TCP/IP协议原理中,有对为什么要IP分片有描述。 在TCP/IP分层中,数据链路层用MTU(Maximum Transmission Unit,最大传输单元)来限制所能传输的数据包大小,MTU是指一次传送的数据最大长度,不包括数据链路层数据帧的帧头,如以太网的MTU为1500字节,实际上数据帧原创 2017-08-28 11:01:38 · 4635 阅读 · 0 评论 -
DPDK-工具脚本网卡与驱动绑定
0x01 缘由 dpdk_nic_bind.py脚本功能,将网卡名称同dpdk支持的驱动进行绑定,直接修改相关参数来达到此目的。此脚本处理流程:解析参数、检测网卡、将对应的网卡与对应驱动绑定。 脚本做了异常处理:防止断开ssh连接,避免将DPDK驱动绑定到管理网口上。0x02 源码注释 直接上源码目的,复习python和看如何手动绑定驱动。import sys原创 2017-11-09 13:19:24 · 7912 阅读 · 0 评论 -
DPDK-实战之load_balancer(负载均衡)
0x01 缘由 “负载均衡”这个名词经常听,实际实践中也有过尝试。利用DPDK来做数据流量的负载均衡。我现在负责的产品中,有一个教智能分流设备,可以根据一些规则对流量进行转发。用DPDK可以适合这种场景不?显然,只要专注其中,可以为公司节约很大的成本。0x02 介绍 简单的负载均衡器应用表明一个将数据包IO操作与应用处理过程隔离。依据执行目标,将一些逻辑核专门做数据包的接收原创 2017-10-24 15:19:07 · 7898 阅读 · 1 评论 -
DPDK-UIO 驱动认识
0x01 缘由 前期学习了一些DPDK的demo,了解了一些基础DPDK的应用。对dpdk的一些底层原理没做过多分析,今天主要学习用户态驱动程序的实现情况。0x02 用户态驱动程序UIO UIO(Userspace I/O)是运行在用户空间的I/O技术。Linux系统中一般的驱动设备都是运行在内核空间,而在用户空间用应用程序调用即可。 UIO的内核部分和用户空间的原创 2017-11-06 14:52:02 · 9070 阅读 · 1 评论 -
DPDK-__attribute__((constructor))
0x01 缘由 在DPDK库开发过程中,遇到的问题。做个简短小结。#include__attribute__((constructor)) void before_main() { printf("Before main\n");}__attribute__((destructor)) void after_main() { printf("After main\n")原创 2017-11-20 10:36:19 · 896 阅读 · 0 评论 -
DPDK-并行计算
0x01 缘由 继续学习DPDK在并行计算上的优化。对于DPDK的主要应用领域--数据包处理。资源局部优化、避免跨核共享、减少临界区碰撞、加快临界区皖苏完成速率,都不同程度地降低了不可并行部分和并发干扰部分的占比。0x02 慨念 多核处理器:在一个处理器中集成两个或者多个完整的内核(及计算引擎)。 超线程(Hyper-Threading):在一个处理器中提供两个逻原创 2017-11-14 16:33:44 · 674 阅读 · 0 评论 -
DPDK-利用DPDK开发项目应该注意的性能点
0x01 缘由 最近也在尝试写一个DPDK应用程序,也是对之前的学习做一下检验。然而在编写过程中,发现自己陷入到一个码API的思路中,完全没有考虑到DPDK的设计思想,于是放开编程指南,学习下。0x02 写高效的代码 Intel® 64 and IA-32 指导手册。 1.内存 内存拷贝:建议不要使用libc中的memcpy函数,而用rte_memcpy原创 2017-11-28 15:44:31 · 5607 阅读 · 0 评论 -
DPDK-KNI学习和利用(DNS服务)
0x01 缘由 看到这个例子,不禁想起前期我们做的一个项目,我们通过pfring捕获数据包,想让这个数据包再回到linux协议栈,然后访问我们的服务。我记得我们采用的方式是将两个物理网卡相连,然后数据包转发到另外一个普通网卡,让其进Linux协议栈处理流程。 同样KNI也是一种方式,用DPDK捕获数据包让其走linux协议栈去处理。0x02 KNI是咋回事? KN原创 2017-11-03 16:43:24 · 7795 阅读 · 0 评论 -
DPDK-Cache和内存优化点
0x01 缘由 在一篇博文中看到false-sharing问题(多核编程中伪共享问题),引发了我对DPDK内存和Cache的思考和学习。看看这些知识点,大部分都是计算机组成原理和操作系统的知识点,如果做系统编程,这些知识点不能还给大学老师。0x02 概念 南桥:系统I/O芯片(SI/O):主要管理中低速外部设备;集成了中断控制器、DMA控制器、PCI网卡等。 北原创 2017-11-13 15:49:51 · 1545 阅读 · 0 评论 -
DPDK-实战之Virtio/vhost(虚拟技术)
0x01 缘由 在现在云计算和大量的数据中心建设过程中,虚拟化技术快速发展,也来了解下vhost。0x02 介绍 通过vhost-net卸载API来将DPDK技术和LINUX KVM虚拟化技术集成。这个应用简单执行了基于虚拟机之间的MAC地址或VLAN数据包交换。来自外部交换机的以太网流量的分割由英特尔®82599万兆以太网控制器的虚拟机设备队列(VMDQ)和数据中心桥接(原创 2017-10-26 11:06:34 · 2818 阅读 · 0 评论 -
DPDK-实战之ipsec-secgw(安全网关)
0x01 缘由 看到了比较陌生的名词觉得比较高大上,于是想探究下。0x02 介绍 IPsec 安全网关应用是用DPDK cryptodev框架的一个实际应用例子。 这个应用说明用DPDK实现的一个安全网关,基于RFC4301, RFC4303, RFC3602、RFC2404标准。IKE不实现,因此仅仅手动设置安全策略。 安全策略(SP)用ACL规则实现原创 2017-10-25 16:25:21 · 6764 阅读 · 1 评论 -
DPDK-实战之rxtx_callbacks(回调函数)
0x01 缘由 继续学习DPDK相关例子。此例子为用用户定义的回调函数来为所有接收的数据包添加时间戳,计算每个数据包转发的时间。0x02 源码 此例子与上篇《DPDK-实战之skeleton(basicfwd)》有一点点不同,此处仅列出不同之处。 static inline intport_init(uint8_t port, struct rte_mempoo原创 2017-10-16 14:21:04 · 1780 阅读 · 0 评论 -
DPDK-LPM LIBRARY 最长前缀匹配算法
0x01 缘由 最近,在学习路由相关协议,前期接触dpdk,我想在大数据中心的环境、虚拟化技术等场景下,数据转发服务,如何找到目标,这个技术必定为用到路由技术。0x02 介绍 最长前缀匹配(LPM)算法是指在IP协议中被路由器用于在路由表中进行选择的一个算法。 因为路由表中的每个表项都指定了一个网络,所以一个目的地址可能与多个表项匹配。最明确的一个表项--即原创 2017-08-23 12:10:26 · 7049 阅读 · 1 评论 -
DPDK-THREAD SAFETY OF DPDK FUNCTIONS(线程安全函数)
0x01 缘由 继续学习dpdk相关特性。0x02 介绍(基本上是翻译学习) DPDK由许多库组成。在这些库里面有些函数能被多线程安全调用,有些不能是线程安全的。本节允许开发人员在构建自己的应用程序时考虑这些问题。 DPDK典型的运行环境为单逻辑核单线程模式。在一些场景,它不仅是多线程,而且是多进程模式。通常,最好避免在可能的情况下在线程和/或进程之间共享数原创 2017-09-04 15:44:28 · 509 阅读 · 0 评论 -
dpdk IP分片
Ip_fragmentation的处理流程 1.初始化EAL环境先rte_eal_init(argc, argv)初始化EAL环境,确定绑定的核数,队列数。解析parse_args(argc, argv)参数,如-c是确定虚拟的内核数。2.获取网卡的数目通过函数rte_eth_dev_count()来获取网卡的数目。3. 获取核的个数通过函数rte_lcore_coun原创 2017-06-11 10:41:14 · 2114 阅读 · 0 评论 -
DPDK测试
1安装环境软件建议版本GNUmake coreutils:cmp, sed, grep, arch gcc:versions >= 4.5.xlibcheaders (glibc-devel.i686 / libc6-dev-i386; glibc-devel.x86_64 for 64-bitcompilation)Linuxkernel headers or sour原创 2017-06-11 10:39:57 · 3504 阅读 · 0 评论 -
hyperscan 学习-跨包检测
hyperscan原创 2017-05-27 15:09:50 · 7681 阅读 · 2 评论 -
hyperscan --/examples/simplegrep.c
转载于:http://www.cnblogs.com/zzqcn/p/4904290.html目录1. 概述2. 源码解读2.1 编译正则表达式(compile)2.2 进行匹配(scan)2.3 清理资源3. 编译运行 正文示例位置: /examples/simplegrep.c参考:http://01org.github.io/hyp转载 2017-05-27 09:31:46 · 1870 阅读 · 0 评论 -
DPDK-L3fwd测试
0x01 DPDK运行要求注意:不同DPDK版本可能要求不同0x02Centos 6.5 x86_64环境查看Cpu信息:运行lscpu,输出如下:socket:主板上插cpu的槽的数目;core:就是我们平时说的“核“,每个物理CPU可以双核,四核等;①物理CPUcat /proc/cpuinfo |grep "physicalid"|sort原创 2017-02-15 21:38:57 · 31280 阅读 · 6 评论 -
DPDK环境搭建和测试
1安装环境建议版本GNUmake coreutils:cmp, sed, grep, arch gcc:versions >= 4.5.xlibcheaders (glibc-devel.i686 / libc6-dev-i386; glibc-devel.x86_64 for 64-bitcompilation)Linuxkernel headers or source原创 2015-11-17 10:02:58 · 11618 阅读 · 0 评论 -
DPDK内存管理 原文地址:http://www.cnblogs.com/jintianfree/p/4018043.html
1 前言 DPDK将利用hugepage预留的物理内存统一的组织管理起来,然后以库的方式对外提供使用的接口。下图展示了DPDK中内存有关的模块的相互关系。rte_eal 是统一的组织管理者(当然rte_eal不只是做内存的工作)rte_malloc 对外提供分配释放内存的API,分配的内存都是rte_eal中管理的内存rte_ring转载 2015-03-13 15:37:56 · 1443 阅读 · 0 评论 -
Linux-千兆网卡驱动实现机制浅析 原文地址:http://blog.csdn.net/fengying765/article/details/6776394
网卡作为一个PCI设备,其必须遵守相应的PCI规范,即必须为网卡定义相应的标识号,每个PCI外设由一个总线编号、一个设备编号及一个功能编号来标识。网卡驱动程序则需要定义相应的pci_device_id结构来表示其支持的PCI外设的标识…… 1.引言 本分析主要针对e1000网卡,驱动源码为7.3.20-k2。本文的目的不是为了讲述如何编写驱动程序,主要是分析网卡驱动内部的实现机制。通过此转载 2015-03-16 15:49:00 · 5349 阅读 · 0 评论 -
DPDK IP重组
1ip_reassembly功能介绍 ip_reassembly模块是在IP层将分片的IPv4和IPv6的报文进行重组。它是通过rte_ipv4_frag_reassemble_packett()和rte_ipv6_frag_reassemble_packet ()两个函数进行重组。2分片与IP首部1、对于原创 2017-06-11 10:43:18 · 2584 阅读 · 0 评论 -
Dpdk distrabutor
1.创建分流器distrabutor首先要检测系统的核数,核数至少需要2个才可以运行,建议核数大于等于3个,可以在分配worker时达到较好的效果。接下来就创建分流器了static struct rte_distributor *d;d =rte_distributor_create("Test_distributor", rte_socket_id(),原创 2017-06-11 10:49:39 · 1435 阅读 · 0 评论 -
DPDK-REORDER LIBRARY 排序库
0x01 缘由 排序,不要与tcp流重组排序混淆,而且下文踢桃序列号和tcp序列号不是同一个。此库为非线程安全的。0x02 介绍 1.引言 Reorder Library 提供一种机制依据序列号对mbuf进行排序。 2.操作 Reorder Library实质上是一个mbuf有序buffer。使用者将乱序的mbuf插入到有序的buff原创 2017-08-25 14:47:31 · 791 阅读 · 0 评论 -
DPDK-ELASTIC FLOW DISTRIBUTOR LIBRARY(灵活的流分发库)
0x01 缘由 好的流表设计,在大量网络产品中是一个相当重要的环节,如dpi产品、取证产品、内容审计产品等。0x02 简介 1.介绍 在数据中心的当代,集群和工作负载的调度是一个非常普遍的任务。许多工作负载在集群中需要有一个确切的分区key空间。当一个包进入集群,在进入节点直接将数据包分发的处理节点。例如,具有分解存储的数据中心使用存储元数据将I/O请求转原创 2017-08-22 15:45:15 · 1872 阅读 · 0 评论 -
DPDK-Mbuf 结构学习MBUF LIBRARY
0x01 缘由 在安全行业,对数据包的处理是一个必须的过程,好的数据包存储结构可以减少对内存的拷贝,发现在我们产品开发过程中对数据包结构的存储和处理比较简单,当然效率可能没追求极致。本着学习和开阔视野的心,再次学习DPDK Mbuf结构。0x02 介绍 对于数据报文的存储(包括协议头),可以考虑如下两种方式: 1、将网络帧元数据(metadata原创 2017-08-05 13:03:46 · 3175 阅读 · 0 评论 -
DPDK-TIMER LIBRARY 定时器
0x01 缘由 在实践产品开发中,有一些超时任务需要利用到定时器、资源定时回收也需要定时器。如流表超时等。所以学习了下DPDK的定时器特点,以及简单实现。0x02 DPDP定时器介绍 DPDK 定时器库,为DPDK定时执行异步调用回调函数的定时服务。这个库有如下特点: 定时器能定期执行(多个时间槽)或者执行一次(单个时间槽); 定时器能够在一个逻原创 2017-08-12 16:14:27 · 2955 阅读 · 0 评论 -
DPDK-网络收发包平台优化及配置优化
0x01 缘由 最近产品中在做高效的数据包处理,当在实际场景部署时对硬件的优化也有涉及,主要设计网卡、逻辑核绑定、内存分配等。下面从DPDK去学习一些经验。同时这些优化,也可以用于其他高并发服务器优化上。0x02 DPDK DPDK本身对性能做了很多优化,但实际上要在某个平台上抛出最优的性能也不是一件容易的事情,这其中就设计硬件软件各个方面的配置和注意事项。原创 2017-08-11 09:17:33 · 2190 阅读 · 1 评论 -
DPDK-POLL MODE DRIVER
0x01 缘由 网卡接受数据包时常见为异步中断模式,而DPDK采用轮询模式,以及混合中断轮询模式,然后做了较多的优化,如Burst收发包、批处理和时延隐藏、Intel SIMD指令。虽然这些特点今后可能不会用到,但是了解毕竟只有好处。0x02 DPDK 此库特点 DPDK包括1Gb,10Gb,40Gb和半虚拟化抽象层的轮询模式驱动(PMD, Poll Mode原创 2017-08-10 14:00:02 · 2261 阅读 · 0 评论 -
DPDK-Ring 结构学习MEMPOOL LIBRARY
DPDK中mempool原创 2017-08-02 12:10:31 · 2804 阅读 · 0 评论