reading/writing 磁盘上的文件时如何限制硬盘磁盘 I/O?

How to limit Hard Drive Disk I/O when reading/writing a file on disk?

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

更准确地说,我目前正在使用缓冲区大小为 64 KB 的 BufReader 和 BufWriter,这对于尽快 read/write 文件来说非常棒。但是以 250MB/s 的速度读取并同时以 250MB/s 的速度写入有可能溢出 HDD 可以管理的内容。可以说我完全是为了速度之类的,但我意识到那些 Rust 程序正在从 HDD 请求太多资源并且似乎被操作系统 (Windows) 拖延以让其他进程工作安详地。我reading/writing的文件一般都是几千兆字节

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

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

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

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

但是,你还是可以监控磁盘activity,加上前面猜到的数字,你可以用wait()更准确,而不是一直限制自己在一个恒定的速度。 (这里是 Rust 的箱子:https://github.com/myfreeweb/systemstat)。

使用 OS 确定进程的优先级可能有点矫枉过正,因为我正试图在其他进程之间切换并共享当时可用的任何资源。