当前位置: 首页 > ai >正文

linux taskset 查询或设置进程绑定CPU

1、安装 taskset

lark@ubuntu:~$ sudo apt-get install util-linux

lark@ubuntu:~$ taskset --help
用法: taskset [选项] [mask | cpu-list] [pid|cmd [args...]]
显示或更改进程的 CPU 关联性。

选项:
-a, --all-tasks 对给定 pid
的所有任务(线程)进行作 -p, --pid 对现有的给定 pid
进行作 -c, --cpu-list display 并以列表格式
指定 cpu -h, --help 显示此帮助
-V, --version 显示版本

默认行为是运行新命令:
taskset 03 sshd -b 1024
您可以检索现有任务的掩码:
taskset -p 700
或设置它:
taskset -p 03 700
列表格式使用逗号分隔的列表而不是掩码:
taskset -pc 0,3,7-11 700
列表格式的范围可以采用 stride 参数:
例如,0-31:2 等同于掩码 0x55555555

有关更多详细信息,请参阅 taskset(1)。

2,,查询确认系统是几个核的

lark@ubuntu:~$ cat /proc/cpuinfo |grep “processor”
处理器 : 0
处理器 : 1
处理器 : 2
处理器 : 3
处理器 : 4
处理器 : 5
处理器 : 6
处理器 : 7

lark@ubuntu:~$ taskset -c -p 3109
PID 3109 的当前亲和力列表:0-7

lark@ubuntu:~$ taskset -a -p 3554
pid 3554 的当前亲和掩码:ff

绑定内核,指定进程pid在cpu_id上 taskset -pc cpu_id PID

lark@ubuntu:~$ taskset -c -p 3109
pid 3109 的当前亲和值列表:0-7
lark@ubuntu:~$
lark@ubuntu:~$ taskset -pc 1 3109
PID 3109 的当前亲和值列表:0-7
PID 3109 的新亲和值列表:1
lark@ubuntu:~$ taskset -c -p 3109
PID 3109 的当前亲和值列表:1

更改具体某一进程(或 线程)CPU亲和性

taskset -p hexadecimal mask PID/LWP
上面号线程可以在0~3号CPU之间允许,现在设置掩码0x11(二进制0001 0001),表示可以在0~3号CPU上允许。

为具体某一进程(或 线程)CPU亲和性指定一组范围

lark@ubuntu:~$ taskset -pc 0,1,2 3109
pid 3109 的当前亲和力列表:7
pid 3109 的新亲和力列表:0-2
lark@ubuntu:~$ taskset -c -p 3109
pid 3109 当前的亲和力列表:0-2

3,内核态函数绑定cpu以及用户态绑定cpu举例 

sched_setaffinity():绑定线程到 CPU 核心。

  
#define _GNU_SOURCE  
#include <stdio.h>  
#include <sched.h>  
#include <pthread.h>  void* thread_func(void* arg) {  cpu_set_t cpuset;  CPU_ZERO(&cpuset);  CPU_SET(1, &cpuset);  // 绑定到 CPU 1  if (sched_setaffinity(0, sizeof(cpu_set_t), &cpuset) == -1) {  perror("sched_setaffinity failed");  }  while (1);  // 模拟线程工作  return NULL;  
}  int main() {  pthread_t thread;  pthread_create(&thread, NULL, thread_func, NULL);  pthread_join(thread, NULL);  return 0;  
}  

2,内核态绑定cpu,set_cpus_allowed_ptr():设置内核线程的 CPU 亲和性

 <linux/kthread.h>  
#include <linux/cpumask.h>  static int kernel_thread_func(void* data) {  cpumask_var_t mask;  alloc_cpumask_var(&mask, GFP_KERNEL);  cpumask_clear(mask);  cpumask_set_cpu(2, mask);  // 绑定到 CPU 2  set_cpus_allowed_ptr(current, mask);  while (!kthread_should_stop()) {  // 内核线程任务  }  return 0;  
}  static int __init init_module(void) {  struct task_struct *task = kthread_run(kernel_thread_func, NULL, "kbind_thread");  return 0;  
}  

用户态通过sched_setaffinity()  绑定线程,内核态需操作 cpumask和任务调度器绑定内核线程。

http://www.xdnf.cn/news/8559.html

相关文章:

  • Vue3的模块化设计: 使用Script Setup API
  • 人脸美颜磨皮祛痘3:深度学习SUNet神经网络实现图片修复(含训练代码、数据集和GUI交互界面)
  • 【MPC控制 - 从ACC到自动驾驶】ACC系统原理与MPC初步认知
  • P3392 涂条纹
  • 零基础学习计算机网络编程----网络基本知识
  • python安装
  • css五边形
  • Spring boot使用
  • Git使用
  • 串扰与反射对信号完整性的影响
  • Spring Boot微服务架构(四):微服务的划分原则
  • 精益数据分析(82/126):先行指标驱动的增长黑客策略——从相关性到因果性的跨越
  • 基于大模型预测的视神经脊髓炎技术方案
  • Java—— IO流的应用
  • Python 爬虫之requests 模块的应用
  • Trae(The Real Al Engineer)
  • SQL每日一练(2)
  • Vue3响应式数据: 深入分析Ref与Reactive
  • React 文件分片上传与下载全解析
  • 听课笔记之中国式现代化导论
  • 提效-点击跳转到源码
  • C++系统IO
  • 电脑C盘清理技巧:释放空间,提升性能
  • 【MySQL】表的内外连接
  • 缓存的更新机制
  • 计算机网络期末复习资料
  • 建筑机械员(建筑施工机械管理人员)考试练习题
  • Gartner《Optimize GenAI Strategy for 4 Key ConsumerMindsets》学习心得
  • Netty学习专栏(四):如何解决粘包/拆包问题及自定义协议的实现
  • 网络安全从零开始(一):基础技能全解析