2010-07-12 63 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來做到這一點。

因此,要做的就是運行一個虛擬化的操作系統,它具有儘可能多的內存,你想給它。然後,虛擬操作系統將被驅動進入交換,但是您的主操作系統將會嗡嗡聲很好。更好的是,如果您只想計算頁面錯誤而不是測量掛鐘時間,則可以使用此方法將虛擬機的交換磁盤設置爲非虛擬化磁盤的虛擬磁盤 - 這樣可以使頁面錯誤幾乎不需要時間來解析虛擬機!