Linux 6.9对工作队列进行了大量的重大更改&

2024年 3月 24日 34.5k 0


工作队列通常在Linux内核中用于异步进程执行上下文。在Linux 6.9中,工作队列(WQ)代码经历了“重大和侵入性”的更改。

Tejun Heo在开始时提交了所有工作队列更改Linux 6.9 合并窗口,他描述为:

在这个周期中,工作队列发生了很多变化,包括一些重要的和侵入性的变化。

- 在v6.6周期中,未绑定的工作队列被更新,以便它们更了解拓扑结构和灵活性,这尤其改善了现代多L3 CPU上的工作队列行为。在此过程中,636b927eba5b(“workqueue:Make unbinded workqueues to use per—CPU pool_workqueues”)将未绑定的工作队列切换为使用per—CPU前端pool_workqueues作为增加前后映射灵活性的一部分。

这个变化的一个不受欢迎的副作用是,这使得每个CPU的最大并发执行导致了允许的最大并发执行数。我错误地假设这不会导致实际问题,因为大多数未绑定的工作队列用户都是自我调节的最大并发;然而,肯定有一些用户没有(例如在IO路径上),并且允许的最大并发的急剧增加导致了一些用例中明显的性能回归。

现在,通过将max concurrency强制分离到一个单独的结构—wq_node_nr_active—来解决这个问题,这使得@ max_active始终表示系统范围内的max concurrency,而不管CPU或(最终)NUMA节点的数量如何。这是一个相当侵入性的,在某些地方,有点笨拙;然而,笨拙是由于处理一些现代机器上执行局部域和最大并发执行域之间的分歧的内在要求而产生的。有关更多详细信息,请参见5797b1c18919("workqueue:Implement system—wide nr_active enforcement for un绑定的workqueues")。

- 添加BH工作队列支持。它们类似于每CPU的工作队列,但在softirq上下文中执行工作项。这将取代tasklet。然而,目前,它缺少禁用和启用工作项的功能,这是转换许多tasklet用户所需要的。为了避免这个合并窗口过于拥挤,这将包含在下一个合并窗口中。一个单独的拉取请求将被发送到目前未决的夫妇转换补丁。

- Waiman填补了工作队列CPU隔离中一个长期存在的漏洞,即有序工作队列没有遵循wq_unefind_cpumask更新。有序工作队列现在遵循与其他未绑定工作队列相同的规则。

-更多的CPU隔离改进:Juri修复了工作队列隔离中的另一个缺陷,即未绑定的救援者不尊重wq_unbinded_cumask.莱昂纳多修复了在独立CPU上触发的延迟工作计时器。

- 其他杂项变更。

工作队列中的更多详细信息 pull request.

Hopefully any fallout will be minimal and in the better part of two weeks since the code was merged, Linux 6.9 Git seems to be sailing well so far. The Linux 6.9 merge window will close tomorrow with the Linux 6.9-rc1 release.

相关文章

塑造我成为 CTO 之路的“秘诀”
“人工智能教母”的公司估值达 10 亿美金
教授吐槽:985 高校成高级蓝翔!研究生基本废了,只为房子、票子……
Windows 蓝屏中断提醒开发者:Rust 比 C/C++ 更好
Claude 3.5 Sonnet 在伽利略幻觉指数中名列前茅
上海新增 11 款已完成登记生成式 AI 服务

发布评论