linux 多核 绑定,多核处理器LINUX的进程绑定处理器核运行.doc

多核处理器Linux的进程绑定处理器核运行

名词CPU affinity:中文称作“CPU亲和力”,是指在CMP架构下,能够将一个或多个进程绑定到一个或多个处理器上运行。

一、Linux代码中绑定多核运行

1、如果自己写代码,要把进程绑定到CPU,该怎么做?可以用 \o "sched_setaffinity函数" sched_setaffinity函数。在Linux上,这会触发一次 \o "系统调用" 系统调用。

int sched_setaffinity(pid_t pid, unsigned int len, unsigned long *mask);

sched_setaffinity 的第一个参数是pid (进程ID),设置进程为pid的这个进程,让它运行在mask所设定的CPU上。如果pid的值为0,则表示指定的是当前进程,使当前进程运行在mask所设定的那些CPU上;第二个参数cpusetsize是mask所指定的数的长度。通常设定为sizeof(cpu_set_t);如果当前pid所指定的CPU此时没有运行在mask所指定的任意一个CPU上,则该指定的进程会从其它CPU上迁移到mask的指定的一个CPU上运行。

int sched_getaffinity(pid_t pid, unsigned int len, unsigned long *mask);

该函数获得pid所指示的进程的CPU位掩码,并将该掩码返回到mask所指向的结构中,即获得指定pid当前可以运行在哪些CPU上。同样,如果pid的值为0.也表示的是当前进程。

void CPU_ZERO (cpu_set_t *set)

这个宏对 CPU 集 set 进行初始化,将其设置为空集。

void CPU_SET (int cpu, cpu_set_t *set)

这个宏将 cpu 加入 CPU 集 set 中。

void CPU_CLR (int cpu, cpu_set_t *set)

这个宏将 cpu 从 CPU 集 set 中删除。

int CPU_ISSET (int cpu, const cpu_set_t *set)

如果 cpu 是 CPU 集 set 的一员,这个宏就返回一个非零值(true),否则就返回零(false)。

Example:我是在一个虚拟机上运行的程序,机器CPU是双核的,我设置虚拟机模拟四核。在linux上执行top指令看结果,点击“1”查看每个CPU核的运行情况。

/* Short test program to test sched_setaffinity

* (which sets the affinity of processes to processors).

* Compile: gcc sched_setaffinity_test.c

* -o sched_setaffinity_test.o -lm

* Usage: ./sched_setaffinity_test.o

*

* Open a "top"-window at the same time and see all the work

* being done on CPU 0 first and after a short wait on CPU 1,2,3.

* Repeat with different numbers to make sure, it is not a

* coincidence.

*/

#include

#include

#include

double waste_time(long n)

{

double res = 0;

long i = 0;

while(i

i++;

res += sqrt(i);

}

return res;

}

int main(int argc, char **argv)

{

unsigned long mask = 1; /* 二进制1,processor 0 */

/* bind process to processor 0 */

if (sched_setaffinity(0, sizeof(mask), &mask) <0) {

perror("sched_setaffinity");

}

/* waste some time so the work is visible with "top" */

printf ("result: %f\n", waste_time (2000));

mask = 2; /*二进制10, process switch

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值