【工作笔记】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;
}

 

posted @ 2014-10-16 09:59  绿茵飞狼  阅读(542)  评论(0编辑  收藏  举报