2010-07-12 39 views
1

我想限制进程可以使用的物理内存量,而不限制它可以使用的虚拟内存量。我正在努力测量内存压力下各种算法的行为,我需要用许多不同数量的物理内存来测试它们的性能 - 所以我要么需要购买大量模糊大小的内存,或者我需要一个支持以某种方式限制进程驻留内存的操作系统。限制常驻内存使用量

不幸的是,Linux不尊重/强制执行setrlimit(RLIMIT_RSS, ...),OSX也没有。[1]你能推荐我一个可以做到这一点的操作系统吗?任何非OSX BSD?有没有一种机制可以在Solaris中执行此操作? Windows的某些变体可以做到这一点吗?


Linux完全忽略了这个请求,而OSX只是用它来决定在物理内存耗尽时要先交换什么。当只有X兆内存可用时,这两种方法都不能帮助我分析算法的行为。事实证明,Linux在内核中没有任何机制可以做到这一点,所以它几乎完全没有,除非有人能指出我使用内核fork来启用它。 Solaris甚至没有setrlimit()的选项,但它可能有另一种我不知道的方式。

+0

也许虚拟化是这里的答案? – 2010-07-12 21:38:09

回答

0

想通了。所以,你几乎不能用任何我能找到的Unix来做到这一点。

因此,要做的就是运行一个虚拟化的操作系统,它具有尽可能多的内存,你想给它。然后,虚拟操作系统将被驱动进入交换,但是您的主操作系统将会嗡嗡声很好。更好的是,如果您只想计算页面错误而不是测量挂钟时间,则可以使用此方法将虚拟机的交换磁盘设置为非虚拟化磁盘的虚拟磁盘 - 这样可以使页面错误几乎不需要时间来解析虚拟机!