Linux内核的Rust代码更新,实现了更多的功能
Miguel Ojeda发布了最新的补丁系列,实现了Linux内核的Rust编程语言基础架构和初始样本代码。
今天发布了Rust支持的v8版本,最初的43.6k行代码增加了可在Linux内核内使用Rust编程语言的支持。
早在6月的开源峰会上,Linus Torvalds评论说,用于内核的Rust可以合并到Linux 5.20--现在被称为Linux 6.0。是否最终合并还有待观察,尤其是今天发布的v8补丁系列有许多新的补充内容,需要更多的时间来审查...... 因此,如果不是下周Linux 6.0的最后一分钟合并,Rust内核代码可能仍然需要更多的时间来准备。在任何情况下,它似乎正在一步步接近合并的目标。
随着Linux内核的Rust v8系列补丁的推出,有很多代码在不断的更新,更多的内核功能现在可以通过Rust代码来实现。这些最新的补丁中的一些Rust亮点包括:
升级了Rust 工具链到1.62
将Rust的Linux内核绑定转移到他们自己的
crate
(命名为 "bindings"),以改善只有kernel
crate改变时的构建时间。改进了rust-analyzer的运行速度。
通过 "fs "模块增加了对文件系统的支持,包括各种新类型、文件系统参数支持、文件系统标志以及Rust中的文件系统示例代码。
Workqueues
支持也是Rust v8 Linux补丁中的新内容。Rust v8补丁中扩展了异步支持,现在在有执行器支持、基于工作队列(workqueues)的执行器、产生执行当前任务的
yield_now()
,并增加了一个异步TCP echo 服务器示例。Rust支持对中断的处理。
最初的RCU支持。
对延迟/睡眠(delays/sleeps)的初步支持。
至于目前的状态,v8补丁系列仍然带有这样的信息: "Rust支持仍然被认为是实验性的。然而,支持已经足够好了,内核开发者可以开始研究子系统的Rust抽象,并编写驱动和其他模块。"
对于那些对Linux内核的Rust感兴趣的人来说,更多的细节可以在内核邮件列表中看到v8补丁。
新闻: https://www.phoronix.com/news/Rust-v8-For-Linux-Kernel
邮件: https://lore.kernel.org/lkml/20220802015052.10452-1-ojeda@kernel.org/
一篇异步Rust性能调优的文章,写的很详细,包括代码调优的背景等。
博客: https://www.p99conf.io/2022/08/02/async-rust-in-practice-performance-pitfalls-profiling/
cargo-pgo
:Cargo
子命令,用于简化PGO和BOLT优化二进制文件流程嗨!在过去的几个月里,我一直在使用PGO和BOLT对Rust编译器进行优化,在此过程中,我意识到使用这些工具来优化一般的Rust代码可能有点麻烦。
这就是为什么我决定创建一个Cargo子命令,使其更容易使用PGO和BOLT(BOLT支持目前还略带实验性,主要是因为你必须自己用BOLT构建LLVM,而它并不总是完美无缺地工作)。
作为快速科普,PGO(配置文件引导的优化)和BOLT是提高二进制文件性能的技术。你以一种特殊的方式(使用instrumentation)编译你的二进制文件,然后你在一些工作负载上执行这个修改过的二进制文件,这就产生了配置文件,然后你使用这些收集的配置文件再次编译你的二进制文件。这将有望产生一个更快、更优化的二进制文件(通常效果可以达到1-20%的改善)。
cargo-pgo
子命令将负责使用正确的编译标志和设置,为你的构建启用PGO,它将指导你完成使用这些所谓的 "反馈导向的优化 "的工作流程。下面是一个简易的例子:cargo pgo build # build with instrumentation./target/.../
# run your binary on some workloadcargo pgo optimize # build an optimized binary 该命令允许你使用PGO、BOLT以及BOLT+PGO组合。你可以用典型的方式安装该工具:
cargo install cargo-pgo
你可以在这里找到这个工具。我很高兴得到任何反馈。
Github: https://github.com/Kobzol/cargo-pgo
hot-lib-reloader允许在运行中改变Rust代码,而无需重新启动。它适用于Linux、macOS(Intel)和Windows。关于为什么,它是如何工作的,以及如何使用它(以及这种方法的局限性),请阅读下面的帖子。
文末提供了一个bevy的热重载示例。
热重载Rust: https://robert.kra.hn/posts/hot-reloading-rust/
这是关于零拷贝反序列化的有趣抽象的三部曲的第一部分,我在过去一年里一直在研究。这一部分是关于使零拷贝反序列化工作得更愉快。第二部分是关于让它适用于更多的类型;而第三部分是关于完全消除反序列化的步骤。这些文章可以按任何顺序阅读,第一篇文章里包含了对什么是零拷贝反序列化的解释。
#1: https://manishearth.github.io/blog/2022/08/03/zero-copy-1-not-a-yoking-matter/
#2: https://manishearth.github.io/blog/2022/08/03/zero-copy-2-zero-copy-all-the-things/
#3: https://manishearth.github.io/blog/2022/08/03/zero-copy-3-so-zero-its-dot-dot-dot-negative/
新一期的 Rust 周报速递发布,快来看看有哪些内容你曾经关注过 :)
This Week in Rust 454: https://this-week-in-rust.org/blog/2022/08/03/this-week-in-rust-454/
From 日报小组 Cupnfish 祝大家七夕快乐🎉
社区学习交流平台订阅:
Rust.cc 论坛: 支持 rss
微信公众号:Rust 语言中文社区