0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

内核配置项引发网络性能下降的深度剖析

jf_44130326 来源:Linux1024 2026-02-01 16:48 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、引言

嵌入式系统开发中,内核配置对系统性能起着关键作用。近期在对基于Rockchip平台的Linux内核配置调试时,发现三个内核跟踪器配置项(CONFIG_IRQSOFF_TRACERCONFIG_PREEMPT_TRACERCONFIG_SCHED_TRACER)的启用,竟导致网络性能下降约10%,关闭后借助iperf3测试丢包问题消失。本文将深入剖析这几个配置项的用途,以及为何它们会影响网络性能。

wKgZO2kancOARRxQAAMOwjbCJqs571.png

二、相关内核配置项解析

(一)CONFIG_IRQSOFF_TRACER

功能用途

该配置项用于启用“IRQ关闭跟踪器,主要作用是跟踪系统中关闭中断(IRQ)的代码路径。当内核执行一些对时序要求极高、需避免中断干扰的关键操作时(如某些硬件寄存器的原子性配置),会暂时关闭中断。IRQSOFF_TRACER会记录从关闭中断开始,到重新开启中断为止的这段时间内的内核执行细节,包括代码执行路径、耗时等,方便开发者分析因关闭中断可能引发的延迟问题,排查实时性相关故障

工作机制

启用后,内核会在中断关闭和开启的关键节点插入追踪代码,这些代码会记录时间戳、当前执行上下文等信息。随着系统运行,不断采集并暂存这些跟踪数据,供后续借助ftrace等工具进行分析。这一过程会额外增加内核代码执行的指令数,带来一定的计算开销。

(二)CONFIG_PREEMPT_TRACER

功能用途

用于启用抢占跟踪器,聚焦于跟踪内核的抢占行为。Linux内核支持可抢占调度(在配置了CONFIG_PREEMPT等相关抢占特性基础上),PREEMPT_TRACER能够记录内核线程被抢占的时机、抢占前后的线程状态等信息,助力开发者优化内核调度的实时性,解决因抢占不合理导致的延迟问题

工作机制

在内核调度器的关键逻辑处(如决定是否抢占当前线程时),插入跟踪点,记录调度相关的线程ID、优先级、时间等数据。每次抢占发生或尝试抢占时,都会触发这些跟踪逻辑,这无疑会增加调度器的执行负担,因为原本简洁的调度判断流程,现在要额外处理跟踪数据的记录操作。

(三)CONFIG_SCHED_TRACER

功能用途

作为调度跟踪器,用于全面跟踪内核调度器的行为。它不仅关注抢占,还会记录线程的调度入队、出队、切换等整个生命周期的调度事件,能详细呈现调度器如何选择下一个要执行的线程、线程的等待时长、调度延迟情况等,是分析调度性能瓶颈、优化调度策略的有力工具 。

工作机制

在调度器的众多关键函数(如schedule()、线程入队函数、出队函数等)中植入跟踪代码,每次调度事件发生时,收集并存储大量调度相关元数据(如线程状态变化、调度延迟统计等)。这使得调度器的执行流程变得更为复杂,执行时间被延长,因为要频繁处理跟踪数据的采集和存储。

三、对网络性能影响的深度分析

(一)内核资源竞争角度

网络数据的收发,依赖内核网络协议栈的处理,而协议栈的运行离不开内核调度、中断等机制的协同。当启用上述三个跟踪器后:

中断处理受干扰CONFIG_IRQSOFF_TRACER增加了中断关闭与开启过程的开销,网络数据接收往往依赖中断触发(如网卡收到数据包触发中断,通知内核处理)。若中断处理因跟踪代码插入而延迟,会导致网卡接收队列中的数据包不能及时被内核取走,队列溢出风险增加,进而引发丢包。即使未丢包,也会因处理延迟导致网络延迟增大,影响吞吐量。

调度效率降低CONFIG_PREEMPT_TRACERCONFIG_SCHED_TRACER让内核调度器负载加重。网络协议栈中的线程(如负责数据包转发、协议处理的内核线程)的调度会变得不顺畅。比如,当一个网络线程需要被调度执行来处理紧急数据包时,调度器可能因忙于处理跟踪数据记录,而不能及时响应调度请求,导致网络处理线程等待时间过长,数据包处理不及时,影响网络吞吐量,甚至引发丢包(当队列满时)。

(二)性能开销叠加角度

三个跟踪器各自都会带来一定的内核性能开销,且这些开销在网络高负载场景下会相互叠加、放大:

跟踪代码的执行涉及大量的内存访问(如记录跟踪数据到内存缓冲区)、条件判断(判断是否触发跟踪逻辑)等操作,会占用CPU周期。网络处理本身对CPU资源需求较高(如数据包的校验、协议解析等),当CPU被跟踪逻辑大量占用时,网络协议栈可用的CPU资源减少,处理能力下降。

在高网络吞吐量场景下,网络中断触发频繁、调度事件增多,跟踪器被触发的频率也会大幅上升。原本每个跟踪点的微小开销,会因高频率触发而累积成显著的性能损耗,最终体现为网络性能的明显下降,如测试中出现的约10%吞吐量降低,以及丢包现象(当资源紧张到一定程度时)。

(三)与iperf3测试的关联

iperf3是常用的网络性能测试工具,用于测试网络带宽、丢包率等指标。当启用三个跟踪器时,内核在处理iperf3产生的大量网络数据包时,受上述资源竞争和性能开销影响,无法高效处理数据包:

发送端,内核协议栈可能因调度延迟,不能及时将iperf3生成的数据包发送出去,导致发送速率受限;接收端,因中断处理、调度问题,无法及时接收和处理数据包,使得数据包在接收队列堆积,触发丢包机制(如队列满后丢弃新到达的数据包)。而关闭跟踪器后,内核摆脱了额外的性能开销和资源竞争干扰,能更高效地处理iperf3测试的数据包,丢包问题消失,网络性能恢复正常。

四、总结与建议

(一)总结

CONFIG_IRQSOFF_TRACERCONFIG_PREEMPT_TRACERCONFIG_SCHED_TRACER这三个配置项,主要用于内核调试阶段,辅助开发者分析中断、抢占、调度相关的实时性问题。但它们通过增加内核中断处理、调度过程的开销,引发资源竞争和性能损耗叠加,在网络高负载场景下,对依赖内核高效调度和中断响应的网络处理流程产生干扰,最终导致网络性能下降、丢包等问题。

(二)建议

调试阶段:在系统开发调试初期,若需分析内核实时性、调度等问题,可临时启用这些跟踪器,借助ftrace等工具采集数据进行问题排查。

生产阶段:当系统进入生产环境或需要保障网络等关键性能时,务必关闭这些调试性质的跟踪器配置,避免其带来的性能损耗影响系统整体功能,确保网络、调度等核心功能高效运行

通过对这几个内核配置项的深入剖析,我们清晰认识到内核调试配置对系统性能的潜在影响,在实际开发中需根据场景合理取舍,保障系统性能与功能的平衡。



