【问题标题】:How to pin a shared memory segment into physical memory如何将共享内存段固定到物理内存中
【发布时间】:2011-10-23 13:04:52
【问题描述】:

我使用boost::interprocess::managed_shared_memory 在共享内存中加载数据结构。我需要将共享内存段固定到物理内存中(例如类似于映射文件的系统调用 mlock)。

在 linux 中,我的数据结构迟早会从物理内存中换出。在我的情况下,这会在结构被换出后,为访问该结构的下一个进程带来高昂的成本。

有没有办法将共享内存固定到物理内存中?我对任何解决方案都感兴趣,即使这意味着我不能使用boost::interprocess

【问题讨论】:

  • 暂时我正在使用 swapoff 命令禁用交换分区以完成此操作。这种解决方案当然不理想……
  • 这个运气好吗?我也对此感兴趣。

标签: shared-memory boost-interprocess


【解决方案1】:

使用basic_managed_xsi_shared_memory(显然自boost 1.46 起可用),您可以访问底层shmid(来自get_shmid 成员),这应该允许您使用shmctl 控制shmid。使用 shmctl,您可以通过对 shmid 应用 SHM_LOCK 命令来防止共享内存页面的交换。

其他类型的锁定(您称为“固定”),例如将内存映射文件锁定到内存中,可以通过提供从mapped_regionget_addressget_size 成员函数获得的返回值来实现到mlock 命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-01
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 2012-06-02
    • 1970-01-01
    • 2014-10-08
    相关资源
    最近更新 更多