提问人:Juergen 提问时间:2/24/2023 最后编辑:Juergen 更新时间:2/25/2023 访问量:67
在内存映射或读取文件之间动态决策
Dynamically deciding between memory mapping or reading a file
问:
文件的内存映射可保存数据副本,因此对于大文件速度更快。
读取文件可以节省对 MMU 的操作,因此对于小文件来说速度更快。
读取大量文件时,为每个文件选择最佳方法可能会有所不同。
我是否需要对文件大小限制进行硬编码才能做出此决定,或者是否存在
一种“最佳实践”(启发式)算法,用于从以下位置推断决策文件大小
在英特尔的 Linux 上运行时运行时的一些系统变量?
有问题的文件将被线性读取(无随机访问),并且大小非常不同。
编辑:我不愿意实现一些基准算法,因为 和 之间的差异很小,即使有大量文件需要处理,也不能证明这样的开销是合理的。mmap
read
第二次编辑:这是一个关于良好编码习惯的一般问题,与某些特定机器上的某些特定文件集无关。
想象一下,我想提高性能(实际上并非如此):
如何有效地实现对许多以前未知文件的线性读取?grep
答:
1赞
Synopsis
2/24/2023
#1
您正在请求一种学习算法,需要具有一些起始值,例如基于硬编码的大小,然后测量例如读取固定数据堆所需的时间。
系统无法提供这样的信息,因为它无法猜测您的代码在打开文件之前将要做什么。它无法知道,你只是按顺序阅读。
您必须编写一些测量算法,并将结果反馈给您决定的 mem 映射或打开某些文件。结果可以以某种方式持久化,而不必每次都从头开始,但这些原因的测量取决于机器。
评论
0赞
Juergen
2/24/2023
我不愿意实施基准测试,因为 和 之间的差异很小,即使有大量文件需要处理,也不能证明这样的开销是合理的。我想要的要么是硬限制(可能是 128 kB),要么是一些简单的算法,例如“如果文件大于系统可用内存的 1%,请使用 mmap”或“如果文件大于页面大小乘以 CPU 数量,则使用 mmap”或其他任何内容。mmap
read
评论