声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式系统
    +关注

    关注

    41

    文章

    3841

    浏览量

    134052
  • 内核
    +关注

    关注

    4

    文章

    1479

    浏览量

    43140
  • Linux
    +关注

    关注

    88

    文章

    11854

    浏览量

    219819
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    工控机的内核配置

    工控机的内核配置  对于工控机内核,对于内核的大小要求并不严格,关键的是正确性,健壮性和实时性(某些机子要求实时性较高).对文件系统要求单一,但保证正确性.网络按需设置。  可作如下
    发表于 08-15 14:14

    linux内核深度剖析,另附有光盘资料

    linux内核深度剖析,对于想学linux内核的人来说,绝对值得一看,另附有光盘资料。
    发表于 01-15 21:25

    内核配置单的讲解

    很多朋友要自己编译内核,自己加个驱动,或者把上面功能去掉,需要调用到内核配置单,这里有一份讲解,分享给大家
    发表于 11-08 14:20

    关于linux内核配置文件

    linux怎样选择内核配置文件?
    发表于 12-08 21:21

    修改内核配置增加自己的驱动为什么实现不了呢

    内核和系统编译都没问题,但是我要修改内核配置增加自己的驱动做不了。文档上也没有关于内核配置的项目,我自己试过 make ARCH=arm64 CROSS_COMPILE
    发表于 12-30 07:06

    Linux内核配置方法及编译资料分享

    Linux内核配置及编译解压内核建立源码目录该目录下以patch结尾的文件为ST官方提供的补丁文件,linux-5.4.31.tar.xz为标准linux源码包。解压标准内核源码包
    发表于 02-08 06:55

    Linux系统内核配置及编译

    STM32MP157系列教程连载-Linux系统移植篇8:STM32MP1微处理器之Linux内核配置及编译第 1 章 Linux内核配置及编译1.1 解压内核建立源码目录linux@ubuntu
    发表于 02-17 06:56

    Linux内核配置系统详解

    ,都将面临着同样的问题,即如何将源代码融入到 Linux 内核中,增加相应的 Linux 配置选项,并最终被编译进 Linux 内核。这就需要了解 Linux 的内核配置系统。 众所周
    发表于 11-01 15:45 4次下载

    Linux内核配置编译分析的设计方案

    Linux内核配置编译分析的设计方案
    发表于 07-08 16:53 18次下载
    Linux<b class='flag-5'>内核配置</b>编译分析的设计方案

    Linux内核配置网络资料说明

    Linux不止在上网时候才会用到网络功能’一些程序在单机时候也会需要内核网络支持。 X server是个典型的例子。如果你是从一个老内核更新到一个比较新的
    发表于 03-12 10:33 14次下载

    STM32MP157 Linux系统移植开发篇8:Linux内核配置方法及编译

    Linux内核配置及编译解压内核建立源码目录该目录下以patch结尾的文件为ST官方提供的补丁文件,linux-5.4.31.tar.xz为标准linux源码包。解压标准内核源码包
    发表于 12-04 21:06 9次下载
    STM32MP157 Linux系统移植开发篇8:Linux<b class='flag-5'>内核配置</b>方法及编译

    什么是SysRq 内核配置选项

    。 SysRq内核配置选项 要使用系统请求键 SysRq ,内核配置选项中必须打开 CONFIG_MAGIC_SYSRQ CONFIG_MAGIC_SYSRQ=y
    的头像 发表于 09-26 16:42 1851次阅读

    T507开发板如何修改和保存内核配置

    本文档介绍如何在开发时修改和保存内核配置,适用于开发板TQT507。1.修改内核配置编译时系统会先检测当前内核源码目录下是否存在.config文件,如果存在,直接使用此配置.confi
    的头像 发表于 12-08 11:26 1553次阅读
    T507开发板如何修改和保存<b class='flag-5'>内核配置</b>

    TQT507开发板如何修改和保存内核配置

    本文档介绍如何在开发时修改和保存内核配置,适用于开发板TQT507。 1.修改内核配置 编译时系统会先检测当前内核源码目录下是否存在.config文件,如果存在,直接使用此配置.con
    的头像 发表于 12-28 14:13 1179次阅读
    TQT507开发板如何修改和保存<b class='flag-5'>内核配置</b>

    强实时运动控制内核MotionRT750(一):驱动安装、内核配置与使用

    强实时运动控制内核MotionRT750的驱动安装与内核配置
    的头像 发表于 07-03 15:48 3969次阅读
    强实时运动控制<b class='flag-5'>内核</b>MotionRT750(一):驱动安装、<b class='flag-5'>内核配置</b>与使用