Rust 编写的 Redox 操作系统发布了一份新的月度状态报告,概述了该开源操作系统在二月份的改进情况。
最令人兴奋的是,通过实现记录支持,RedoxFS 的 I/O 性能有了大幅提升。状态报告介绍了 RedoxFS 的 I/O 性能工作:
为了将 RedoxFS 读/写操作的大小与磁盘块大小分开,引入了 “记录 “的概念,记录大小是磁盘块大小的 2 倍。
对于大文件,我们选择了 128KiB 的记录大小,因为这样可以在顺序访问和随机访问速度之间取得良好的平衡。
举例来说,首次运行大型程序的命令启动时间比以前快了约 3 倍。
4lDO2 发现了一个相关的优化机会。
在 Rust 标准库中,大多数内置读写 API(包括 std::io::copy)的默认缓冲区大小为 8KiB。
如果使用 8 KiB 缓冲区大小复制一个 30 MiB 的文件,整个过程将需要 3840 次方案调用往返才能完成。如果有其他进程在调度程序中争夺 CPU 时间,这可能需要很长时间。这是因为 Redox 还不支持直接上下文切换,而且 dd 也不使用并行或分批 I/O。
Redox 还没有对 std::fs::copy 进行专门化,而 uutils 的 cp 程序会直接使用它。Linux 和 MacOSX 有一种优化方法(fclonefileat/clone_file_range),允许更大的缓冲区大小,可以更积极地进行优化。
我们计划在不久的将来在 relibc 中实现这一功能。
记录大小优化是性能改进的一个低垂果实。我们还有许多其他改进计划,并将尽最大努力为您提供最新信息。
二月份的 RedoxFS 还对网络驱动程序和内核进行了代码清理,Relibc 继续取得更多成果,Boxedwine 被移植为运行 16/32 位 Windows 程序的旧版 Wine 下游(支持 Wine 1.8 至 Wine 5.0),还提供了使用 QEMU NVMe 接口的选项,以及其他改进。
有关 RedoxOS Rust 操作系统最新动态的更多详情,请访问 Redox-OS.org。
转自 Redox OS Scores A Massive Performance Boost For I/O – Phoronix