您的位置:首页 > 其它

负载均衡-指定进程/线程运行的CPU-(affinity setup)

2012-12-26 17:32 423 查看
多线程、多进程的情况下。

可以同过指定CPU进行负载均衡,而不是让操作系统自动进行负载均衡。

因为你比操作系统更了解自己的程序,为了避免调度器愚蠢的调度你的程序,或是为了在多线程程序中避免缓存失效造成的开销。

进程指定函数:sched_setaffinity(); sched_getaffinity();
线程指定函数:pthread_setaffinity_np(); pthread_getaffinity_np();

DEMO:
//#define __USE_GNU
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <sched.h>
#include <unistd.h>
#include <error.h>

int main(int argc, char **argv)
{
int i = 0;
int setid = 0;
int prcs_num = 0;
cpu_set_t mask;

if (argc == 2)
setid = atoi(argv[1]);

prcs_num = sysconf(_SC_NPROCESSORS_CONF);
printf("System has %d processor(s).\n", prcs_num);

CPU_ZERO(&mask);
CPU_SET(setid, &mask);
if (-1 == sched_setaffinity(0, sizeof(mask), &mask))
{
perror("sched_setaffinity");
exit(-1);
}
CPU_ZERO(&mask);
if (-1 == sched_getaffinity(0, sizeof(mask), &mask))
{
perror("sched_getaffinity");
exit(-1);
}
for (i = 0; i < prcs_num; ++i)
if (CPU_ISSET(i, &mask))
printf("The process %d is running in processor %d\n", getpid(), i);
exit(0);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: