最近使用Linux内核的工作队列,我发现了一些东西(“ CPU死机”),即使我用谷歌搜索了它也不确定。
这是否意味着特定的CPU内核当前不可用或类似的东西?
以下是我要问的问题的上下文(full-version):
/**
* queue_work - queue work on a workqueue
* @wq: workqueue to use
* @work: work to queue
*
* Returns %false if @work was already on a queue, %true otherwise.
*
* We queue the work to the CPU on which it was submitted, but if the CPU dies
* it can be processed by another CPU.
*/
static inline bool queue_work(struct workqueue_struct *wq,
struct work_struct *work)
{
return queue_work_on(WORK_CPU_UNBOUND, wq, work);
}
答案 0 :(得分:2)
每个CPU工作队列通常是首选的,因为它们倾向于表现出更好的性能。
工作队列是在一个CPU上提交的,但是如果此 CPU进入IDLE ,则工作队列将移至另一个CPU。
如果工人的工作队列(每个工人一个工作队列)为空,则进入空闲状态。
绑定到实际CPU的每个工作池都通过挂接到调度程序来实现并发管理。每当活动的工人醒来或睡觉时,都会通知该工人池,并跟踪当前可运行的工人的数量。通常,不希望工作项占用CPU并消耗很多周期。这意味着保持足够的并发性以防止工作处理停滞应该是最佳的。只要CPU上有一个或多个可运行的工作程序,工作程序池就不会开始执行新工作,但是,当最后一个正在运行的工作程序进入睡眠状态时,它将立即调度一个新工作程序,以便CPU可以在有待处理的工作项目时不要闲着。这样可以使用最少数量的工作程序,而不会丢失执行带宽。
请参见here