Linux CPU优化核心在于合理分配任务与调度策略,需避免单核过载、多核闲置;关键在按需运行、减少上下文切换、提升缓存局部性;默认CFS保障公平性,实时场景可选SCHED_FIFO/RR,后台任务适用SCHED_BATCH/IDLE;结合taskset绑核、nice/chrt调优、irqbalance与numactl协同,并依负载类型决定是否绑定。

Linux CPU优化核心在于合理分配任务到不同CPU核心,并选择合适的调度策略,避免单核过载、多核闲置。关键不是一味追求高频率,而是让进程按需运行、减少上下文切换、提升缓存局部性。
理解Linux调度器与常见策略
Linux默认使用CFS(完全公平调度器),目标是让所有可运行任务“公平”共享CPU时间。它不保证实时响应,但适合通用负载。若需更精细控制,可配合以下策略:
- SCHED_FIFO:实时策略,高优先级任务一旦就绪立即抢占,无时间片限制,适用于硬实时场景(如工业控制),但配置不当易导致系统假死
- SCHED_RR:实时轮转策略,带时间片的SCHED_FIFO,适合多个实时任务共存
- SCHED_BATCH / SCHED_IDLE:分别用于吞吐型后台任务和极低优先级维护任务,降低对交互式程序干扰
绑定进程到指定CPU核心(taskset)
防止频繁迁移、提升L1/L2缓存命中率,尤其对延迟敏感或计算密集型服务(如数据库、音视频编码)效果明显。
- 启动时绑定:taskset -c 0,2,4 ./myapp —— 仅在CPU 0/2/4上运行
- 运行中绑定:taskset -cp 1-3 1234 —— 将PID 1234迁移到CPU 1~3
- 查看当前绑定:taskset -cp 1234
- 注意:绑定前建议先用lscpu确认CPU拓扑(如超线程、NUMA节点),避免跨NUMA访问内存拖慢性能
调整进程调度优先级(nice与chrt)
普通用户可用nice调整静态优先级(-20最高,19最低),影响CFS虚拟运行时间;实时任务必须用chrt设置策略与实时优先级(1~99)。
- 降低非关键后台任务抢占:nice -n 15 rsync -av /src /dst
- 提升实时采集进程响应:chrt -f 80 ./sensor_reader
- 查看进程实际调度参数:ps -eo pid,tid,class,rtprio,ni,pri,pcpu,args --sort=-pcpu | head -10
多核协同优化实战建议
单纯开启多线程未必提升性能,需结合软件架构与硬件特性:










