当前位置: 首页 > news >正文

1_linux系统网络性能如何优化——几种开源网络协议栈比较

       之前合集《计算机网络从入门到放弃》第一阶段算是已经完成了。都是理论,没有实操,让“程序猿”很难受,操作性不如 Modbus发送的报文何时等到应答和 tcp通信测试报告单1——connect和send。开始是想看linux内核网络协议栈的源码,然后编译调试,找了下流程,感觉不适合刚开始接触网络协议栈的初学者。受益于之前Modbus UDP开源库的想法,萌生了找一些开源网络协议栈来学习的想法。下面介绍几款开源的网络协议栈,希望最终可以不用linux系统的网络协议栈然后用“自己的网络协议栈”写出socket通讯。

一、几种开源网络框架对比

       开源 Linux 高效网络协议栈通常用于优化网络性能,尤其是在高吞吐量和低延迟场景中,如数据中心、云计算、高频交易等领域。以下是一些常见的开源 Linux 高效网络协议栈和相关框架:

       1. DPDK(Data Plane Development Kit)

特点:

·高性能用户态网络框架,绕过内核网络协议栈,直接处理网卡上的数据包。

·提供零拷贝和高效内存管理。

·支持多核并行,常用于数据中心和网络功能虚拟化(NFV)应用。

应用场景:

·高性能网络转发(如 vSwitch)。

·流量分析、负载均衡、深度包检测等。

官网和资源:

·DPDK 官方网站 https://www.dpdk.org

2. eBPF/XDP(eXpress Data Path)

特点:

·eBPF 是 Linux 内核中的一种高效沙盒技术,允许在内核中运行用户定义的代码。

·XDP 是 eBPF 的扩展,用于加速数据包处理,支持直接在网卡驱动层面处理数据包。

·延迟低,适用于 DDoS 防护、流量分类等场景。

应用场景:

·超低延迟的网络应用。

·数据包过滤、负载均衡。

学习资源:

·eBPF 官方文档 https://ebpf.io

·XDP 入门指南  https://github.com/xdp-project/xdp-tutorial

3. VPP(Vector Packet Processing)

特点:

·由 FD.io 社区开发的高性能网络数据平面框架。

·基于数据包矢量处理,利用 CPU 的 SIMD 指令集加速数据包转发。

·提供插件式架构,可支持多种协议。

应用场景:

·数据包转发、IPSec 加速、LISP 协议等。

官网和资源:

·VPP 官网 https://fd.io

4. Netmap

特点:

·一个高效的网络 I/O 框架,用于绕过传统内核协议栈。

·轻量级设计,提供直接访问网络设备的能力。

·比传统网络栈具有更低的延迟和更高的吞吐量。

应用场景:

·高性能数据包捕获和发送。

·自定义用户态协议栈开发。

官网和资源:

·Netmap 项目主页 https://github.com/luigirizzo/netmap

5. mTCP

特点:

·专为高性能环境设计的用户态 TCP/IP 协议栈。

·支持多核并行化和高效内存管理。

·提供传统内核栈无法实现的高吞吐量和低延迟。

应用场景:

·高性能服务器应用程序(如 Web 服务器、代理服务器)。

官网和资源:

·mTCP 官方网站 https://github.com/mtcp-stack/mtcp

6. SEASTAR

特点:

·基于事件驱动的 C++ 框架,内置高效网络协议栈。

·专为低延迟和高吞吐量的分布式系统设计。

·被 ScyllaDB 等高性能数据库广泛采用。

应用场景:

·数据库、高性能分布式系统。

官网和资源:

·Seastar 官方网站 https://seastar.io

7. LWIP(Lightweight IP)

特点:

·一款开源轻量级 TCP/IP 协议栈,专为嵌入式设备设计。

·资源占用低,适合低性能设备或 IoT 应用。

·可移植性强,可运行在 bare-metal 环境或操作系统上。

应用场景:

·嵌入式设备、物联网。

官网和资源:

·LWIP 项目主页

8. TAS(TCP Acceleration as a Service)

特点:

·一种高效的用户态 TCP 协议栈。

