问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

那些以CPU为中心设计的I/O加速框架(一)

创作时间:
作者:
@小白创作中心

那些以CPU为中心设计的I/O加速框架(一)

引用
1
来源
1.
http://www.360doc.com/content/24/0701/11/36367108_1127578574.shtml

随着网络技术的快速发展,传统的操作系统网络堆栈已经无法满足高速网络的需求。为此,众多网络I/O加速框架应运而生,通过各种优化策略,极大地提高了数据包处理的性能。本文将介绍几种主要的以CPU为中心的网络I/O加速框架,包括netmap、Intel DPDK、PF_RING ZC、XDP、PacketShader和Snabb Switch。

netmap

netmap是由Luigi Rizzo在2012年提出的一个高效网络I/O框架,旨在通过简化I/O路径和减少内核/用户空间的切换来提升数据包处理性能。netmap通过将网络接口卡(NIC)的DMA缓冲区直接映射到用户空间,使应用程序可以直接访问和处理数据包。最初netmap主要在FreeBSD上开发和测试,但现在也支持Linux和Windows。

netmap起初是为了满足高性能网络应用的需求而开发的,特别是在高速网络环境下的网络测量和监控。随着时间的推移,netmap逐渐被广泛应用于网络设备测试、网络功能虚拟化(NFV)和其他需要高吞吐量的网络应用中。

采用的主要优化方法

  1. 直接映射硬件缓冲区:netmap将NIC的DMA缓冲区直接映射到用户空间,避免了内核态与用户态之间的数据拷贝,从而减少了数据包处理的延迟和开销。
  2. 简化的I/O路径:通过简化I/O路径,netmap减少了传统网络堆栈中的复杂处理步骤,降低了处理开销,提高了数据包处理的吞吐量。
  3. 批量处理:netmap支持批量数据包处理,提升了缓存命中率和数据处理效率。

Intel DPDK

Intel DPDK(Data Plane Development Kit)是一个由Intel开发的高性能数据包处理框架,最早发布于2010年。DPDK通过用户态轮询、巨页内存和内存池管理等技术,显著提升了数据包处理性能。DPDK主要面向电信和数据中心的高性能网络应用。

DPDK最初是Intel为其网络接口卡开发的专用库,旨在展示其硬件在高性能环境下的能力。随着其高效性被广泛认可,DPDK迅速发展成一个通用的高性能数据包处理库,并被广泛应用于各种高性能网络应用中。

DPDK拥有一个活跃的开源社区,支持多种硬件平台和操作系统。其丰富的库和示例代码为开发者提供了强大的支持,使其在工业界和开源社区中得到了广泛应用。

采用的主要优化方法

  1. 轮询模式驱动:DPDK采用轮询模式驱动(polling mode driver),取代传统的中断驱动模式,避免了中断处理带来的上下文切换和延迟,尤其在高数据包率下表现尤为突出。
  2. 巨页内存:DPDK利用巨页内存减少TLB(Translation Lookaside Buffer)命中率,降低内存访问的开销,提高数据包处理速度。
  3. 内存池管理:DPDK实现了一种高效的内存池管理机制,用于分配和回收数据包缓冲区,减少了内存分配和回收的开销,避免了内存碎片问题。
  4. 批量处理:支持批量数据包处理,提高了每次处理多个数据包的效率,增强了整体吞吐量。

PF_RING ZC

PF_RING ZC(Zero Copy)是由ntop开发的高性能网络I/O框架,通过零拷贝机制和直接内存访问(DMA),实现高效的数据包处理。PF_RING ZC主要用于网络流量监控和分析,旨在提高数据包捕获和处理的效率。

PF_RING由ntop创始人Luca Deri开发,最初是一个Linux内核模块,用于高效的数据包捕获。随着需求的增加,PF_RING逐渐演化为支持零拷贝的PF_RING ZC,进一步提升了性能和效率。

PF_RING ZC广泛应用于网络流量监控、入侵检测系统(IDS)、数据包捕获和分析等领域。由于其高效的性能,PF_RING ZC在需要实时数据包处理的应用中表现出色。

采用的主要优化方法

  1. 零拷贝机制:PF_RING ZC通过零拷贝机制,实现数据包在从网卡到应用程序的传输过程中不进行任何内存拷贝,消除了内存拷贝的开销,大幅提高了数据包处理速度。
  2. 直接内存访问(DMA):利用网卡的DMA功能,将数据包从网卡缓冲区直接传输到用户空间,减少了内核介入的开销,提高了数据传输效率。
  3. 用户态数据包处理:将数据包处理从内核移到用户空间,使得应用程序能够直接处理数据包,减少了内核上下文切换的开销,提高了处理性能。

