在Linux中,有没有一种方法可以在用户空间/内核空间中获取锁定页面(虚拟内存页面)的信息。
我想知道以下细节: 谁锁定了这些页面? 有多少页面被锁定了? 锁定页面的进程名称是什么?
另外,请告诉我内核空间和用户空间的内存调试技术。
在Linux中,有没有一种方法可以在用户空间/内核空间中获取锁定页面(虚拟内存页面)的信息。
我想知道以下细节: 谁锁定了这些页面? 有多少页面被锁定了? 锁定页面的进程名称是什么?
另外,请告诉我内核空间和用户空间的内存调试技术。
mlock
、mlockall()
等API锁定虚拟内存页面时,会将VM_LOCKED
标志分配给页面。cat /sys/kernel/debug/page_owner >> page_owner.txt
来查看锁定的页面详细信息。
若要启用调试,请执行以下操作:kernel menuconfig PAGE_OWNER=y
,将"page_owner=on"
添加到引导cmdline中,
然后执行cat /sys/kernel/debug/page_owner >> page_owner.txt
。/tool/vm/page-types.c
,然后编译它并迭代所有/proc/
中的pid条目,
并为应用程序使用以下选项:./test -p $PID -L >> test_output.txt
。它将提供所有页面详细信息和标志,
然后您可以找到内存中已锁定的页面。