【发布时间】:2010-11-24 02:35:51
【问题描述】:
Linux /proc/meminfo“映射”主题是什么意思?我见过几个单行字,告诉我它是“设备或库使用 mmap 映射的内存总大小(以千字节为单位)”。但是我现在花了将近 20 个小时搜索 2.6.30.5 内核源代码,试图确认这一说法,但我一直无法这样做——确实我看到了一些似乎与它相冲突的东西。
“映射”计数保存在 global_page_state[NR_FILE_MAPPED] 中。 NR_FILE_MAPPED 声明附近的评论说:“页面缓存页面映射到页表。仅从进程上下文修改。”
meminfo 的“缓存”主题引用的所有页面不是都有文件支持吗?这不是意味着所有这些页面都必须“映射”吗?我查看了几十个 meminfo 列表,来自几种不同的架构,“映射”值总是比“缓存”值小得多。
-
在任何给定时间,大部分内存都充满了可执行映像和共享库。查看 /proc/pid/smaps,我看到所有这些都映射到 VMA。所有这些是否都使用 mmap() 映射到内存中?如果是这样,为什么“映射”这么小?如果它们没有使用 mmap() 映射到内存中,它们是如何映射的?调用
李>handle_mm_fault(由get_user_pages和各种依赖于体系结构的页面错误处理程序调用)增加“映射”计数,并且它们似乎对与VMA 关联的任何页面都这样做。 我查看了一堆驱动程序的 mmap() 函数。其中许多调用
vm_insert_page或remap_vmalloc_range来建立它们的映射,并且这些函数确实增加了“映射”计数。但是许多其他驱动程序似乎调用remap_pfn_range,据我所知,这并没有增加“映射”计数。
【问题讨论】: