微软不仅继续为 Linux 内核做出重大贡献,而且还进一步充实了 Linux 内核对 Rust 编程语言支持的设计。微软、Rust 编程语言和 Linux 内核的结合是以前难以想象的。
微软工程师韦德森-阿尔梅达-菲略(Wedson Almeida Filho)发布了最新的补丁,致力于为Rust Linux内核代码分配API,并利用这些提议的API为Rust内核模块提供就地模块初始化的手段。Wedson Almeida Filho 是 Rust for Linux 的长期贡献者,最早可以追溯到他在谷歌工作的时候。
Rust Allocation API 的第二次迭代是针对 Linux 内核的:
我们目前有一个对 `Vec` 进行了修改的 crate 分支;其他修改已被上传到上游(Rust 项目)。本系列将移除分叉,并以扩展特质的形式公开所有功能。
此外,它还为所有可能导致分配的函数(例如,`Box::new`, `Arc::new`,`Vec::push`等)引入了不带`try_`前缀的分配标志参数–名称可用是因为我们在构建`alloc`时使用了`no_global_oom_handling`。
最后,该系列还消除了我们对 `allocator_api` 不稳定特性的依赖。
从长远来看,我们仍希望在上游 Rust 中提供此类功能,但这让我们现在就能取得进展,并减轻了维护负担。
总结如下
1.移除 `alloc` fork
2.移除对 `allocator_api` 不稳定特性的使用
3.在分配时引入标志(如 GFP_KERNEL、GFP_ATOMIC)。
在内核中为 Rust 分配 API 的基础上,微软工程师今天还为 Rust 内核模块的就地模块初始化发送了补丁。提出的补丁允许对模块进行就地初始化,而不是让模块返回一个被移动到最终内存位置的实例:
“这样我们就可以让模块的状态包含必须就地初始化的对象(如锁)。它还允许我们就地实现注册(如驱动程序注册),并使其类似于 C 语言的对应程序,无需进行新的分配”。
Rust for Linux 内核的工作仍然是一项非常有活力的工作,有各种各样的组织做出了贡献,甚至包括微软的工程师。
转自 Microsoft Engineer Sends Rust Linux Kernel Patches For In-Place Module Initialization – Phoronix