首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分配“临时”内存(在Linux中)

分配“临时”内存(在Linux中)
EN

Stack Overflow用户
提问于 2014-03-15 07:38:18
回答 1查看 779关注 0票数 0

我试图找到任何允许进程分配“临时”内存的系统功能--即被进程认为可以丢弃的内存,并且在需要内存时可以被系统拿走,但允许进程尽可能地从可用内存中受益。换句话说,进程告诉系统,当进程不使用内存时,牺牲内存块是可以的。释放块也比交换它更好(它更昂贵,或者同样昂贵,交换它而不是重新构造它的内容)。

系统(例如Linux)在内核中有这些东西,比如F/S内存缓存。我正在寻找这样的东西,但可用的用户空间。

我知道有很多方法可以从程序中实现这一点,但是处理这个问题更像是一个核心任务。在某种程度上,我在问内核:

  • 如果您需要降低我的或另一个进程的驻留时间,请先将这些临时页面删除。
  • 如果您要删除这些临时页面,不要交换它们,只需解除它们的映射。

具体来说,我感兴趣的是一个可以在Linux上工作的解决方案,但是我很想了解其他任何O/S是否存在。

更新

关于我期望它如何工作的一个例子:

  • 映射一页(通过交换)。和现在的没什么区别。
  • 告诉内核页面是“临时的”(因为没有更好的名称),这意味着如果这个页面消失了,我不希望它被分页。
  • 告诉内核,我需要临时页面“返回”。如果页面被取消映射,因为我标记它为“临时”,我被告知这是发生的。如果没有,那么它就开始表现为一个常规页面。

下面是在现有MM上这样做的问题:

为了使页面不被传呼,我必须将它们分配给任何东西。但是,他们可以在任何时候被呼出,而不需要事先通知。使用mincore()进行测试并不能保证当mincore()完成时页面仍然存在。使用mlock()需要提升权限。

因此,我能接触到的最接近的方法是使用mlock()和匿名页面。按照我先前提出的期望,将是:

  • 映射一个匿名的锁定页面。(MAP_ANON|MAP_LOCKED|MAP_NORESERVE)。用魔法盖上这一页。
  • 若要使页“临时”,请解锁该页。
  • 当需要该页时,再次锁定它。如果魔法存在,那就是我的数据,否则它就丢失了,我需要重建它。

然而,当我使用页面时,我并不需要将它们锁定在RAM中。此外,如果内存被过度提交,MAP_NORESERVE也会出现问题。

EN

回答 1

Stack Overflow用户

发布于 2014-03-15 07:49:54

这就是VmWare ESXi服务器,也就是Virtual Machine Monitor (VMM)层实现的内容。这是虚拟机中使用的一种方法,它是从虚拟机来宾获得reclaim内存的一种方式。拥有比实际使用的内存更多的内存的虚拟机会将其释放/释放给VMM,以便将其分配给需要它的虚拟机来宾。

本文介绍了Memory Reclamation的这种技术:vsphere5.pdf

在类似的行中,您可以在内核中实现类似的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22421014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档