麒麟os中可通过taskset或systemd的cpuaffinity限制应用独占特定物理核心,避免跨核缓存失效与调度抖动;需依据lscpu和/proc/cpuinfo识别物理核心与逻辑线程映射(如0-1、2-3为同一物理核心),绑定时应选连续编号对而非间隔编号。

麒麟OS中限制应用仅使用特定物理核心的CPU线程,可避免跨核缓存失效与调度抖动,尤其适用于编译、虚拟机、实时音视频等对延迟敏感的任务。必须明确区分逻辑线程与物理核心——超线程启用时,编号0/1属于同一物理核心,0/2则分属不同核心。
确认物理核心与逻辑线程映射关系
打开终端,执行:lscpu | grep "Core(s) per socket\|Socket(s)\|CPU(s):",查看每个插槽的核心数与总逻辑CPU数;再运行:cat /proc/cpuinfo | awk -F': ' '/^processor|^physical id|^core id/ {printf "%s ", $2} END {print ""}' | sort -n,输出每行含“处理器编号 物理ID 核心ID”,据此识别连续编号是否归属同一物理核心。
【编号0、2、4…为同一物理核心的逻辑线程,绑定时若需独占一个物理核心,应选0-1或2-3这类连续编号,而非0-2】。
对已运行进程绑定到指定物理核心线程
方法一:用taskset临时绑定(重启后失效)
先查目标进程PID:pidof wps 或 ps aux | grep python3 | grep train.py;
再执行绑定命令:sudo taskset -cp 0-1 PID号(将进程锁定在CPU 0和1,即第一个物理核心的两个逻辑线程);
验证是否生效:taskset -cp PID号,输出应显示“pid XXX's current affinity list: 0-1”。
方法二:用sched_setaffinity编程控制(需C/C++开发介入)
在进程启动后调用sched_setaffinity()函数,传入cpu_set_t掩码,仅设置bit 0和bit 1;
若未配置CAP_SYS_NICE权限,需以sudo运行或在systemd服务中添加AmbientCapabilities=CAP_SYS_NICE。
启动新进程时直接绑定物理核心线程
第一步:单命令绑定并运行taskset -c 4-5 java -jar app.jar→ 进程从启动起就只在CPU 4和5(第二个物理核心)上运行。
第二步:绑定+提权+后台常驻(推荐用于长期服务)sudo taskset -c 6-7 chrt -f 85 /opt/myapp/server --daemon→ 同时锁定物理核心3(CPU 6/7)、启用FIFO实时调度策略、优先级设为85。
第三步:写入systemd服务文件实现开机固化
编辑/etc/systemd/system/myapp.service,在[Service]段加入:CPUAffinity=6 7CPUSchedulingPolicy=fifoCPUSchedulingPriority=85
保存后执行:sudo systemctl daemon-reload && sudo systemctl enable myapp。











