嵌入式ARM平台Linux网络实时性能优化

文章目录

    • 0. 概要
    • 1. 时钟周期与网络性能的权衡
      • 时钟周期(ClockPeriod)
        • **优化策略:**
        • **副作用:**
    • 2. 网络中断优化
        • **问题:**
        • **优化策略:**
        • **副作用:**
    • 3. 网络协议栈优化
        • **优化策略:**
        • **副作用:**
    • 4. 禁用内存页面交换(禁用 Swap)
      • 为什么禁用 Swap?
      • **禁用 Swap 配置:**
      • **副作用:**
    • 5. 配置 `swappiness` 为 0
      • **如何设置 `swappiness` 为 0:**
      • **副作用:**
    • 6. 网络吞吐量与 CPU 调度
        • **优化策略:**
        • **副作用:**
    • 7. 使用硬件辅助优化
        • **优化策略:**
        • **副作用:**
    • 更多阅读

0. 概要

本文将通过优化时钟周期、网络中断处理、协议栈配置、CPU 调度等配置来提升网络吞吐量,尤其是 UDP 数据包的处理效率。同时也将分析这些优化措施可能带来的副作用和对系统资源的影响。

1. 时钟周期与网络性能的权衡

时钟周期(ClockPeriod)

优化策略:
  • 启用高分辨率定时器:对于实时性要求高的应用,建议启用高分辨率定时器(CONFIG_HIGH_RES_TIMERS),以提高定时器精度。
    CONFIG_HIGH_RES_TIMERS=y
    
  • 合理选择时钟周期:选择适当的时钟周期,使其在精度和 CPU 负载之间找到平衡。可通过测试找到最适合的时钟周期。
副作用:
  • CPU 负担增加:高分辨率定时器提高了系统调度的精度,但也增加了频繁的上下文切换和时钟更新,可能会增加 CPU 资源的消耗,特别是在 CPU 负载本已较重的情况下。
  • 过短的时钟周期可能会导致 CPU 资源被频繁的中断处理占用,从而影响网络中断的响应,尤其是在高流量的 UDP 数据包处理中。

2. 网络中断优化

问题:
  • 中断过于频繁:默认情况下,网络驱动会为每个数据包触发一次中断,这在高流量场景下会大幅增加 CPU 的负载,降低 UDP 数据包的吞吐量。
  • 中断竞争:在多核系统中,多个中断可能争夺 CPU 资源,导致缓存失效和上下文切换开销,进一步影响性能。
优化策略:
  • 启用 NAPI:通过启用 NAPI(New API)合并中断,减少中断的频率,优化 CPU 的使用。
    ethtool -C eth0 rx-usecs 10
    
  • 中断优先级调整:调整网络中断的优先级,确保网络中断能在系统繁忙时优先处理。
    echo 1 > /proc/irq/<irq_number>/smp_affinity_list
    
  • 中断绑定(CPU 绑定):将网络中断绑定到特定的 CPU 核心,减少跨核上下文切换开销。
    echo 1 > /sys/class/net/eth0/queues/rx-0/rps_cpus
    
副作用:
  • 内存使用增加:NAPI 的合并中断可能会导致系统使用更多的内存来存储等待处理的数据包,特别是在大流量情况下。
  • 延迟增加:尽管中断频率减少,但合并中断和轮询可能会导致延迟略有增加,尤其是在低流量场景下。

3. 网络协议栈优化

在高吞吐量应用中,网络协议栈的一些默认配置可能成为性能瓶颈。

优化策略:
  • 调整缓冲区大小:合理调整 UDP 接收和发送缓冲区的大小,以优化吞吐量。
    sysctl -w net.core.rmem_max=16777216
    sysctl -w net.core.wmem_max=16777216
    
  • 禁用不必要的协议:如果系统不需要 IPv6 或其他协议,可以通过禁用这些协议来减少协议栈的负担。
    sysctl -w net.ipv6.conf.all.disable_ipv6=1
    
副作用:
  • 内存消耗增加:增大缓冲区大小会增加内存的消耗,特别是在高负载的情况下,可能导致系统内存紧张。

4. 禁用内存页面交换(禁用 Swap)

为什么禁用 Swap?

交换空间(swap)允许操作系统将不常用的数据页从内存移至硬盘,当系统内存不足时,避免直接崩溃。虽然这种机制有助于防止内存溢出,但当数据被交换到磁盘上时,每当需要访问这些数据时都会触发缺页中断,进而导致额外的延迟。

禁用 Swap 配置:

可以使用以下命令禁用当前的 swap 分区:

# 禁用 swap 分区
swapoff -a# 永久禁用 swap,编辑 /etc/fstab 文件,注释掉 swap 行

副作用:

  • 内存压力增加:禁用 swap 后,如果系统内存不足,应用程序可能会因内存溢出而崩溃。需要确保系统有足够的物理内存来承载高负载。

5. 配置 swappiness 为 0

  • 禁用 Swap 是彻底关闭交换空间,不允许内存数据交换到磁盘。
  • 配置内核swappiness 为 0 是一种软性优化,它尽量避免使用交换空间,但不完全禁止。当系统内存极度紧张时,swappiness 为 0 不会阻止系统使用 swap

