导读:初步学习DPDK,发现跟公司项目极其相似,但是公司的项目属于智能网卡,一时间分不清什么是DPDK,什么是智能NIC,找到个腾讯云社区的文档,恍然大悟。.(1)初始设计时,内核没有将数据处理与逻辑控制相分离,网络协议栈实现在内核中。通讯行业的数据面、控制面、管理面分离的理念并没有在
初步学习DPDK,发现跟公司项目极其相似,但是公司的项目属于智能网卡,一时间分不清什么是DPDK,什么是智能NIC,找到个腾讯云社区的文档,恍然大悟。
(1)初始设计时,内核没有将数据处理与逻辑控制相分离,网络协议栈实现在内核中。通讯行业的数据面、控制面、管理面分离的理念并没有在内核中实现
(2)为了将网络协议栈从内核中剥离,最好的方式就是实现一个数据面
(3)由于网卡功能有限,没有逻辑单元,仅负责收发数据包的IO操作以及少量的数据包缓存。大部分协议解析都必须由主机CPU完成。
(https://zhuanlan.zhihu.com/p/347693559)
绕过了内核空间,CPU占用依旧存在。DPDK一般而言都是专门分配一个或者几个CPU核心来处理数据
DPDK是将数据面拉到用户态来处理,跳过内核空间
给网卡赋予逻辑单元,ASIC与FPGA承担高性能网络处理的职责,专门的电路可以及时的处理数据包,无需主机CPU参与。
但是,必须采用专门的软件对专门的硬件进行编程,FPAG需要专门的语言。
网卡上装一个通用的CPU,配备一块足够的内存,构成小型计算机,可执行通用代码。
和DPDK把数据包拉到用户态的方向相反,将处理数据包的代码向下注入网卡。
DPDK是pass内核协议栈,上拉到用户态;
智能网卡:在硬件里offload协议栈
DPDK+ x86CPU + ringbuffer + inter网卡 = 智能网卡
PMD:轮询模式驱动,通过非中断、以及数据帧进出应用缓冲区内核的零拷贝机制,提高发送/接收数据帧的效率
流(Flow)分类:为N元组匹配和LPM(最长前缀匹配)提供优化的查找算法
环队列(ring queue):针对单个或多个数据包生产者、单个数据包消费者的初入队列,提供无锁机制,有效减少系统开销
MBUF缓冲区管理:分配内存创建缓冲区,并通过建立MBUF对象,封装实际数据帧(诸如头部解析,非法报文过滤),供应用程序使用。
EAL:环境抽象(适配)层,PMD初始化,CPU内核和DPDK线程配置/绑定、设置大页内存等系统初始化
用户态模式的PMD驱动,去除中断、避免内核态和用户态内存拷贝,减少系统开销,从而提升I/O吞吐能力
用户态有一个好处,一旦程序崩溃,不至于导致内核完蛋,带来更高的健壮性
HugePage,通过大页减少TLB MISS,miss对报文转发性能影响很大(不会)
多核设备上创建多线程,每个线程邦洞到独立的物理核,减少线程调度开销。同时每个线程对应着独立免锁队列,同样为了降低系统开销。
将网卡接收队列分配给某个CPU核,该队列收到的报文都交给该核上的DPDK线程处理。
存在两种方式将数据包发送到接收队列上:
² RSS机制:根据关键字,比如五元组进行hash
² Flow Director机制:可设定根据数据包某些信息进行精确匹配,分配到指定的队列与CPU核
当网络数据包被网卡接收后,DPDK网卡驱动将其存储在一个高效缓冲区中,并在MBUF缓存中创建MBUF对象与实际数据包相连(没太懂),对网络包的分析和处理都会基于该MBUF,必要的时候才会访问缓冲区中的实际网络包
代码“写入”网卡,此处需要去了解一下Makefile脚本
嵌入式系统:具有专一功能的计算机系统
嵌入式工程师:分为嵌入式硬件工程师和嵌入式软件工程师
嵌入式硬件工程师:负责设计嵌入式系统的硬件原理图,画出PCB,后期配合嵌入式软件工程师调试系统
嵌入式软件工程师:分为BSP工程师和嵌入式应用软件工程师
Board Support Package,板级支持包。(使得板子正常稳定的工作)
板子:
跑操作系统的:
不跑操作系统的:51单片机,stm系列单片机
当然作为一个软件开发人员也必须掌握一些通用的软件,比如:
上一篇:Unity3D学习记录01:UR
下一篇:UnityC#脚本的热更新原理