/proc/<pid>/status 中的 VmLck(锁定内存)与 VmPin(固定内存)

VmLck (locked memory) vs VmPin (pinned memory) in /proc/<pid>/status

根据手册页:

* VmLck: Locked memory size (see mlock(3)).

* VmPin: Pinned memory size (since Linux 3.2).
  These are pages that can't be moved because something needs
  to directly access physical memory.

我知道什么是锁定内存(mlock、mlockall),但老实说我不明白固定内存的概念以及它与锁定内存的区别。

有人可以举例说明吗?

经过一些研究,我现在可以回答我自己的问题,希望它能帮助未来的访问者。

锁定的内存永远不会从主内存中换出。这意味着锁定在物理内存中的页面保证始终存在于 RAM 中。但是,不能保证页面错误永远不会发生,因为内核仍然可以在物理内存中自由移动页面。

固定内存是固定在特定页框位置的锁定内存。这意味着固定页面既不能从主内存中换出,也不能在物理 RAM 中移动,因此可以保证页面错误永远不会发生。这是硬实时应用程序的理想要求。

阅读更多:https://lwn.net/Articles/600502/