如何解决为什么mmap仍会增加磁盘读取?
对于Ubuntu 20.04,我使用mmap映射磁盘文件(大约4G)。
该文件每天都在变化,因此我必须每天映射另一个文件。
而且我发现有时候(并非总是如此),尽管mmap完成了,但磁盘读取却迅速增加。
为什么mmap不能将所有文件都加载到内存中?
解决方法
为了理解问题,首先需要了解如果致电mmap()
会发生什么。
mmap()
可用于将虚拟内存映射到物理内存,也可以将文件映射到自己的虚拟内存。函数堆栈就像ksys_mmap_pgoff()->vm_mmap_pgoff()->do_mmap_pgoff()->do_mmap()
。此后,我们将构建用户空间内存映射,但是它只在虚拟内存中应用了一个新区域,我们还没有触及物理内存。当进程计划为此进程进行调度并且我们要寻址该物理内存时,它会触发页面错误中断并调用do_page_fault()->find_vma()->handle_mm_fault()
与物理内存进行真正的联系,对于不同的文件系统,我们将使用诸如{{1 }}。
现在让我们回到问题所在。ext3_filemap_fault()
将导致磁盘读取,但是我们不确定何时会发生。这取决于您何时使用它以及何时为该进程安排CPU。
此外,如果您使用mmap()
或其他工具,则会发现Linux操作系统具有名为free
和Buffer
的设计。
Cache
此机制将有助于加快I / O读/写速度,并且当您使用buffers Memory used by kernel buffers (Buffers in /proc/meminfo)
cache Memory used by the page cache and slabs (Cached and SReclaimable in /proc/meminfo)
时,也可能导致磁盘读取增加。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。