如何设置 swappiness 为 0:

  1. 临时修改: 临时修改 swappiness 的值,使其立即生效,但重启后会失效。

    sysctl vm.swappiness=0
    
  2. 永久修改: 修改 /etc/sysctl.conf 文件,使配置在系统重启后依然生效。

    echo "vm.swappiness = 0" >> /etc/sysctl.conf
    sysctl -p
    

副作用:

  • 内存压力增加:将 swappiness 设置为 0 后,如果系统内存不足,进程可能会因内存不足而崩溃。

6. 网络吞吐量与 CPU 调度

网络吞吐量不仅与中断处理有关,还与 CPU 调度效率和任务优先级密切相关。合理调度网络相关进程,确保它们能够高优先级地执行,可以有效提高 UDP 数据包的吞吐量。

优化策略:
  • CPU 亲和性:将 UDP 数据处理任务绑定到特定的 CPU 核心上,避免跨核任务迁移,减少缓存失效的概率。
    taskset -c 0-1 ./my_udp_task
    
  • 高优先级调度:使用实时调度策略(如 FIFO 或 RR)提高与 UDP 数据包处理相关进程的优先级,确保网络中断能够及时响应。
    chrt -f 99 my_udp_task
    
副作用:
  • CPU 负担不均:CPU 亲和性优化可能会导致某些 CPU 核心的负载过重,而其他核心处于闲置状态,因此需要仔细评估。

7. 使用硬件辅助优化

硬件时间戳可以提高网络吞吐量,减轻 CPU 的负担。

优化策略:
  • 启用硬件时间戳:如果网卡支持,启用硬件时间戳可以减轻 CPU 的负担。
    ethtool -T eth0
    ethtool -s eth0 time-stamping on
    
副作用:
  • 内存消耗:硬件时间戳等功能会占用一定的内存资源,特别是在需要精确时间同步的高流量环境中,可能导致内存消耗增加。

更多阅读

  • 针对ARM64嵌入式系统的Linux内核参数优化
  • tcp网络编程性能优化点
  • Linux操作系统的实时化-PREEMPT_RT

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/467545.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux基础——详细篇