·提供高性能和低延迟,支持 RDMA 等技术。

·在用户态实现高效连接管理和数据传输。

应用场景:

·高性能服务器和分布式存储。

如何选择?

·高性能数据包处理:选择 DPDK、eBPF/XDP、VPP。

·用户态协议栈:选择 mTCP、Seastar、TAS。

·嵌入式应用:选择 LWIP。

·可扩展性和灵活性:选择 eBPF 或 VPP。

这些开源项目广泛应用于现代网络系统,可以根据需求和场景选择合适的解决方案。

二、开源网络框架与linux系统自带网络协议栈对比

在 5ms 间隔发送网络数据包 的场景中,开源高效网络协议栈与 Linux 自带协议栈的效果对比主要取决于以下几个因素:

1> 数据包处理路径的效率:自带协议栈的内核路径较长,而高效网络协议栈(如 DPDK、Netmap)优化了数据包处理路径。

2> 发送速率的瓶颈:开源高效网络协议栈绕过了内核中的部分机制,可以显著降低 CPU 消耗和延迟。

3> 需求场景:如果发送间隔和吞吐量要求较低,Linux 自带协议栈已经能满足需求;但如果需要极高性能或处理更复杂的场景,则开源网络协议栈可能表现更好。

分析比较:

639fcd80a49285cd2a4521d337814e78.png

1、何时选择 Linux 自带协议栈

适用场景:

·发包速率较低(例如每 5ms 一个包,约 200 PPS)。

·需要使用通用的系统工具和库,无需额外依赖。

·应用程序不需要极低的延迟或极高的吞吐量。

优点:

·简单易用,开发周期短。

·适配性强,几乎可以在任何 Linux 发行版上运行。

缺点:

·受内核网络协议栈开销限制,性能相对较低。

·如果网络负载增加,可能受到内核中断或队列的瓶颈影响。

2、何时选择开源高效网络协议栈

适用场景:

·需要更低的延迟和更高的吞吐量(比如发包速率接近线速)。

·CPU 资源有限,希望降低内核和用户态切换的开销。

·有硬件支持并需要处理高负载的场景。

推荐协议栈:

DPDK:

o最适合高性能发包需求。

o提供直接操作网卡队列的能力,绕过内核协议栈。

o在 5ms 间隔发包场景下,CPU 占用率和延迟表现优于自带协议栈。

Netmap:

o实现简单,比 DPDK 更易上手。

o提供高效的用户态数据包发送能力。

优点:

·高性能,绕过内核,提高了吞吐量和降低延迟。

·支持零拷贝和批量发送,适合高频发包。

缺点:

·开发复杂,需要熟悉框架。

·可能需要特定硬件支持。

结论

Linux 自带协议栈:

o如果 5ms 发一次数据包的负载较低(<200 PPS),它已经足够胜任,无需额外引入复杂的工具。

o开发和部署都更简单,适合资源充足且不追求极限性能的场景。

开源高效网络协议栈:

o如果需要处理更高的负载、追求极低延迟、或 CPU 资源有限(避免频繁用户态和内核态切换),建议选择高效网络协议栈,如 DPDK 或 Netmap。

o对于 5ms 发一次的需求,优化后的性能将大幅优于内核自带协议栈,但开发和配置成本更高。

建议根据你的硬件条件(如网卡是否支持 DPDK)和开发周期需求来选择适合的方案。如果是新手且性能要求不高,推荐先尝试 Linux 自带协议栈;若追求高性能或部署于生产环境,建议采用 DPDK 或类似的高效网络协议栈。

欢迎关注:

网络相关的其他笔记:

Modbus发送的报文何时等到应答

tcp通信测试报告单1——connect和send

libmodbus库的一些使用经历

7_计算机网络五层体系结构

6_协议与层次划分

5_计算机网络体系结构的形成

4_计算机网络在我国的发展_20241024

3_路由器分组交换知多少?20241009

2_互联网概述_20241007

1_计算机网络体系结构的形成_20241006

相关文章:

1_linux系统网络性能如何优化——几种开源网络协议栈比较

之前合集《计算机网络从入门到放弃》第一阶段算是已经完成了。都是理论&#xff0c;没有实操&#xff0c;让“程序猿”很难受&#xff0c;操作性不如 Modbus发送的报文何时等到应答和 tcp通信测试报告单1——connect和send。开始是想看linux内核网络协议栈的源码&#xff0c;然…...

【问题记录】07 MAC电脑,使用FileZilla(SFTP)连接堡垒机不成功

项目场景&#xff1a; 使用MAC电脑&#xff0c;以子账号&#xff08;非root&#xff09;的形式登录&#xff0c;连接堡垒机CLB&#xff08;传统型负载均衡&#xff09;&#xff0c;使用FileZilla&#xff08;SFTP&#xff09;进行FTP文件传输。 问题描述&#xff1a; MAC电脑…...

前端报错npm ERR cb() never called问题

环境使用node版本v14.21.3&#xff0c;npm版本6.14.18 1.问题描述 1.1使用npm install后报错 npm ERR! cb() never called!npm ERR! This is an error with npm itself. Please report this error at: npm ERR! ? ? <https://npm.community>npm ERR! A complete log…...

康谋方案 | 多源相机数据采集与算法集成测试方案

目录 一、相机组成 二、多源相机采集与测试方案 三、应用案例分享 四、结语 在智能化技术快速发展当下&#xff0c;图像数据的采集与处理逐渐成为自动驾驶、工业等领域的一项关键技术。高质量的图像数据采集与算法集成测试都是确保系统性能和可靠性的关键。随着技术的不断进…...

Graspness 端到端抓取点估计 | 环境搭建 | 模型推理测试

在复杂场景中实现抓取检测&#xff0c;Graspness是一种端到端的方法&#xff1b; 输入点云数据&#xff0c;输出抓取角度、抓取深度、夹具宽度等信息。 开源地址&#xff1a;https://github.com/rhett-chen/graspness_implementation?tabreadme-ov-file 论文地址&#xff1…...

交换机是如何避免数据碰撞的(详细解释 + 示例)

交换机是如何避免数据碰撞的&#xff08;详细解释 示例&#xff09; 1. 独立冲突域 交换机的每个端口都形成一个独立的冲突域。这意味着通过交换机连接的每个设备都拥有自己的通信通道&#xff0c;互不干扰。 示例&#xff1a; 假设一个交换机有4个端口&#xff0c;分别连接…...

魅族手机刷官方系统

从魅族官网下载固件 https://flyme.cn/firmware.html 找到自己的型号&#xff0c;里面有历史版本、最新版&#xff0c;按照需求下载。 下载的是update.zip&#xff0c;改名就不能升级了 方法1 直接点击下载的update.zip包就可以升级。 方法2 将文件移动到文件管理的根目录&a…...

女人想要的,是那份懂她的情绪价值

女人想要的&#xff0c;是那份懂她的情绪价值 在情感的世界里&#xff0c;我们常常听到这样的声音&#xff1a;“我不需要你帮我解决问题&#xff0c;我只希望你能懂我。”这句话&#xff0c;简单却深刻&#xff0c;它揭示了女性在情感需求上的一个独特面向——她们渴望的&…...

[python SQLAlchemy数据库操作入门]-10.性能优化:提升 SQLAlchemy 在股票数据处理中的速度

哈喽,大家好,我是木头左! 当处理大量数据时,如股票数据,默认的ORM操作可能会显得效率低下。本文将探讨如何通过一些技巧和策略来优化SQLAlchemy ORM的性能,从而提升其在股票数据处理中的速度。 1. 选择合适的数据类型 在定义模型时,选择合适的数据类型对于性能至关重要…...

【网络取证篇】取证实战之PHP服务器镜像网站重构及绕密分析

【网络取证篇】取证实战之PHP服务器镜像网站重构及绕密分析 在裸聊敲诈、虚假理财诈骗案件类型中&#xff0c;犯罪分子为了能实现更低成本、更快部署应用的目的&#xff0c;其服务器架构多为常见的初始化网站架构&#xff0c;也称为站库同体服务器&#xff01;也就是说网站应用…...

