# 程序绑核
#### 简介
进程绑核（又称CPU亲和性，CPU Affinity）是一种将进程或线程 "绑定" 到特定CPU核心上运行的技术，通过限制进程在指定核心间调度，实现对进程运行位置的精确控制。
#### 准备工作
准备一台ECS主机。
#### 前置条件
- 适用场景：CPU调度频繁、跨numa和跨片带来性能下降的场景。
- 设置效果：设置CPU到固定核心上，不会发生CPU调度、跨numa和跨die。
 
#### 操作步骤
1. taskset命令，将进程绑定CPU。 
   启动时绑核：
   ```
   taskset -c {cpu_lists}  + 运行的程序
   ```
   运行中绑核：
   ```
   taskset -cp {cpu_lists}  + 程序的pid
   ```
   
   

2. 如果是numa架构，也可选择numactl命令进行绑定。 
   绑核：
   ```
   numactl -C {cpu_list} + 运行的程序 
   #-C cpus或--physcpubind=cpus
   ```
   绑numa范围的核：
   ```
   numactl -N {numa_node_list} + 运行的程序 
   # -N nodes或--cpunodebind=nodes
   ```
   
   
![](https://support.huaweicloud.com/bestpractice-hce/public_sys-resources/note_3.0-zh-cn.png)
- {cpu_list}：示例0，或者1\~13,16等。
- {numa_node_list} ：示例+0，或者+0,+2等多个numa，或者0-2也可以。
- 查看程序当前运行的cpu核亲和性：taskset -cp {pid}。
- numactl其它参数：
  - -m {numa_node}绑内存，如-m +0，绑定内存到numa0，-m +0,+1则绑定到numa0和numa1，或者0-2也可以，表示numa0/1/2。
  
  - -i \<nodes\>设置内存交织，如-i 0,1则numa0和numa1的内存交织，-i all表示所有numa内存交织。
   
 
