man*_*m-n 11 c scheduling interrupt linux-device-driver linux-kernel
我是Linux设备驱动程序新手,想知道tasklet和之间的确切区别workqueue.此外,我也有以下疑虑:
- 在中断/进程上下文中运行时,哪个内核堆栈会执行中断,tasklet和workqueue?
- tasklet和workqueue的优先级是什么,我们可以修改它的优先级吗?
- 如果我实现自己的工作队列列表,我可以独立安排/优先排序吗?
eep*_*epp 13
Tasklets:
工作队列:
底线是:将tasklet用于高优先级,低延迟的原子任务,这些任务必须仍然在硬IRQ上下文之外执行.
您可以使用tasklet_hi_enable/ tasklet_hi_schedule(而不是各自的无_hi版本)使用tasklet控制某种级别的优先级.从这个IBM页面:
正常优先级调度通过TASKLET_SOFTIRQ级softirq执行,其中高优先级通过HI_SOFTIRQ级softirq.
...
首先处理来自高优先级向量的Tasklet,然后是法向量上的那些.请注意,每个CPU都保持自己的普通和高优先级softirq向量.
对于工作队列,在创建工作队列时,您将使用alloc_workqueue(create_workqueue不推荐使用)并且可以传递一个标志以请求更高的优先级:
WQ_HIGHPRI:
highpri wq的工作项排队到目标gcwq的highpri线程池.Highpri线程池由工作线程提供,具有提升的良好级别.
请注意,普通和高级线程池不会相互交互.每个人都维护着独立的工作池,并在其工作者之间实现并发管理.
我无法回答你所有的问题,但我希望无论如何这都有帮助.
| 归档时间: |
|
| 查看次数: |
9765 次 |
| 最近记录: |