在磁盘上读/写文件时如何限制硬盘 I/O?

桑杜利

我有一些 Rust 程序可以从文件中读取数据,执行一些操作,并将数据写入另一个文件。很简单,但是我遇到了一个大问题,因为我的程序使 HDD 最大 I/O 饱和,并且只能在没有其他进程正在使用时执行。

更准确地说,我目前正在使用缓冲区大小为 64 KB 的 BufReader 和 BufWriter,这本身就非常适合尽快读/写文件。但是以 250MB/s 的速度读取和以 250MB/s 的速度同时写入有可能溢出 HDD 可以管理的内容。可以说我完全是为了速度和诸如此类的东西,但是我意识到那些 Rust 程序从 HDD 中请求了太多资源,并且似乎被操作系统 (Windows) 拖延以让其他进程安静地工作。我正在读/写的文件通常有几 GB

现在我知道我可以在磁盘上的每个读/写操作之间添加某种形式的 wait() 但是,我不知道如何找出我当前正在读/写的速度并且正在寻找更优化的解决方案。另外,即使在阅读了文档之后,我仍然无法在 BufReader/BufWriter 上找到可以将 HDD I/O 操作限制为某个任意值(例如 100MB/s)的选项。

我查看了 sysinfo crate,但它似乎无助于找出 HDD 的当前和最大 I/O。

我是不是运气不好,是否应该深入研究系统编程以找到解决方案?或者是否已经有一些东西可以教我如何优先考虑我对 HDD 的调用,或者只是将我的调用限制为根据 HDD 当前可用的 I/O 速率计算的某个任意值?

桑杜利

在阅读了更多关于该主题的内容后,除了尝试读取/写入大量数据并根据其性能进行计算外,您似乎无法在程序执行过程中找出硬盘最大 I/O 速率,只能猜测 HDD I/O 速率不能更高的常数。(参见https://superuser.com/questions/795483/how-to-limit-hdd-write-speed-for-chosen-programs/795488#795488

但是,您仍然可以监控磁盘活动,并且根据之前猜测的数字,您可以wait()比总是以恒定速度限制自己更准确地使用(这是 Rust 的一个箱子:https : //github.com/myfreeweb/systemstat)。

优先考虑操作系统的进程可能有点矫枉过正,因为我试图在其他进程之间切换并共享当时可用的任何资源。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章