Linux调度程序提供强制的处理器绑定机制。也就是说,虽然它尽力通过一种软的或者说自然的亲和性试图使进程尽量在同一个处理器上运行。但它也允许用户强制指定“这个进程无论如何必须在这些处理器上运行。”这种强制的亲和性保存在进程task_struct的cpu_allowed这个位掩码标志中。该掩码标志的每一位对应一个系统可用的处理器。 默认情况下,所有的位都被设置,进程可以在系统中所有可用的处理器上执行。用户可以通过sched_setaffinity()设置一个不同的一个或几个位组合的位掩码。而调用sched_getaffinity()则返回当前的cpus_allowed位掩码。
内核提供的强制处理器绑定的方法很简单。首先,当进程第一次创建时,它继承了其父进程的相关掩码。由于父进程运行在指定的处理器上,子进程也运行在相应的处理器上。其次,当处理器绑定关系改变时,内核会采用“移植线程”把任务推到合法的处理器上。最后,负载平衡器只把任务拉到允许的处理器上。因此,进程只运行在指定的处理器上,对处理器的指定是由该进程描述符的cpus_allowed域设置的。
与处理器绑定有关的系统调用
最新推荐文章于 2024-08-24 22:00:13 发布