我有一些Rust程序,它们可以从文件读取数据,执行一些操作,然后将数据写入另一个文件。 很简单,但是我遇到了一个大问题,因为我的程序使HDD max I / O饱和,并且只能在不使用其他进程的情况下执行。
更准确地说,我目前正在使用缓冲区大小为64 KB的BufReader和BufWriter,这本身就非常适合于尽快读取/写入文件。但是以250MB / s的读取速度和同时以250MB / s的速度写入数据往往会溢出HDD可以管理的内容。可以说我全都追求速度而已,但我意识到那些Rust程序正在从HDD上请求过多的资源,并且似乎被操作系统(Windows)所阻滞,无法让其他进程和平地工作。我正在读取/写入的文件通常只有几GB
现在,我知道我可以在磁盘上的每个读/写操作之间添加某种形式的wait(),但是,我不知道如何确定我当前正在以何种速度进行读/写并正在寻找更好的解决方案。另外,即使在阅读了文档之后,我仍然在BufReader / BufWriter上找不到一个可以将HDD I / O操作限制为某个任意值(例如100MB / s)的选项。
我仔细查看了sysinfo板条箱,但这似乎无助于找出HDD的当前和最大I / O。
我不是很幸运,我是否应该更深入地研究系统编程以找到解决方案?还是已经有一些东西可以教我如何优先处理对HDD的调用,或者将我的调用限制为根据HDD当前可用的I / O速率计算出的任意值?
答案 0 :(得分:0)
在阅读了有关该主题的更多内容之后,除了尝试读取/写入大量数据并从其性能进行计算之外,似乎您无法在程序执行期间找出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)。
使用OS优先处理该流程可能会显得过分,因为我试图在其他流程之间滑动并共享当时可用的任何资源。