问题标签 [workqueue]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1581 浏览

c - 这些工作队列的标志是什么意思?

在研究工作队列时,我遇到了内核中定义的工作队列标志和常量。我有以下我无法理解的疑问。

  1. 这里的排水和救援人员到底是什么意思?

    /li>
  2. 为未绑定工作队列定义的 CPU 数量为 4。如果我有一个八核处理器会怎样。无界 wq 将如何绑定到 cpus。他们如何决定运行哪些 CPU,因为他们现在有 8 个 CPU 而不是 4 个 CPU。是这样吗,它们可以在 8 个或仅 4 个特定 cpu 上运行?

    WQ_MAX_UNBOUND_PER_CPU = 4, /* 4 * #cpus for unbound wq */

0 投票
1 回答
10990 浏览

c - tasklet和workqueue有什么区别

我是 Linux 设备驱动程序新手,想知道 和 之间的确切tasklet区别workqueue。我有以下疑问:

  1. 在中断/进程上下文中运行时,中断、tasklet 和工作队列使用哪个内核堆栈?
  2. tasklet 和 workqueue 将以什么优先级运行,我们可以修改它的优先级吗?
  3. 如果我实现自己的工作队列列表,我可以独立安排/优先考虑它吗?
0 投票
1 回答
287 浏览

c - 如果在工作队列完成之前发生相同的中断,则工作队列处理

在 Linux 中,我有一个 ISR,我想安排一个工作队列来将我的工作推到下半部分。现在我遇到了工作队列尚未完成其任务并且再次发生相同中断的情况。

现在我应该如何处理这种情况,或者说是否需要采取一些措施来处理这种情况?

0 投票
2 回答
2850 浏览

c - Linux内核中的工作队列实现

任何人都可以帮助我了解 Linux 内核中以下提到的 API 之间的区别:

我已经编写了示例模块,当我尝试使用 来查看它们时ps -aef,它们都创建了一个工作队列,但我看不到任何区别。

我参考了http://www.makelinux.net/ldd3/chp-7-sect-6,并根据 LDD3 :

如果你使用create_workqueue,你会得到一个工作队列,它为系统上的每个处理器都有一个专用线程。在许多情况下,所有这些线程都只是矫枉过正。如果单个工作线程就足够了,请改为使用 create_singlethread_workqueue 创建工作队列。

但我无法看到多个工作线程(每个用于一个处理器)。

0 投票
1 回答
267 浏览

c - 通过工作队列调用 aio_complete 时出现内核错误

问题的简短版:

通过 io_submit(使用 O_DIRECT 打开文件)处理提交 IO。在kiocb->ki_complete(aio_complete_rw)fs address_space_operations 中调用时.direct_IO,一切正常。但是当kiocb->ki_complete(aio_complete_rw)在 workqueue 工作函数中调用时(在 fs 末尾排队.direct_IO),就会发生内核 Oops。


我修改了 fs 的代码以接收来自 libaio 接口的请求,fs 会将请求排队到 workqueue 并返回EIOCBQUEUED。然后排队的工作只会调用iocb->ki_complete,并且发生内核 Oops。

我曾尝试在 fs(return 之前)中调用 iocb->ki_completeEIOCBQUEUED并且效果很好。

PS:我尝试使用workqueue异步做memcpy请求,memcpy请求通过libaio接口传递,使用libaio通知机制。

这是代码:

排队工作并返回EIOCBQUEUED

工作队列工作函数:

在我的工作功能中,我打印了 aio 完成功能的添加,然后发生内核 oops。

这是否意味着iocb初始化错误?我的用户进程通过io_submit提交IO,这里的aio完成函数指向aio_complete_rw.

0 投票
1 回答
110 浏览

c - “CPU 死机”(与硬件无关)是什么意思?

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

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

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

0 投票
1 回答
45 浏览

linux - 安排延迟工作时系统阻塞

我正在做一个学术项目,我必须了解 linux 工作队列的用法。出于这个原因,我开发了一个小模块,它可以在 1000 次 jiffies 之后简单地安排在自定义工作队列上执行工作。但是,当超时到期时,系统被阻止,我需要重新启动 VM,并且我无法收集任何信息进行调试。

这些是我正在使用的代码部分:

如果我很快(在计时器到期之前)在 shell 上请求“dmesg”,我可以阅读“第 1 步”打印但我无法使用系统。我知道代码中可能存在初学者错误,但我无法对其进行个体化。谢谢大家的帮助。

0 投票
1 回答
133 浏览

c - 如何立即将 linux workqueue worker 的 printk 打印到 dmesg 中?

我有一个关于 linux 工作队列的问题。我找到了使用工作队列的示例内核模块并对其进行了测试。这是代码。

这就是结果。左边显示我输入的内容,右边显示 dmesg。我不知道为什么 work2 的 printk 没有出现。

work.x 2 不显示

在我重新插入我的模块后,它就会出现。

诡异的

如何从排队的工作中获取 printk 消息?

0 投票
0 回答
200 浏览

linux-kernel - 进程 blk_mq_run_work_fn 期间工作队列挂起

工作队列挂在我的板子上(ARM-Linux)。一开始板子可以用ssh连接。然后,连接正常,但无法进入提示符。我用sysrq捕获了一些信息,sysrq info(partial)像这样:

如上图,pool 1 挂了 5.9 小时(21394s),可能是 blk_mq_run_work_fn(最有可能)或者mmc_blk_mq_complete_work 。而且很多线程或进程是 D 状态,如图:

谁能告诉我为什么会发生这种情况,以及如何处理这个问题?谢谢

0 投票
0 回答
35 浏览

c - 在 linux 内核中使用有界工作队列时,您可以限制工作队列工作人员在某些内核上运行吗?

我致力于监控流程的控制流完整性机制。我一直在尝试将内核工作队列工作人员限制在某些内核上,同时在隔离内核上运行受监控的程序(使用任务集和 isolcpus 固定)。但是我只能使用无界工作队列来做到这一点,但我想通过使用有界工作队列来保持工作人员的位置,同时确保没有工作人员在隔离核心上运行。使用有界工作队列时,我找不到指定 cpu 掩码的方法。目前,当我使用有界工作队列时,当我尝试将受监控的进程固定到隔离核心时,只有属于隔离核心工作池的工作人员处于活动状态。(我在 top 命令上监控了工作人员正在运行的核心)。

在 linux 内核中使用有界工作队列时,有没有办法可以限制工作队列工作人员在某些内核上运行?