首页/系统/Linux 内核与性能调优速查/tuna 查看与调整线程/中断亲和
CPU 与调度60 条

tuna 查看与调整线程/中断亲和

tuna 可列出线程与 IRQ 的当前 CPU 亲和性并批量移动,常用于把中断与工作线程固定到指定核心,减少干扰。

tuna 是什么

tuna 是随 Red Hat 系工具链维护的调优命令行工具,用于查看并修改线程与中断(IRQ)的 CPU 亲和性、实时优先级等属性。它的原理是读写内核的线程亲和接口(sched_setaffinity、/proc/<pid>/status 的 Cpus_allowed_list)与中断亲和文件(/proc/irq/<n>/smp_affinity_list),因此改动立即生效但只作用于运行期。低延迟与 NUMA 场景常用它把工作线程、网卡队列中断钉在指定核心上,减少缓存失效与调度迁移。

基本信息

适用平台RHEL/CentOS/Fedora(tuna 包);Debian/Ubuntu 可 apt 安装
权限要求修改亲和需 root(或 CAP_SYS_NICE)
作用范围当前内核全局;容器内受 cpuset 限制,宿主机视角更可靠
核心参数-t 线程、-q 中断号、-c CPU 列表、--move 执行移动
生效方式运行时生效,重启或线程重建后失效

典型使用场景

  • 低延迟/实时任务:把关键业务线程固定在独占核心上,避免被其他负载挤走
  • 网络密集型服务:把各队列中断绑到专用核,配合关闭 irqbalance 稳定分布
  • NUMA 优化:让进程与它访问的网卡中断落在同一节点,减少跨节点内存访问
  • 容器环境核对:确认容器内进程的亲和掩码是否与宿主隔离策略一致
  • 临时诊断:快速定位某条 kworker 或中断线程实际跑在哪个核上

常用操作

常用操作
tuna --show_threads | head -20  # 列出线程名、PID、亲和 CPU 与优先级
sudo tuna --show_irqs | grep -i eth  # 查网卡各队列对应的 IRQ 号
sudo tuna -t 12345 -c 2-3 --move  # 把 PID 12345 绑到 CPU2-3
sudo tuna -q 40 -c 2 --move --nohint  # 把 IRQ 40 绑到 CPU2,--nohint 跳过交互提示
cat /proc/12345/status | grep Cpus_allowed_list  # 移动后复核线程亲和掩码
tuna --show_irqs | head  # 过一会儿复核中断亲和是否被 irqbalance 改回

常用选项

选项作用注意
--show_threads列出线程及其亲和 CPU、优先级只读,不需要 root
-t/--threads指定线程(名称通配或 PID)名称通配会命中多个线程,先 dry-run 看清单
-q/--irqs指定中断号或设备名配合 --show_irqs 使用更直观
-c/--cpusCPU 列表,如 2-3,5必须落在该进程的 cpuset 允许范围内
--move真正执行移动不加则只显示计划
--nohint跳过交互确认/提示脚本化时必需
tuna 的改动不持久:重启、线程重建、网卡重新加载都会丢。要固化需借助 systemd 的 CPUAffinity=、irqbalance 的 --banirq/--hintpolicy,或发行版提供的 IRQ 亲和 udev/网络脚本。
绑定前先记录原亲和性(tuna --show_threads 与 /proc/irq/<n>/smp_affinity_list),出问题时能立刻还原;只绑线程不绑中断往往让抖动更明显,因为中断会继续落在业务核上。

易错点

  • 误绑关键内核线程(ksoftirqd、kworker、迁移线程)会导致吞吐下降甚至卡顿,改前必须记录原亲和、改后在代表性负载下压测验证
  • 与 irqbalance 相互覆盖:irqbalance 会周期性按它的策略重设 IRQ 亲和,不先停用或 banirq,手动绑定几分钟后就失效
  • 容器内执行失败或无效:容器只看得到 cpuset 分配到的 CPU,掩码被收窄,需要在宿主机侧操作或改 cpuset 配置
  • 把中断和业务线程绑到同一个核:中断抢占业务时间片,尾延迟反而更大,通常要分开或按队列数分配核心
  • 忘了它只作用于当前线程/IRQ,服务重启或线程池重建后策略丢失,问题在发布后才复现

数据来源与参考

  • tuna 官方文档(osc/tuna)
  • util-linux / procfs 接口
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