今天经过一些理论讨论后,我决定做一些研究,但我没有找到任何结论。
问题是:我们编写了一个工具,可以从几 TB 的数据集中读取大约 10Gb 的图像文件。我们希望通过最小化 I/O 开销来加快执行时间。这个想法是“预热”磁盘缓存,因为我们事先知道我们将在工具执行时读取哪个目录。是否有任何 API 或方法可以向 Windows 提供此提示,以便它可以开始预热磁盘缓存,加快未来的磁盘访问速度,因为文件已经在 RAM 中(其中在我们运行该工具的机器上有很多) )?
我知道 Windows 会预读单个文件,但是如果我有一个包含数千个文件的目录怎么办?
我还没有找到任何直接的 win32 API 或命令行工具来直接执行此操作。
如果我启动一个低优先级的后台线程,打开所有文件来读取和关闭它们会怎样?我当然可以内存映射所有文件并将它们固定在 RAM 中,但这可能会导致 I/O 的主工作线程饿死。
这里的一般想法是该工具“突发”I/O 请求,因为每个线程将依次进行 I/O 和 CPU 处理,因此我们可以使用“空闲”I/O 时间将剩余的文件预加载到 RAM 中。
(我当然可以进行基准测试,我会,但我想更多地了解它是如何工作的,以便更科学和更少的货物崇拜)。
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |