菜单

Administrator
发布于 2025-04-01 / 2 阅读
0

软中断

ksoftirqd进程CPU占用过高 以下步骤进行系统性排查和优化:


一、问题定位分析

  1. 查看软中断分布
watch -d -n 1 'cat /proc/softirqs'
  • 观察NET_RX(网络接收中断)或BLOCK(块设备中断)是否持续增长
  • NET_RX数值飙升,通常与网络流量激增或网卡驱动处理机制有关
  1. 中断分布统计
grep "\|CPU" /proc/interrupts | head -1
watch -d -n 1 "grep -e eth -e enp /proc/interrupts"
  • 检查是否单个CPU核心在处理大量硬件中断(如网卡IRQ)
  1. 网络流量监控
sar -n DEV 1  # 查看网卡吞吐量
ethtool -S eth0  # 查看网卡统计(需替换网卡名)
  • 关注droppedoverruns指标,判断是否达到网卡处理瓶颈

二、内核级优化措施

网络相关优化

  1. 调整网络队列长度
# 查看当前队列长度
ip link show eth0 | grep txqueuelen

# 临时增大发送队列(根据内存调整,建议不超过65536)
ip link set eth0 txqueuelen 4096
  1. 启用RPS/RFS(多核负载均衡)
# 查看CPU核心数
nproc

# 设置RPS(假设16核,掩码ffff对应16个核心)
echo ffff > /sys/class/net/eth0/queues/rx-0/rps_cpus

# 设置RFS(建议值32768)
echo 32768 > /proc/sys/net/core/rps_sock_flow_entries
echo 2048 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt
  1. 调整内核参数
# 增大软中断处理包数量(默认300)
sysctl -w net.core.netdev_budget=600

# 增大socket读取缓冲区
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216

# 启用GRO(Generic Receive Offload)
ethtool -K eth0 gro on

中断均衡配置

  1. 使用irqbalance服务
systemctl enable irqbalance
systemctl restart irqbalance
  1. 手动绑定中断(高级用法)
# 查看网卡中断号
grep eth0 /proc/interrupts | awk '{print $1}'

# 绑定中断到CPU0-3(掩码0f)
echo 0f > /proc/irq/XX/smp_affinity

内核编译优化(针对特定场景)

  1. 启用CONFIG_PREEMPT_VOLUNTARY
# 在.config文件中启用自愿内核抢占
CONFIG_PREEMPT_VOLUNTARY=y
  1. 调整时钟频率
# 将时钟源切换为TSC(需硬件支持)
echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource

三、硬件层面检查

  1. 网卡配置检查
ethtool -g eth0  # 查看环形缓冲区大小
ethtool -G eth0 rx 4096  # 增大接收缓冲区

# 启用多队列(需硬件支持)
ethtool -L eth0 combined 8
  1. NUMA绑定(服务器场景)
numactl --hardware  # 查看NUMA节点
# 将网卡中断绑定到相同NUMA节点的CPU

四、进阶诊断工具

  1. 使用perf分析软中断路径
perf record -g -a -C 2 sleep 10  # 监控特定CPU核心
perf report --stdio
  1. ftrace跟踪中断延迟
echo function_graph > /sys/kernel/debug/tracing/current_tracer
echo 'netif_receive_skb' > /sys/kernel/debug/tracing/set_ftrace_filter
cat /sys/kernel/debug/tracing/trace_pipe

五、注意事项

  1. 参数调整顺序
  • 先进行网络配置优化,再进行内核参数调整
  • 每次只修改一个参数并观察效果
  1. 监控指标
mpstat -P ALL 1  # 查看CPU软中断占比
dstat --top-softirq  # 实时软中断排名
  1. 回滚方案
  • 记录原始配置参数
  • 准备内核启动参数mitigations=off(极端情况下禁用安全缓解措施)

建议在生产环境中保留kdump配置捕获内核崩溃现场。