更多信息

更多信息

我注意到如果我这样做cat /proc/meminfo

我得到以下内容


HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
DirectMap4k:      662864 kB
DirectMap2M:     7643136 kB
DirectMap1G:     1048576 kB

可以看出已经分配了1G字节的页面。然而,当我查看 ksysguard 时,我发现没有内存超过 125M / 213M(rss) 的进程。

我怎样才能知道哪个进程正在使用它?


更多信息

#> cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

答案1

这些DirectMap条目不反映记忆使用,它们反映物理内存的页面映射或页面条目。DirectMap1G计算使用 PUD 级页表映射映射的内存量。

映射是在引导期间设置的;看arch/x86/mm/init_64.c并寻找phys_pud_initphys_p4d_init/proc/meminfo各个条目中显示的值的总和DirectMap应类似于系统中物理 RAM 的总量,并且总量永远不会变化,尽管份额会变化(例如,PUD 级映射可以拆分为 PMD) -级别映射,这将减少 中显示的值DirectMap1G并增加 ) 中显示的值DirectMap2M

答案2

我认为这并不能完全回答问题,但它部分地回答了问题。

在调查时我不小心重新启动了。重新启动后我发现DirectMap1G不是 5G 字节。在意识到我没有对持久配置做任何事情之后。我注意到三个页面大小的总和大约相当于我的 RAM 8GB 的​​大小。我正确地添加了它,它是 8G9 (8.9G) [可能是其他内存映射的东西:vRAM 和其他硬件,MMU 不仅适用于 RAM]。然后我开始了一个大过程,再次测量,总数仍然是8G9左右(移动了一点)。我打开另一个进程,测量,打开另一个......它总是加起来为8G9。

答案3

DirectMap是一个指标,与内核空间相关。您似乎认为它就像大页面一样,可以由用户空间使用。

我引用:

DirectMap 是特定于 x86 的,并给出 TLB 负载(转换后备缓冲区)的指示,而不是内存使用情况:它计算映射为 4KB 页面、2MB/4MB 页面和 1GB 页面(如果支持和使用)的页面数。

硬件损坏的含义,/proc/mem 中的 directmap 字段

相关内容