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

标签 windows io rust hard-drive

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

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

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

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

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

最佳答案

在阅读了更多有关该主题的内容之后,除了尝试读取/写入大量数据并从其性能中计算之外,似乎在程序执行期间无法找出 HDD 最大 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)。

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

关于windows - 在磁盘上读取/写入文件时如何限制硬盘磁盘 I/O?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57012729/

相关文章:

android - Root Android - 在 root 拥有的目录中创建和读取文件

c - 在 C 中读取文件的最快方法

rust - 如何在不复制矢量的情况下将 Vec<T> 转换为 Vec<U>?

rust - 我可以在代码中导入 libsyntax 吗?

c# - 如何解决已停止的 Windows 服务 'clr.dll 错误?

c++ - 无法将参数 5 从 'SIZE_T *' 转换为 'size_t *'——为什么?

wpf - .NET GUI 中仍在使用 native Windows 控件吗?

java - 使用 Jsch 将带有目录的文件传输到 SFTP 服务器

python - 在编辑之前使用 python 脚本将 Windows 注册表备份到文件

closures - 在结构中存储闭包——无法推断出合适的生命周期