当前位置:首页>Linux>PSI 进阶:Linux 6.1 的 IRQ 压力与大厂实践

PSI 进阶:Linux 6.1 的 IRQ 压力与大厂实践

  • 2026-09-22 10:37:33
PSI 进阶:Linux 6.1 的 IRQ 压力与大厂实践

05. PSI 进阶:Linux 6.1 的 IRQ 压力与大厂实践

K8s PSI 压力监控实战 · 第 5 篇(共 6 篇)

本篇解决:Linux 6.1 新增的第四类 PSI——IRQ 压力是什么、怎么采;以及 Meta / 阿里 / 腾讯这些大厂怎么用 PSI。

一句话答案:irq PSI 只 full、只系统级、原生 kubelet 拿不到,得用 node_exporter 采;大厂共同点是把"停顿"而非"使用率"当作可服务性指标。

适合:进阶读者。

一、生产现场:网络风暴时,CPU 不忙业务却卡

高 PPS(包速率)场景下,NIC 中断处理把某个核打满,业务 RT 抖动。但你看 cpu PSI 和 CPU 使用率,都只是"部分"升高——因为这类停顿的元凶是中断处理开销,而不是算力不足。

经典 PSI(kernel 4.20)只有 cpu/memory/io 三类,会把这部分中断开销混在 cpu 里。Linux 6.1 起主线新增第四类——IRQ/SOFTIRQ 压力,把它单独量化:

/proc/pressure/├── cpu├── memory├── io└── irq       ← Linux 6.1(2022-12)新增

为什么单独拆出来:这类停顿会被 cpu PSI 部分捕捉,但 irq 把"中断处理开销"单独量化,便于区分"CPU 算力不足"和"被中断打断"。

二、IRQ 压力的三个关键差异

维度
cpu / memory / io
irq
压力档位
some
 + full
只有 full,没有 some
层级
节点级 + per-cgroup
只有系统级,cgroup 下不生成 irq.pressure
主线版本
4.20
6.1

校验来源:Kernelnewbies Linux 6.1 更新日志(明确 "only full state, system level only",作者 Chengming Zhou);node_exporter collector/pressure_linux.go(注释 "IRQ pressure does not have 'some' data")。官方 kernel PSI 文档尚未更新加入 irq 描述,属文档滞后,不代表未合入。

三、在 K8s 里怎么采(关键:原生 kubelet 拿不到)

因为 irq PSI只在系统级、只有 full,而 KubeletPSI/cAdvisor 采的是per-cgroup的 cpu/memory/io:

采集方式
能否拿到 irq
说明
原生 KubeletPSI(container_pressure_*)
❌ 拿不到
无 container_pressure_irq_*;cgroup 下无 irq.pressure,cAdvisor 也没实现
node_exporter pressure collector
✅ 节点级
内核 ≥ 6.1 + 较新 node_exporter 时暴露 node_pressure_irq_stalled_seconds_total(仅 stalled=full)
自研 exporter
✅ 节点级
遍历 /proc/pressure/* 会自动包含 irq(见第 6 篇)

即:irq PSI 只有节点级,没有容器级。要定位"哪个 Pod 引发了大量中断",得用 /proc/interrupts、/proc/softirqs(看 NET_RX)或网络 PPS 指标交叉定位,而不是靠 cgroup 级 irq PSI。

验证与查询:

# 节点级 irq PSI(只有 full 一行)cat /proc/pressure/irq# full avg10=0.00 avg60=0.00 avg300=0.00 total=123# node_exporter 是否采到(只有 stalled)curl -s http://NODE_IP:9100/metrics | grep node_pressure_irq# node_pressure_irq_stalled_seconds_total 0.000123

PromQL(节点级,仅 full):rate(node_pressure_irq_stalled_seconds_total[5m])。

排障方向:

irq PSI 持续升高   ↓查 /proc/softirqs 的 NET_RX 是否暴涨(网络软中断)   ↓查 NIC 中断是否集中单核(IRQ affinity)   ↓考虑 RPS / RFS / XPS 分散中断或调优

告警规则见第 3 篇第 5 条 NodeIRQPressure。

四、互联网大厂怎么用 PSI

Meta / Facebook —— PSI 的发明者

  • 动机:utilization 无法反映延迟损失,fleet 规模化后没法靠使用率判断"到底卡没卡"。PSI 在其自研编排系统 Tupperware 中用于负载卸载(load shedding)与调度,在压力显性化之前主动转移工作。
  • 可借鉴点:把 PSI 当作"业务可服务性"的信号,而不是单纯的资源利用率指标。

阿里云 / OpenAnolis

  • Alibaba Cloud Linux 把 PSI 能力回移到了 cgroup v1 接口,让没迁 cgroup v2 的存量集群也能监控压力。
  • ACK 容器优化版镜像 在 cgroup v2 下完整支持 MemoryQos + PSI。
  • OpenAnolis 用 memory.min/low/high 三档做分级内存保护——把 PSI(压力)和 MemoryQoS(保护)组合成"按优先级隔离"的范式。

腾讯 TencentOS "悟净"

  • 把 PSI 作为监控内存压力的主要指标,统计进程因内存缺乏而阻塞的时间比例,在提升整机内存利用率的同时守住延迟底线。

行业共识

大厂实践
本质
落地建议
把压力当 SLI
不看 usage 看停顿
full 占比做可服务性指标
提前预警
some 是早期信号
some 预防、full 应急
保护 + 限速
MemoryQoS min/high
关键 Pod 设 request 触发保护
外部驱动动作
PSI → 告警/扩容
Alertmanager + HPA/KEDA 接线

五、口诀收束

irq 是 Linux 6.1 新增的第四类 PSI  → 只 full、只系统级、cgroup 下没有  → 原生 kubelet 拿不到,用 node_exporter 采定位”哪个 Pod 引发中断”靠 /proc/softirqs(NET_RX),不是 cgroup irq大厂共同点:  不看 usage 看停顿,some 预警 / full 应急  PSI + MemoryQoS = 压力观测 + 分级保护

最后一篇:kubelet 原生支持 PSI 了,还要不要自己写 exporter?给一棵决策树和一个最小 Go 实现。


权威校验来源(本篇论点均经官方/权威文档校验)

论点
来源
IRQ/SOFTIRQ 压力于 Linux 6.1 合入(only full, system level only,作者 Chengming Zhou)
Kernelnewbies: Linux 6.1、LKML PSI_IRQ patch
Linux 6.1 PSI 改进报道
Phoronix: Linux 6.1 Picks Up Some Improvements For PSI
node_exporter 采 irq、only-full 处理
node_exporter collector/pressure_linux.go
Meta/Facebook 在 Tupperware 用 PSI 做负载卸载与调度
Facebook Microsites: PSI 概览
阿里云 Alibaba Cloud Linux 把 PSI 回移到 cgroup v1
阿里云:在 cgroup v1 接口开启 PSI 功能
ACK 容器优化版镜像 MemoryQos + PSI
阿里云:Alibaba Cloud Linux 3 容器优化版镜像
OpenAnolis memory.min/low/high 分级内存保护
OpenAnolis 资源隔离使用简介
腾讯 TencentOS "悟净" 以 PSI 为内存压力主指标
腾讯云:TencentOS 内存资源利用率详解

— K8s PSI 监控实战系列(共 6 篇)—

最新文章

随机文章