必须通过cpu亲和性绑定将关键进程锁定到指定物理核心,避免跨核调度导致缓存失效和延迟升高;使用taskset -cp或systemd的cpuaffinity参数实现绑定,并优先选择连续编号核心(如0-3代表前两个物理核心)。

在麒麟系统中运行编译、视频转码或虚拟机等高负载任务时,进程因频繁跨核调度导致缓存失效、延迟升高、多线程效率骤降,必须通过CPU亲和性绑定将关键进程锁定到指定物理核心上,避免内核将其迁移到刚被节能策略降频的CPU上。
确认当前CPU核心数量与编号
打开终端,执行:lscpu | grep "CPU(s):" 查看逻辑CPU总数;再运行 cat /proc/cpuinfo | grep "processor" | wc -l 验证是否一致。注意:麒麟V10/V11默认启用超线程,【编号0、2、4…为同一物理核心的逻辑线程,绑定时优先选连续编号如0-3代表前两个物理核心】。
对已运行进程绑定CPU核心
方法一:用taskset临时绑定(重启后失效)
先查目标进程PID:pidof ffmpeg 或 ps aux | grep wps
再执行绑定命令:sudo taskset -cp 0-3 PID号(将进程固定到CPU 0、1、2、3)
验证是否生效:taskset -cp PID号,输出应显示“pid XXX's current affinity list: 0-3”
方法二:用sched_setaffinity系统调用(需编程实现)
适用于C/C++开发场景,在进程启动后调用sched_setaffinity()函数传入cpu_set_t掩码;若未设置CAP_SYS_NICE权限,需sudo或在systemd服务中配置AmbientCapabilities=CAP_SYS_NICE
启动新进程时直接绑定核心
第一步:绑定并运行单命令taskset -c 0-3 python3 train.py → 进程从启动起就只在CPU 0~3运行
第二步:绑定+提权+后台常驻(推荐用于服务类进程)sudo taskset -c 4-7 chrt -f 85 /opt/myapp/server --daemon
第三步:写入systemd服务文件实现开机固化
编辑 /etc/systemd/system/myapp.service,在[Service]段加入:CPUAffinity=4 5 6 7CPUSchedulingPolicy=fifoCPUSchedulingPriority=85
保存后执行:sudo systemctl daemon-reload && sudo systemctl enable myapp











