dpdk时代背景

最初动机

DPDK 最初的动机很简单,就是证明 IA 多核处理器能够支撑高性能数据包处理

硬件加速器
网络处理器
多核处理器

以 Linux 为例,传统网络设备驱动包处理的动作可以概括如下:
‰ 数据包到达网卡设备。
‰ 网卡设备依据配置进行 DMA 操作。
‰ 网卡发送中断,唤醒处理器。
‰ 驱动软件填充读写缓冲区数据结构。
‰ 数据报文达到内核协议栈,进行高层处理。
‰ 如果最终应用在用户态,数据从内核搬移到用户态。
‰ 如果最终应用在内核态,在内核继续进行。

以上三种器件在那一步参与,及dpdk如何优化 。

历史网络收发包优化过程 。

NAPI 机制由每个包触发中断改为系统被中断唤醒后,尽量使用轮询的方式一次处理多
个数据包,直到网络再次空闲重新转入中断等待。

Netmap,它就是采用共享数据包池的方式,减少内核到用户空间的
包复制。

cpu时间片的切换

dpdk优化。

轮询
这一点很直接,可避免中断上下文切换的开销。之前提到 Linux 也采用该方法改
进对大吞吐数据的处理,效果很好。在第 7 章,我们会详细讨论轮询与中断的权衡。
用户态驱动
在这种工作方式下,既规避了不必要的内存拷贝又避免了系统调用。一个
间接的影响在于,用户态驱动不受限于内核现有的数据格式和行为定义。对 mbuf 头格式的
重定义、对网卡 DMA 操作的重新优化可以获得更好的性能。而用户态驱动也便于快速地迭
代优化,甚至对不同场景进行不同的优化组合。在第 6 章中,我们将探讨用户态网卡收发包优化。
亲和性与独占
DPDK 工作在用户态,线程的调度仍然依赖内核。利用线程的 CPU 亲
和绑定的方式,特定任务可以被指定只在某个核上工作。好处是可避免线程在不同核间频繁
切换,核间线程切换容易导致因 cache miss 和 cache write back 造成的大量性能损失。如果更
进一步地限定某些核不参与 Linux 系统调度,就可能使线程独占该核,保证更多 cache hit 的
同时,也避免了同一个核内的多任务切换开销。在第 3 章,我们会再展开讨论。
降低访存开销
网络数据包处理是一种典型的 I/O 密集型(I/O bound)工作负载。无论
是 CPU 指令还是 DMA,对于内存子系统(Cache+DRAM)都会访问频繁。利用一些已知的
高效方法来减少访存的开销能够有效地提升性能。比如利用内存大页能有效降低 TLB miss,
比如利用内存多通道的交错访问能有效提高内存访问的有效带宽,再比如利用对于内存非对
称性的感知可以避免额外的访存延迟。而 cache 更是几乎所有优化的核心地带,这些有意思
而且对性能有直接影响的部分,将在第 2 章进行更细致的介绍。
软件调优
调优本身并不能说是最佳实践。这里其实指代的是一系列调优实践,比如结
构的 cache line 对齐,比如数据在多核间访问避免跨 cache line 共享,比如适时地预取数据,10 第一部分 DPDK 基础篇
再如多元数据批量操作。这些具体的优化策略散布在 DPDK 各个角落。在第 2 章、第 6 章、
第 7 章都会具体涉及。
利用 IA 新硬件技术
IA 的最新指令集以及其他新功能一直是 DPDK 致力挖掘数据包处
理性能的源泉。拿 Intel® DDIO 技术来讲,这个 cache 子系统对 DMA 访存的硬件创新直接助
推了性能跨越式的增长。有效利用 SIMD(Single Instruction Multiple Data)并结合超标量技
术(Superscalar)对数据层面或者对指令层面进行深度并行化,在性能的进一步提升上也行之
有效。另外一些指令(比如 cmpxchg),本身就是 lockless 数据结构的基石,而 crc32 指令对
与 4 Byte Key 的哈希计算也是改善明显。这些内容,在第 2 章、第 4 章、第 5 章、第 6 章都
会有涉及。
充分挖掘网卡的潜能
经过 DPDK I/O 加速的数据包通过 PCIe 网卡进入系统内存,PCIe
外设到系统内存之间的带宽利用效率、数据传送方式(coalesce 操作)等都是直接影响 I/O 性
能的因素。在现代网卡中,往往还支持一些分流(如 RSS,FDIR 等)和卸载(如 Chksum,
TSO 等)功能。DPDK 充分利用这些硬件加速特性,帮助应用更好地获得直接的性能提升。
这些内容将从第 6 章~第 9 章一一展开。
除了这些基础的最佳实践
本书还会用比较多的篇幅带领大家进入 DPDK I/O 虚拟化
的世界。在那里,我们依然从 I/O 的视角,介绍业界广泛使用的两种主流方式,SR-IOV 和
Virtio,帮助大家理解 I/O 硬件虚拟化的支撑技术以及 I/O 软件半虚拟化的技术演进和革新。
从第 10 章到第 14 章,我们会围绕着这一主题逐步展开。

在DMA模式下,CPU只须向DMA控制器下达指令,让DMA控制器来处理数的传送,数据传送完毕再把信息反馈给CPU,这样就很大程 度上减轻了CPU资源占有率。DMA模式与PIO模式的区别就在于,DMA模式不过分依赖CPU,可以大大节省系统资源,二者在传输速度上的差异并不十分 明显。

DPDK框架

网络数据转发流程

网卡接口->网卡内存->pcie->内核->用户

衡量单位

吞吐
包转发率(pps,每秒包转发率)
线速(Wire Speed)是线缆中流过的帧理论上支持的最大帧数
延迟
丢包率
抖动

1.4

Guess you like

Origin blog.csdn.net/qq_38595432/article/details/118709941