代码语言:javascript 复制 #include<sched.h>intsched_getaffinity(pid_t pid,size_t cpusetsize,cpu_set_t*mask);intsched_setaffinity(pid_t pid,size_t cpusetsize,constcpu_set_t*mask); sched_setaffinity():设置进程或线程的CPU亲和性 sched_ getaffinity():获取进程或线程的CPU亲和性 参数说明 pid:...
cpu_set_t get_cpuset; // 定义一个变量get_cpuset用于获取当前进程的CPU亲和性 CPU_ZERO(&get_cpuset); // 初始化get_cpuset // 尝试获取当前进程的CPU亲和性 if (sched_getaffinity(0, cpusetsize, &get_cpuset) == -1) { perror("sched_getaffinity failed"); // 如果获取失败,则打印错误信息 ex...
int pthread_setaffinity_np(pthread_t thread, size_t cpusetsize, const cpu_set_t *cpuset); int pthread_getaffinity_np(pthread_t thread, size_t cpusetsize, cpu_set_t *cpuset); 另外可以通过下面的函数获知当前进程运行在哪个 CPU 上: int sched_getcpu(void); 如果调用成功,该函数返回一个非负...
int sched_getaffinity(pid_t pid, size_t cpusetsize,cpu_set_t *mask);另外可以通过下面的函数获知当前进程运行在哪个CPU上:int sched_getcpu(void);如果调用成功,该函数返回一个非负的CPU编号值。例程:#define _GNU_SOURCE #include <sched.h> #include <unistd.h> #include <sys/types.h> #...
在Linux中,可以使用以下两个函数设置和获取进程的CPU Affinity属性 #define _GNU_SOURCE#include<sched.h>intsched_setaffinity(pid_tpid,size_tcpusetsize,constcpu_set_t*mask);intsched_getaffinity(pid_tpid,size_tcpusetsize,cpu_set_t*mask);/* Set the CPU affinity for a task */externintsched_seta...
CPU亲和性(affinity)就是进程要在某个给定的CPU上尽量长时间的运行而不被迁移到其他处理器的倾向性。 linux内核进程调度器天生具有软CPU亲和性(affinity)的特性,着意味着进程通常不会在处理器之间频繁迁移。这种状态正是我们希望的,因为进程迁移的频率小就意味着产生的负载小。
简单地说,CPU 亲和性(affinity)就是进程要在某个给定的 CPU 上尽量长时间地运行而不被迁移到其他处理器的倾向性。Linux 内核进程调度器天生就具有被称为软 CPU 亲和性(affinity)的特性,这意味着进程通常不会在处理器之间频繁迁移。这种状态正是我们希望的,因为进程迁移的频率小就意味着产生的负载小。
·sched_getaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_tmask) 该函数获得pid所指示的进程的CPU位掩码,并将该掩码返回到mask所指向的结构中.即获得指定pid当前可以运行在哪些CPU上.同样,如果pid的值为0.也表示的是当前进程. cpu_set_t的定义 ...
Linux调度器同样支持自然CPU亲和性(natural CPU affinity):调度器会试图保持进程在相同的CPU上运行, 这意味着进程通常不会在处理器之间频繁迁移,进程迁移的频率小就意味着产生的负载小。 因为程序的作者比调度器更了解程序,所以我们可以手动地为其分配CPU核,而不会过多地占用CPU0,或是让我们关键进程和一堆别的进程...
利用glibc库中的sched_getaffinity接口,我们获取应用程序当前的cpu亲缘性,而通过sched_setaffinity接口则可以把应用程序绑定到固定的某个或某几cpu上运行。相关定义如下: 1 #include <sched.h> 2 3 4 void CPU_ZERO(cpu_set_t *set); 5 void CPU_CLR(int cpu, cpu_set_t *set); ...