【工作笔记】CPU亲和性
近日看春华兄的代码,发现在每个线程中在处理具体事务前都调用一个set_cpu()的方法。深感不解,直到看了set_cpu的源码和查了一些资料才明白,原来是进行CPU绑定,或者说CPU亲和性。就是进程/线程要在指定的 CPU 上尽量长时间地运行而不被迁移到其他处理器,这样做最直观的好处就是提高了cpu cache的命中率,从而减少内存访问损耗,提高程序的速度。同时也能使用绑核考虑就是将重要的业务进程隔离开,对于部分实时进程调度优先级高,可以将其绑定到一个指定核上,既可以保证实时进程的调度,也可以避免其他CPU上进程被该实时进程干扰。
关于CPU亲和性下面这篇文章写的非常好:管理处理器的亲和性。
set_cpu()源码
int set_cpu() { cpu_set_t mask; int NUM_PROCS = sysconf(_SC_NPROCESSORS_CONF); int i = random() % NUM_PROCS; CPU_ZERO(&mask); CPU_SET(i, &mask); if (-1 == sched_setaffinity(pthread_self(), sizeof(&mask), &mask)) { return -1; } return 0; }