CPU与线程绑定2

来源:百度文库 编辑:神马文学网 时间:2024/04/28 05:08:38
线程CPU绑定2008-07-24 17:59

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

1)头文件

#include

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