负载均衡-指定进程/线程运行的CPU-(affinity setup)
2012-12-26 17:32
423 查看
多线程、多进程的情况下。
可以同过指定CPU进行负载均衡,而不是让操作系统自动进行负载均衡。
因为你比操作系统更了解自己的程序,为了避免调度器愚蠢的调度你的程序,或是为了在多线程程序中避免缓存失效造成的开销。
进程指定函数:sched_setaffinity(); sched_getaffinity();
线程指定函数:pthread_setaffinity_np(); pthread_getaffinity_np();
DEMO:
可以同过指定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); }
相关文章推荐
- 通过设置进程或线程的亲缘性(affinity),使进程或线程在指定的CPU(核)上运行
- linux 下进程和线程指定CPU运行
- 如何设置进程(线程)在指定的CPU上运行
- 如何设置进程(线程)在指定的CPU上运行
- Linux编程-让进程或线程运行在指定的CPU上
- 多核优化,使用linux affinity 将进程,线程,中断指定到对应的cpu运行,用ftrace查看消耗时间
- Linux 进程、线程运行在指定CPU核上
- 如何设置进程(线程)在指定的CPU上运行
- 如何设置进程(线程)在指定的CPU上运行
- 如何设置进程(线程)在指定的CPU上运行
- 指定cpu运行进程或线程
- 在VB中如何让线程或进程在指定的CPU上运行
- 多核环境下绑定进程运行在指定的CPU核上
- 在linux下查看指定进程的所运行的CPU核
- Linux_多核系统下绑定进程或线程到指定CPU_核执行
- windows下绑定线程(进程)到指定的CPU核心
- 用SetProcessAffinityMask为进程指定CPU
- 指定某个cpu只运行指定进程的做法
- linux进程、线程与cpu的亲和性(affinity)
- 写程序 控制cpu占用率-4 绘制CPU使用率的正弦曲线2 通过C#指定线程运行的 CPU