前言

以下介绍两个用于CPU绑核命令

taskset 适用于已经在运行的程序

numactl 适用于准备运行的程序

目录

1. 命令 taskset 

1.1. 查看进程绑核状态

1.2. 指定PID绑核

2. 命令 numactl

2.1. 查看节点信息

2.2. 查看内存访问命中率

2.3. 指定某个节点

2.4. 指定程序绑核CPU


1. 命令 taskset 


   
  1. 参数选项:
  2. -a, --all-tasks 在给定 pid 的所有任务(线程)上操作
  3. -p, --pid 在存在的给定 pid 上操作
  4. -c, --cpu-list 以列表格式显示和指定 CPU
  • 用于查看和控制某个进程绑核

1.1. 查看进程绑核状态

taskset  -cp  [pid]

  • 使用的CPU为:0-7

1.2. 指定PID绑核

taskset  -cp  3  [pid]

  • 第一行:原本使用的CPU
  • 第二行:指定使用cpu3 

2. 命令 numactl


   
  1. 参数选项:
  2. -a: 使用所有的CPU
  3. -C: 指定某个CPU,只在固定cpu上执行进程。
  4. -i: 设置内存交错策略。内存将在节点上使用轮询分配。当内存不能在当前交错上分配时
  5. -H: 显示系统中可用节点的目录。
  6. -m: 指定某个节点,只从此节点分配内存
  7. -N: 指定某个节点,只在此节点的cpu上执行命令
  8. -l: 总是在当前节点上分配
  9. --preferred=node
  10. 如果指定的内存无法分配足够的空间,可以指定去某一个节点的内存分配。
  11. --huge
  12. 在创建SYSV共享内存段时,使用大页面。
  13. --offset
  14. 指定共享内存段的偏移量。默认为0。有效的单位是m(表示MB), g(表示GB), k(表示KB),否则指定字节。
  15. --strict
  16. 当共享内存段中策略区域中的页已经错误地使用了冲突的策略时,给出一个错误。默认是默默忽略这一点。
  17. --shmmode shmmode
  18. 仅在——shmid或——shm之前有效。创建共享内存段时,将其设置为数字模式shmmode。
  19. --length length
  20. 将策略应用到共享内存段的长度范围或将段的长度设置为长默认情况下,创建共享内存段时使用剩余的长度Required,然后指定新段的长度。有效的单位是m(对于MB), g(对于GB), k(对于KB)
  21. --shmid id
  22. 创建或使用一个ID为数字的共享内存段ID
  23. --shm shmkeyfile
  24. 创建或使用共享内存段,使用从shmkeyfile中使用ftok(3)生成的ID
  25. --file tmpfsfile
  26. 设置tmpfs或hugetlbfs文件的策略
  27. -- touch
  28. 触摸页面以尽早执行策略。默认情况下是不访问它们,当应用程序映射和访问页面时,该策略将被应用。
  29. --dump
  30. 指定范围内的转储策略。
  31. --dump-nodes
  32. 转储特定范围内的所有节点(非常详细!)
  • 用于控制进程或共享内存

2.1. 查看节点信息

numactl  -H


   
  1. available:node数量(0 表示 只有一个node)
  2. cpus :CPU列表(0-7表示有8个)
  3. size :内存总大小
  4. free :剩余内存大小
  5. 解释:
  6. 因为只有一个node,所以前面都表示 node 0
  7. 如果有4个node,那么会分别表示 node 0, node 1, node 2, node 3 的信息

2.2. 查看内存访问命中率

numastat

参数选项:

  • -c  最小化列宽度
  • -m 显示类似meminfo的系统级内存使用情况
  • -n  显示numastat统计信息
  • -z  跳过skip 的行和列
  • -p <PID>     显示进程信息
  • -s [<node>] 按总列或节点


   
  1. node0 :节点名
  2. numa_hit :表示节点内CPU核访问本地内存的次数
  3. numa_miss :表示节点内核访问其他节点内存的次数
  4. numa_foreign :其他node访问当前node内存次数
  5. interleave_hit:采用interleave策略,最后从该节点分配的次数
  6. local_node :这个节点的进程 成功在这个节点上分配内存访问的大小
  7. other_node :这个节点的进程 在其它节点上分配的内存访问大小
  8. 注意:
  9. 跨节点访问内存会存在延迟,导致性能下降,
  10. 所以 numa_miss 和 numa_foreign 的值越低越好。

2.3. 指定某个节点

numactl  -N 0  -m 0  -C 2-6  sh run_cpu.sh


   
  1. -N 0 :指定CPU只能在 node 0 上面运行
  2. -m 0 :执行内存只能在 node 0 上面运行
  3. -C 2-6:执行程序所使用的CPU列表 2-6
  4. sh run_cpu.sh:执行某个程序
  5. 指定多个节点
  6. numactl -N 0,1 -m 0,1 -C 2-6 sh run_cpu.sh

2.4. 指定程序绑核CPU

numactl  -C 0-4  sh run_cpu.sh

  • -C 0-4:执行程序只能使用0-4的CPU

numactl  -C 3  sh run_cpu.sh

  • -C 3:指定程序只能使用第3个CPU,也就是 cpu2

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