【Rust 日报】2022-08-04 异步Rust的实践:性能、隐患、分析​

2022-11-28 11:44:05 浏览数 (1)

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的实践:性能、隐患、分析

一篇异步Rust性能调优的文章,写的很详细,包括代码调优的背景等。

博客: https://www.p99conf.io/2022/08/02/async-rust-in-practice-performance-pitfalls-profiling/

cargo-pgoCargo子命令,用于简化PGO和BOLT优化二进制文件流程

嗨!在过去的几个月里,我一直在使用PGO和BOLT对Rust编译器进行优化,在此过程中,我意识到使用这些工具来优化一般的Rust代码可能有点麻烦。

这就是为什么我决定创建一个Cargo子命令,使其更容易使用PGO和BOLT(BOLT支持目前还略带实验性,主要是因为你必须自己用BOLT构建LLVM,而它并不总是完美无缺地工作)。

作为快速科普,PGO(配置文件引导的优化)和BOLT是提高二进制文件性能的技术。你以一种特殊的方式(使用instrumentation)编译你的二进制文件,然后你在一些工作负载上执行这个修改过的二进制文件,这就产生了配置文件,然后你使用这些收集的配置文件再次编译你的二进制文件。这将有望产生一个更快、更优化的二进制文件(通常效果可以达到1-20%的改善)。

cargo-pgo子命令将负责使用正确的编译标志和设置,为你的构建启用PGO,它将指导你完成使用这些所谓的 "反馈导向的优化 "的工作流程。下面是一个简易的例子:

代码语言:javascript复制
cargo pgo build        # build with instrumentation./target/.../<binary>  # run your binary on some workloadcargo pgo optimize     # build an optimized binary

该命令允许你使用PGO、BOLT以及BOLT PGO组合。你可以用典型的方式安装该工具:

代码语言:javascript复制
cargo install cargo-pgo

你可以在这里找到这个工具。我很高兴得到任何反馈。

Github: https://github.com/Kobzol/cargo-pgo

热重载Rust--为了获得乐趣和更快的反馈周期

hot-lib-reloader允许在运行中改变Rust代码,而无需重新启动。它适用于Linux、macOS(Intel)和Windows。关于为什么,它是如何工作的,以及如何使用它(以及这种方法的局限性),请阅读下面的帖子。

文末提供了一个bevy的热重载示例。

热重载Rust: https://robert.kra.hn/posts/hot-reloading-rust/

Zero-Copy 系列博客

这是关于零拷贝反序列化的有趣抽象的三部曲的第一部分,我在过去一年里一直在研究。这一部分是关于使零拷贝反序列化工作得更愉快。第二部分是关于让它适用于更多的类型;而第三部分是关于完全消除反序列化的步骤。这些文章可以按任何顺序阅读,第一篇文章里包含了对什么是零拷贝反序列化的解释。

#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/

This Week in Rust 454

新一期的 Rust 周报速递发布,快来看看有哪些内容你曾经关注过 :)

This Week in Rust 454: https://this-week-in-rust.org/blog/2022/08/03/this-week-in-rust-454/

From 日报小组 Cupnfish 祝大家七夕快乐

0 人点赞