在 mmap 中缓存

mya*_*hya 2 c++ caching mmap

我正在使用 mmap 调用在 C++ 中使用简单的指针算法从一个非常大的文件中读取。问题是,当我多次读取小块数据(以 KB 为单位)时,每次读取所用的时间与前一次读取的时间相同。我如何知道是否正在访问磁盘来满足我的请求,或者在第一个调用之后的调用中是否正在从主内存(页面缓存)中满足请求。

mya*_*hya 5

问题如下:两个读取都是从缓存中执行的。我猜在请求数据之前,打开或映射文件时会开始缓存。为了验证这一点,我发布了:

echo 3 > /proc/sys/vm/drop_caches

这会刷新缓存,然后,如果我运行两次迭代来获取相同的数据,则第一次运行(在我的情况下)比第二次运行慢 10 倍。