[python]使用 Pandas 处理 Excel 数据:分割与展开列操作

在数据处理的过程中&#xff0c;时常需要对 Excel 表格中的数据进行清洗与转换&#xff0c;下面介绍使用 Python 中的 Pandas 库对 Excel 文件中的数据进行操作&#xff0c;具体包括分割列、展开数据、清除空格以及格式转换等操作。 目标&#xff1a; 读取一个没有表头的 Exc…...

单片机的选择因素

在选择单片机型号时&#xff0c;需要根据具体的应用需求来选择合适的单片机。单片机&#xff08;Microcontroller Unit, MCU&#xff09;是一种将计算机的主要部分集成在一个芯片上的微型计算机&#xff0c;它通常包括处理器、存储器、输入/输出接口等。随着技术的发展&#xf…...

软件测试兼容性测试丨分布式测试与多设备管理

本文将从分布式测试的概念、重要性以及实施方法入手&#xff0c;紧接着探讨多设备管理的必要性和管理策略&#xff0c;最后分析其对软件测试行业的前景与影响。 分布式测试简介 什么是分布式测试&#xff1f; 分布式测试是指将测试任务分散到不同的计算机或者设备上进行&…...

Linux驱动开发(13):输入子系统–按键输入实验

计算机的输入设备繁多&#xff0c;有按键、鼠标、键盘、触摸屏、游戏手柄等等&#xff0c;Linux内核为了能够将所有的输入设备进行统一的管理&#xff0c; 设计了输入子系统。为上层应用提供了统一的抽象层&#xff0c;各个输入设备的驱动程序只需上报产生的输入事件即可。 下…...

微服务篇-微服务保护:使用 Sentinel 来实现请求限流、线程隔离、服务熔断和 Fallback 备用方案的使用

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 微服务保护 1.1 请求限流方案 1.2 线程隔离方案 1.3 服务熔断方案 2.0 Sentinel 2.1 Sentinel 安装 2.2 微服务整合 3.0 Sentinel-请求限流 4.0 Sentinel-线程隔离…...

vscode 排除文件夹搜索

排除的文件夹 node_modules/,dist/...

设计模式学习之——装饰者模式

装饰者模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许你动态地向一个现有的对象添加新的行为&#xff0c;同时又不改变其结构。 一、定义与特点 定义&#xff1a;装饰者模式动态地将责任附加到对象上。若要扩展功能&#xff0c;装饰者…...

【Vulkan入门】10-CreatePipeline

目录 先叨叨Git信息关键代码TestPipeline::Initialize() 编译运行 先叨叨 到上篇为止已经创建了FrameBuffer和RenderPass。建立Pipeline的先决条件已经具备。本篇就来创建Pipeline。 Git信息 repository: https://gitee.com/J8_series/easy-car-uitag: 10-CreatePipelineurl…...

C++11 (一)

一、 C11的发展历史 C11是C 的第二个主要版本&#xff0c;并且是从 C98 起的最重要更新。 它引入了大量更改&#xff0c;标准化了既有实践&#xff0c;并改进了对C程序员可用的抽象。在它最终由IS0在2011年8月12日采纳前&#xff0c;人们曾使用名称“C0x”&#xff0c;因为它曾…...

系统性能优化

一、概述 性能优化的目标&#xff1a;是提高系统或应用程序的响应时间、吞吐量、cpu、内存、磁盘IO、网络、流量、JVM、Tomcat、DB等方面的性能指标。 性能优化需要有一些技巧&#xff1a;对于整个产品或项目而言&#xff0c;比如可以从前端优化、后端优化、架构优化、高并发…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing

Muffin 论文 现有方法 CRADLE 和 LEMON&#xff0c;依赖模型推理阶段输出进行差分测试&#xff0c;但在训练阶段是不可行的&#xff0c;因为训练阶段直到最后才有固定输出&#xff0c;中间过程是不断变化的。API 库覆盖低&#xff0c;因为各个 API 都是在各种具体场景下使用。…...

《Offer来了:Java面试核心知识点精讲》大纲

文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...