【问题标题】:Are mlock()-ed pages static, or can they be moved in physical RAM?mlock()-ed 页面是静态的,还是可以在物理 RAM 中移动?
【发布时间】:2013-02-22 21:37:45
【问题描述】:

根据mlock() 手册页:

包含指定地址范围一部分的所有页面都是 调用成功返回时保证常驻RAM; 这些页面保证在以后解锁之前一直保留在 RAM 中。

这是否也保证这些页面的物理地址在其整个生命周期内保持不变,或者直到解锁?

如果不是(也就是说,如果它可以被内存管理器移动 - 但仍保留在 RAM 中),关于新位置或发生此类更改的事件有什么可以说的吗?

更新:

关于 RAM 中锁定页面的一致性有什么说法吗?如果 CPU 有缓存,那么 mlock-ing 是否保证 RAM 与缓存的一致性(假设回写缓存)?

【问题讨论】:

  • 我找不到明确的保证,但我也很难想到将mlock()ed 页面移动到物理内存中的场景(同时显然保留其虚拟地址)。好问题(+1)
  • 您是否介意提供一些上下文,即在问题的答案很重要时,您的代码做什么或需要做什么。
  • NPE,我试图确定将指向锁定缓冲区的指针传递给与主机 CPU 共享内存空间的加速器硬件是否安全。如果页面可以移动,那就不安全了。
  • 太棒了,谢谢。我认为这是类似的事情,但很高兴得到确认。出于兴趣,您如何将虚拟地址转换为物理地址?
  • 唯一的“物理地址”概念不一定存在于所有架构中。想想NUMA。连接到 CPU A 的内存很可能被视为与 CPU B 不同的物理地址范围。

标签: linux ubuntu memory-management


【解决方案1】:

没有。 mlocked 的页面使用内核的不可删除的 LRU 列表 进行管理。顾名思义(并且mlock() 保证)这些页面不能从 RAM 中逐出。但是,页面可以从一个物理页框迁移到另一个。以下是Unevictable LRU Infrastructure 的摘录(为清晰起见添加了格式):

迁移锁定页面

正在迁移的页面已从 LRU 列表中分离出来,并在页面取消映射、更新页面的地址空间条目并复制内容和状态时保持锁定,直到页表条目被替换为条目那是指新的页面。 Linux 支持迁移mlocked 页面和其他无法删除的页面。 这只需将PG_mlockedPG_unevictable 状态从旧页面移动到新页面。

【讨论】:

  • 感谢您的摘录。这证实了我的怀疑,即我们不能依赖页面静止的假设。
猜你喜欢
  • 2011-10-16
  • 2011-02-19
  • 1970-01-01
  • 1970-01-01
  • 2016-08-31
  • 2014-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多