XDP(eXpress Data Path)

XDP(eXpress Data Path)是近些年Linux内核中的一个高性能、可编程数据路径技术,能够在极低的延迟下处理网络报文。XDP依托于eBPF(extended Berkeley Packet Filter)技术,通过直接在网卡驱动程序层执行用户定义的代码,实现了高效的数据包处理,绕过了传统网络栈的开销。以下是XDP发展的几个重要里程碑:

  • eBPF的引入:eBPF最初用于实现高效的包过滤,但随着时间推移,其功能逐渐扩展,成为一个通用的内核编程框架。
  • XDP的诞生:由Linux网络开发团队提出,旨在利用eBPF的能力直接在网卡驱动程序的接收路径上处理数据包。
  • 不断优化与扩展:自从首次引入以来,XDP持续得到优化和扩展,支持更多的硬件和提供更广泛的功能。

采用的主要优化方法

  1. 绕过网络栈:XDP处理的数据包在进入Linux内核网络栈之前就被捕获和处理。这种“前置”处理极大减少了上下文切换和内核路径的延迟,提升了整体处理效率。
  2. 零拷贝:XDP支持直接在接收缓冲区中处理数据包,避免了多次数据拷贝。这不仅降低了CPU开销,还提升了内存带宽利用率。
  3. 硬件卸载:部分网卡(例如Intel的网卡)支持在硬件层直接运行XDP程序。这进一步减少了CPU负载,将部分数据包处理任务卸载到网卡硬件中执行。
  4. 批处理:XDP允许批量处理数据包,减少系统调用次数和处理开销。一次性处理多个数据包,可以显著提升吞吐量和性能。

PacketShader

PacketShader是由韩国科学技术院(KAIST)的研究人员开发的高性能数据包处理框架,利用GPU的并行计算能力来加速数据包处理。PacketShader将数据包处理的任务分解并分发到GPU上,使其可以同时处理大量数据包,从而提高了处理性能。

PacketShader的开发始于2010年,旨在探索GPU在数据包处理中的潜力。其研究成果表明,利用GPU的并行计算能力可以显著提升数据包处理的效率。PacketShader的研究成果在学术界引起了广泛关注,并促进了后续类似研究的开展。

尽管PacketShader在工业界的应用有限,但其研究成果为GPU加速网络处理提供了重要的理论基础。PacketShader的概念和技术在网络功能虚拟化(NFV)和高性能计算(HPC)领域有潜在的应用价值。

采用的主要优化方法

  1. GPU并行计算:利用GPU的强大并行计算能力,同时处理多个数据包,大幅提高了数据包处理的吞吐量。
  2. 异步处理:PacketShader在CPU和GPU之间采用异步处理模式,充分利用CPU和GPU的计算资源,减少了处理延迟。
  3. 批量数据传输:通过批量数据包传输和处理,减少了数据传输的开销,提高了整体处理效率。

Snabb Switch

Snabb Switch是一个开源的高性能网络I/O框架,基于LuaJIT编程语言实现。Snabb Switch通过用户态网络栈和高效的I/O处理机制,实现了高吞吐量和低延迟的数据包处理。

Snabb Switch由Luke Gorrie于2012年创立,旨在提供一个简单、高效的网络I/O解决方案。其开源社区活跃,随着时间的推移,Snabb Switch逐渐发展成一个功能强大的网络处理框架。

Snabb Switch被广泛应用于网络功能虚拟化、云计算和高性能网络应用中。其用户态网络栈和高效的I/O处理能力,使其在需要低延迟和高吞吐量的网络环境中表现优异。

采用的主要优化方法

  1. 用户态网络栈:Snabb Switch在用户态实现网络栈,避免了内核态和用户态之间的频繁切换,提高了数据包处理效率。
  2. LuaJIT编译器:利用LuaJIT编译器的高效性,编译和执行网络I/O处理代码,减少了运行时开销。
  3. 模块化设计:采用模块化设计,使得不同的网络功能可以独立开发和优化,提高了系统的灵活性和可扩展性。

以CPU为中心的网络I/O加速框架通过多种优化策略,极大地提高了数据包处理的性能。但是随着摩尔定律失效,CPU性能发展速度已经远远跟不上各种I/O设备的发展速度和需求,是时候放手让该干的人去干应该干的事情了。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号