分享

CPU与线程绑定

 jijo 2008-09-18
线程CPU绑定
2008-07-24 17:59

1. 在用户空间进行线程CPU绑定

1)头文件

#include <sched.h>

2)函数原型

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

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

sched_setaffinity, sched_getaffinity – set and get a process’s CPU affinity mask

3)程序实例

cpu_set_t mask;

__CPU_ZERO(&mask);

__CPU_SET(0, &mask);

sched_setaffinity(0,sizeof(cpu_set_t),&mask);

此段代码可将线程绑定在0CPU上。

2. 在内核空间进行线程CPU绑定

1)头文件

#include <linux/sched.h>

2)函数原型

int set_cpus_allowed(struct task_struct *p, cpumask_t new_mask);

Change a given task‘s CPU affinity

3)程序实例

#ifdef CONFIG_SMP

static cpumask_t apm_save_cpus(void)

{

    cpumask_t x = current->cpus_allowed;

    /* Some bioses don‘t like being called from CPU != 0 */

    set_cpus_allowed(current, cpumask_of_cpu(0));

    BUG_ON(smp_processor_id() != 0);

    return x;

}

static inline void apm_restore_cpus(cpumask_t mask)

{

    set_cpus_allowed(current, mask);

}

#else

/*

*       No CPU lockdown needed on a uniprocessor

*/

#define apm_save_cpus()         (current->cpus_allowed)

#define apm_restore_cpus(x)    (void)(x)

#endif

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多