找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

483

积分

0

好友

64

主题
发表于 5 天前 | 查看: 16| 回复: 0

二、背景与动机

基于软件的数据包处理至关重要,相关研究也层出不穷。本节将回顾现有工作,并指出LinuxFP旨在填补的关键空白。

A. 快速软件数据包处理

我们首先关注软件数据包处理在性能方面取得的进展。该领域研究成果丰硕,以下重点介绍三项标志性技术:

Click 模块化路由器

Click模块化路由器[32]旨在解决传统路由器封闭、缺乏灵活性的问题。它提供了一个框架,允许开发者或管理员通过组合称为“元素”的模块来构建数据包处理流水线。开发者也可以通过编写新的C++类元素来扩展功能。尽管Click的设计初衷是灵活性,但其性能表现同样出色——比执行类似功能的Linux内核网络栈快4倍。作者将此归功于对数据包和I/O处理的优化。Click的意义在于,它为网络研究者提供了一个完整的框架,便于快速创建高性能网络应用,并催生了大量后续研究。

DPDK

数据平面开发套件(DPDK)[21]是一个用户态数据包处理框架。它在安全性、易调试性方面更具优势。尽管Click也能在用户态运行,但其性能远低于内核态。DPDK通过一组库优化了用户态网络性能,核心是内核旁路技术和高效的数据结构。开发者可利用DPDK库构建定制化的处理流水线。

eBPF/XDP

DPDK的主要问题在于,其通过绕过内核来换取高性能,但这牺牲了与Linux网络栈的深度融合能力。eBPF是一种能在内核多个钩子点安全加载代码的技术。在网络层面,快速数据路径(XDP)[30]提供了一个早期钩子,用于构建高性能数据路径。其加载的代码由内核验证器保证安全,并能通过helper函数或标准接口与内核其他部分交互(如查询FIB、将数据包上送协议栈)。可以说,XDP兼具了Click的可扩展性、DPDK的高性能以及内核的交互性。

然而,Click、DPDK和XDP都属于“使能技术”,而非完整的平台。它们提供了构建流水线的能力,但若要形成一个包含控制平面和完整数据平面功能的可用平台,仍需要大量额外且艰巨的工作。

B. 数据包处理平台

为此,一些项目致力于提供开箱即用的完整解决方案。

VPP

向量包处理器(VPP)[9]是一个运行在用户态的L2-L4网络协议栈。它类似于一个即插即用的网络设备(如交换机、路由器),具备固定的数据平面,可通过CLI或API进行配置。VPP基于DPDK构建,并采用向量处理(包批处理)技术以实现高性能。它内置了丰富的功能,支持虚拟交换机、路由器、防火墙和负载均衡器等用例。

Polycube

Polycube[37]是一个基于eBPF技术构建的平台,其数据平面直接运行在内核中。它同样具备一个固定的数据平面,提供IP转发、负载均衡、过滤等基础功能,并通过自定义CLI进行配置。

分析

从某种程度上说,VPP和Polycube都是Linux网络栈的替代方案。尽管VPP运行于Linux之上,Polycube运行于内核之中,但它们与Linux原生的网络处理流水线交互甚少。这带来两个主要弊端:首先,它们与成熟的Linux网络管理生态(如netlink、iproute2)及大量依赖此生态的控制平面软件(如FRR)不兼容,用户必须学习平台特定的管理接口。其次,平台开发者需要重新实现大量基础功能(如转发表查询、ARP/ICMP响应、路由协议),这是一项繁重的重复劳动。

简而言之,现有的替代方案对系统不透明,为了获得加速收益,整个应用环境都需要为特定平台进行改造。

图片

图 1:Linux 转发处理的火焰图分析

C. Linux 网络栈中的热点区域

在自定义平台中完整复现Linux网络API是一项艰巨的任务。我们的思路并非重新造轮子,而是思考如何以最小的改动,将加速技术集成到现有Linux网络栈中,从而获得大部分性能收益。为了确定改动的关键位置,我们通过火焰图[29]等技术,在不同配置和流量模式下寻找代码执行中的“热点区域”。

以一个简单的IP转发配置为例,使用 ip route 命令后,我们观察到(如图1所示)大部分数据包遵循相同的函数调用序列。这一发现具有启发性:Linux网络处理确实存在热点,其具体位置取决于网络配置。表 I 总结了在桥接、转发、过滤和负载均衡场景下的分析结果。我们梳理了哪些功能可以通过“快速路径”加速以最大化性能,快速路径需要访问哪些内核状态,以及哪些功能应保留在“控制路径”或“慢速路径”中。这些观察构成了LinuxFP系统设计的基础。

表 I:不同数据包处理应用的加速模型

子系统 快速路径 (Fast Path) 内核状态 (In-Kernel State) 控制平面 + 慢路径 (Control Plane + Slow Path)
桥接 解析、重写、FDB 查询/更新、转发 FDB、端口状态 管理FDB(老化)、处理FDB缺失(泛洪)、STP协议处理
转发 解析、重写、FIB 查询、转发 FIB、邻居表 ARP处理、IP(反)分片
Netfilter 解析、重写、连接跟踪查询/更新、允许/丢弃数据包 连接跟踪表、ACL规则 连接跟踪处理、IP(反)分片、处理复杂/不支持钩子的规则
负载均衡 (ipvs) 解析、重写、连接跟踪查询/更新 连接跟踪表 连接跟踪处理、调度算法执行

参考相关:




上一篇:IDOR漏洞挖掘高级技巧:盲注、ID泄露与组合攻击渗透测试实战
下一篇:VS Code扩展vscode-pets实战:为编辑器添加沉浸式娱乐伴侣
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区(YunPan.Plus) ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-7 06:43 , Processed in 0.071178 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 CloudStack.

快速回复 返回顶部 返回列表