gpt4 book ai didi

linux - 内核中关于工作队列的一些标志

转载 作者:太空狗 更新时间:2023-10-29 12:33:55 25 4
gpt4 key购买 nike

我正在处理 linux 内核 2.6.36 中的并发管理工作队列。但是我对某些标志感到困惑。

  • WQ_HIGHPRI
  • WQ_UNBOUND
  • WQ_RESCUER
  • WQ_CPU_INTENSIVE

我创建了一个带有标志 WQ_HIGHPRI 的工作队列,并将一些工作项(例如 w1 w2 w3 w4,按顺序)排队,这 4 个工作项都不会休眠。

  1. 4个工作项是否由同一个线程执行,在这种情况下,是否创建了任何线程?

  2. 在上述情况下,使用WQ_UNBOUND有什么不同吗?因为如果您设置WQ_UNBOUND,那么内核将设置WQ_HIGHPRI

提前致谢。

最佳答案

以下摘录解释了 workqueue design in the Linux kernel 的基础知识.

In the original wq implementation, each wq maintained its own separate worker pool. A MT wq could provide only one execution context per CPU while a ST wq one for the whole system. Work items had to compete for those very limited execution contexts leading to various problems.

In order to ease the asynchronous execution of functions a new abstraction, the work item, is introduced.

A work item is a simple struct that holds a pointer to the function that is to be executed asynchronously. Whenever a driver or subsystem wants a function to be executed asynchronously it has to set up a work item pointing to that function and queue that work item on a workqueue.

Special purpose threads, called worker threads, execute the functions off of the queue, one after the other. If no work is queued, the worker threads become idle. These worker threads are managed in so called thread-pools.

为了消除这些问题,开发了Concurrency Managed Workqueue (cmwq) 框架。顾名思义,重点是提供最大的并发性,即以最小的开销减少工作项的阻塞。


各种“WQ_*”标志

<强>1。 WQ_HIGHPRI

  • 高优先级工作队列的工作项排队到高优先级线程池,其中包含具有更高 nice 级别的工作线程。普通线程池和高优先级线程池不会相互影响。每个维护其独立的工作人员池并在其工作人员之间实现并发管理。

<强>2。 WQ_UNBOUND

  • 不参与工作队列并发管理。工作项未绑定(bind)到特定的 CPU,并且可以安排在任何可用的 CPU 上运行。如果需要,还可以唤醒额外的工作线程。

<强>3。 WQ_RESCUER

  • 已弃用(在最新内核中)。被 WQ_MEM_RECLAIM 取代。阅读此 answer 了解详情。

<强>4。 WQ_CPU_INTENSIVE

  • 不参与工作队列并发管理。相反,它是 CPU 调度程序的责任,就像任何其他任务一样。

每个标志的详细描述和当前工作队列设计背后的理念可在 Linux-kernel-src/Documentation/workqueue.txt 中找到。


考虑到以上信息,您的查询的答案是:

  1. 所有 4 个工作项都在绑定(bind)到特定 CPU 的高优先级线程上排队。

  2. 使用 WQ_UNBOUND 将允许工作项在多次运行中的任何可用 CPU 上执行。

关于linux - 内核中关于工作队列的一些标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18039182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com