3

最近在使用 Linux 内核的工作队列,我发现了一些我不确定它是什么(“CPU 死”)的东西,甚至在谷歌上搜索它。

这是否意味着特定的 CPU 内核当前不可用或类似的东西?

以下是我要问的问题的上下文(完整版):

/**
 * 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);
}
4

1 回答 1

2

Per-cpu 工作队列通常是首选,因为它们往往表现出更好的性能。

工作队列在一个 CPU 上提交,但如果该CPU 进入 IDLE状态,则工作队列将移动到另一个 CPU。

如果工作队列(每个工作人员一个工作队列)为空,则工作人员进入空闲状态。

每个绑定到实际 CPU 的工作池通过挂钩到调度程序来实现并发管理。每当活跃的工作人员醒来或睡觉时,工作人员池都会收到通知,并跟踪当前可运行的工作人员的数量。通常,工作项不会占用 CPU 并消耗很多周期。这意味着保持足够的并发性以防止工作处理停止应该是最佳的。只要 CPU 上有一个或多个可运行的 worker,worker-pool 就不会开始执行新的工作,但是,当最后一个运行的 worker 进入睡眠状态时,它会立即调度一个新的 worker,以便 CPU 不会当有待处理的工作项时,不要闲着。这允许在不损失执行带宽的情况下使用最少数量的工作人员。

这里

于 2019-07-19T12:20:52.490 回答