Linux性能调优
怎么看目前机器是否开启了隔核(CPU Isolation),哪些核可以绑核(CPU Pinning/Affinity)?
Linux 内核启动参数是 cmdline。
可以通过 cat /proc/cmdline 查看。
分析结果: 需要在这个长字符串里寻找以下关键字:
isolcpus=...(最核心的标志)- 例子:
isolcpus=2-15(CPU ID 是 从 0 开始的) - 含义:表示核心 2 到 15 被隔离了。Linux 调度器默认不会把进程分配到这些核上。
- 如果没有:说明机器目前没有开启隔核,所有核心都由 OS 自由调度。
- 例子:
nohz_full=...(进阶低延迟标志)- 含义:告诉内核在这些核心上尽量减少“时钟中断” (Tickless)。这是做极致低延迟(如高频交易)时的标配。通常和
isolcpus设置的范围一致。
- 含义:告诉内核在这些核心上尽量减少“时钟中断” (Tickless)。这是做极致低延迟(如高频交易)时的标配。通常和
rcu_nocbs=...- 含义:把 RCU 回调任务移出这些核心,进一步减少内核干扰。
1 | cxing@forrest:~/benchspace/qy-benchmark/cache_latency$ cat /proc/cmdline |
IRQ Affinity
IRQ 是 Interrupt Request,中断请求。
Linux 内核、SSH 服务、系统日志等后台任务通常倾向于在 CPU 0 上运行。我们的参数也说明,IRQ 倾向于跑在 0 号 CPU 上。
- 原则:永远不要把高性能任务绑定在 CPU 0 上。
- 建议:留出 CPU 0(甚至 CPU 1)给操作系统处理杂务和中断。
有些网卡中断可能默认绑定在特定的几个核上。如果你的程序和网卡中断挤在一个核,性能会抖动。
观察中断分布:
1 | # 查看各个 CPU 处理中断的累计次数 |