免责声明 学习视频来自B 站up主泷羽sec&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下代码、网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 linux 基础命令重现 cd(切…

Prosre:一款直观的协议发送模拟软件

Proser 是一款直观的协议编辑、发送端模拟软件。 在涉及二进制协议通信的程序开发过程中&#xff0c;我们经常会通过助手类工具编写协议来验证自己的代码&#xff0c;但这些助手对于大协议的编辑非常不友好&#xff0c;这时Proser会协助你轻松的完成测试。 特点 数据直接表达…

常见 HTTP 状态码分类和解释及服务端向前端返回响应时的最完整格式

目前开发的项目很大程度上是为明年的国产化做准备了&#xff0c;所以借这个机会把用了十年的自研系统全部重写&#xff0c;订立更严格的规范&#xff0c;本文记录一下返回格式及对应状态码。 常见 HTTP 状态码及解释 HTTP 状态码用于表示客户端请求的响应状态&#xff0c;它们…

【DL】YOLO11 OBB目标检测 | 模型训练 | 推理

本文进行YOLO11的旋转目标检测任务,旋转目标检测能够更精确地定位和描述那些非水平排列的目标,比如倾斜的飞机、船舶等。在原始的目标检测中,添加一个角度预测,实现定向边界框检测。 话不多说,先来个效果图!!! YOLO11中的旋转目标检测的特点 ▲更精确的定位:通过使用…

自动泊车端到端算法 ParkingE2E 介绍

01 算法介绍 自主泊车是智能驾驶领域中的一项关键任务。传统的泊车算法通常使用基于规则的方案来实现。因为算法设计复杂&#xff0c;这些方法在复杂泊车场景中的有效性较低。 相比之下&#xff0c;基于神经网络的方法往往比基于规则的方法更加直观和多功能。通过收集大量专家…

2025斯诺克器材与用品展,2025郑州台球器材展会3月举办

立足中原&#xff0c;辐射全国&#xff0c;壹肆柒2025中国&#xff08;郑州&#xff09;国际台球产业博览会&#xff0c;展位招商正在进行&#xff1b; 2025中国&#xff08;郑州&#xff09;国际台球产业博览会&#xff08;壹肆柒台球展&#xff09; The 2025 China (Zhengzh…

单调栈—acwing

一、题目&#xff1a; AcWing 830. 单调栈 - AcWing 暴力算法思想 双指针算法&#xff0c;本质上是比较操作&#xff0c;两个循环&#xff0c;时间复杂度高。通过栈可以一次遍历。 可以知道&#xff0c;只要前面有一个小于我的数&#xff0c;就可以。如果前面的数&#xff…

Ingress nginx 公开TCP服务

文章目录 背景搞起拓展( PROXY Protocol )参考 背景 公司业务繁多&#xff0c; HTTP、GRPC、TCP多种协议服务并存&#xff0c;Kubernetes流量入口复杂&#xff0c;所以萌生了通过LoadBalancer Ingress-nginx 的方式完全的结果入口流量&#xff0c;当然在高并发的场景下可以对…

小白投资理财 - 看懂 MACA K线图

小白投资理财 - 看懂 MACA K线图 什么是 MACDMACD 主要有三种用法第一是看快线和慢线两个线的位置第二是观察两条线交叉的情况第三就是通过观察 BAR 柱状图可预判该股市的走向例子 MACD 缺点总结 股市茫茫大海, 打开 K 线图, 几时开始入场, 几时应该退场傻傻不知道,没有一个指标…

Essential Cell Biology -- Fifth Edition

今天开始看一本书&#xff0c;单纯想学生物和英语。如果有错误烦请大家指出。黑色下划线是总结&#xff0c; Chapter one 1.1 Cell: the fundamental units of life 什么是生物的基本特征&#xff0c;并将它们与非生物区分开来&#xff1f; 答案取决于[ hinges on]一个现在…

windows 实现 linux tail -f 的效果

需求&#xff1a; 有的环境部署在windows上面&#xff0c;想要查看生成的log日志&#xff0c;用文本打开无法实现自动更新&#xff0c;想要linux tail -f 的效果 编写txt文件 echo off powershell -Command "Get-Content -Path 文件地址 -Wait -Tail 200 -Encoding UTF8…

MySQL数据库专栏(四)MySQL数据库链接操作C#篇

摘要 主要讲述MySQL数据库链接操作C#的操作 目录 1、添加引用 2、接口介绍 2.1、MySqlConnection 2.2、MySqlCommand 2.3、MySqlDataReader 2.4、MySqlDataAdapter 2.5、MySqlTransaction 3、全网功能最全辅助类实现 4、辅助类调用实例 1、添加引用 …

tensorflow案例5--基于改进VGG16模型的马铃薯识别,准确率提升0.6%,计算量降低78.07%

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 本次采用VGG16模型进行预测&#xff0c;准确率达到了98.875&#xff0c;但是修改VGG16网络结构&#xff0c; 准确率达到了0.9969&#xff0c;并且计算量…

【MM-Align】学习基于输运的最优对齐动力学,快速准确地推断缺失模态序列

代码地址 - > github传送 abstract 现有的多模态任务主要针对完整的输入模态设置&#xff0c;即每个模态在训练集和测试集中要么是完整的&#xff0c;要么是完全缺失的。然而&#xff0c;随机缺失的情况仍然没有得到充分的研究。在本文中&#xff0c;我们提出了一种新的方…

github使用基础

要通过终端绑定GitHub账号并进行文件传输&#xff0c;你需要使用Git和SSH密钥来实现安全连接和操作。以下是一个基本流程&#xff1a; 设置GitHub和SSH 检查Git安装 通过终端输入以下命令查看是否安装Git&#xff1a; bash 复制代码 git --version配置Git用户名和邮箱 bash …

教程:FFmpeg结合GPU实现720p至4K视频转换

将一个 720p 的视频放大编码到 4K&#xff0c;这样的视频处理在很多业务场景中都会用到。很多视频社交、短视频、视频点播等应用&#xff0c;都会需要通过服务器来处理大量的视频编辑需求。 本文我们会探讨一下做这样的视频处理&#xff0c;最低的 GPU 指标应该是多少。利用开源…

大健康零售行业帮助中心的构建与客户服务优化

在大健康零售行业&#xff0c;客户服务的质量直接影响着企业的品牌形象和市场竞争力。随着数字化转型的推进&#xff0c;构建一个高效、智能的帮助中心成为了提升客户服务和满意度的关键。本文将分析大健康零售行业如何通过构建帮助中心来优化客户服务&#xff0c;并提升客户满…

想买开放式耳机如何挑选?5款高人气开放式耳机分享

很多人不知道的是&#xff0c;目前开放式耳机市场上&#xff0c;有90%的品牌都不是专业的开放式耳机品牌&#xff0c;跨界的大牌以及网红品牌占据了主流市场&#xff0c;这些品牌通常都是直接使用传统的声学技术直接应用在开放式耳机上&#xff0c;没有专门针对开放式环境的技术…

linux 通过apt安装软件包时出现依赖包版本不对的问题解决

通过网上查找解决办法时&#xff0c;发现的解决办法无法完美解决问题: 比如通过安装对应版本解决 如: sudo apt-get install xxx2.7.0ubuntu 这样会先卸载原先包&#xff0c;在安装对应版本的包 或者直接删除依赖的包 sudo apt-get purge xxxx 如果碰到底层包的话&#xf…

证件照尺寸168宽240高,如何手机自拍更换蓝底

在提供学籍照片及一些社会化考试报名时&#xff0c;会要求我们提供尺寸为168*240像素的电子版证件照&#xff0c;本文将介绍如何使用“报名电子照助手”&#xff0c;借助手机拍照功能完成证件照的拍摄和背景更换&#xff0c;特别是如何将照片尺寸调整为168像素宽和240像素高&am…