You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 22低延迟内核5.15下提升网卡中断优先级的问题

Ubuntu 22低延迟内核5.15下提升网卡中断优先级的问题

我完全理解你的困扰——在Ubuntu 18.04的低延迟内核上,你能轻松找到网卡对应的中断线程,用chrt调整优先级来保障10ms间隔的同步任务不被延迟,但到了Ubuntu 22.04的5.15低延迟内核,这些线程突然消失了,老办法没法用了对吧?下面给你拆解问题原因和解决办法:

一、核心变化:中断线程化的默认配置改了

你已经通过内核配置参数找到了关键差异:

  • Ubuntu 18.04的4.15低延迟内核不仅开启了CONFIG_IRQ_FORCED_THREADING=y(支持中断线程化),还默认启用了CONFIG_IRQ_FORCED_THREADING_DEFAULT=y,这意味着所有中断都会自动被线程化,所以你能看到irq/46-i40e-eno这类专属线程。
  • 而Ubuntu 22.04的5.15低延迟内核只保留了CONFIG_IRQ_FORCED_THREADING=y(具备线程化能力),但没有开启默认强制线程化,也没在启动参数里加入threadirqs,所以网卡中断默认不会被转换成独立线程,自然在ps里找不到它们。

二、解决办法:添加threadirqs内核启动参数

没错,解决方法就是这么直接——给内核加上threadirqs启动参数,步骤如下:

  1. 编辑GRUB配置文件:
    sudo nano /etc/default/grub
    
  2. 找到GRUB_CMDLINE_LINUX_DEFAULT行,在引号内追加threadirqs,比如原本的配置是quiet splash,修改后变成:
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash threadirqs"
    
  3. 更新GRUB使配置生效:
    sudo update-grub
    
  4. 重启服务器,之后你就能像在Ubuntu 18上那样,看到网卡对应的irq/XX-i40e-eno线程了。

重启后,你可以用原来的脚本批量调整优先级:

NIC=eno4
grep $NIC /proc/interrupts \
| awk '{print substr($1, 0, length($1) - 1);}' \
| xargs -I% sh -c "ps -e | grep irq/%-" \
| awk '{print $1;}' \
| xargs -I% sh -c "echo irq PID %; chrt -p 80 %"

或者手动对每个线程执行chrt -p 80 <线程PID>即可。

三、为什么默认配置会变化?

这个调整是Ubuntu团队出于通用性和性能平衡的考虑做出的:强制线程化所有中断虽然对低延迟场景(比如你的10ms同步任务)很友好,但并不是所有工作负载都需要——有些场景下,线程化中断会带来额外的调度开销,反而影响性能。后续版本的低延迟内核选择把这个控制权交给用户,让大家根据自己的实际需求来决定是否启用中断线程化,而不是默认开启。

备注:内容来源于stack exchange,提问作者Jonas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 14:28:03