2012-02-22 127 views
1

我想在我的用戶空間linux應用程序中實現內存緩存(某種類型)。使用linux用戶空間內存進行緩存

我所追求的基本上與linux的文件系統緩衝區高速緩存相同的行爲:任何其他內存都不使用的內存由我的緩存進程使用。

如果我要用硬編碼限制我的緩存應該有多大,我必須將緩存限制在某個預定義的值,而不是如果剩餘的進程沒有使用那麼多內存,或者它縮小,如果內存使用氣球。

我想要的是linux調用某種回調,通知我從我的緩存中刪除一些條目,當它實際上需要內存時。

這樣,進程所需要的任何內存都可以從我的緩存中取走,而剩下的內存專用於我的緩存。

有沒有辦法在linux中做到這一點?

是這樣做的最好方法,只監視/ proc/meminfo並增加我的緩存大小,以便使用的物理內存幾乎比總物理內存少?

+0

這取決於你想要做什麼。如果你正在使用文件做什麼,那麼讓linux緩存它們可能會更好。 – 2012-02-22 08:02:05

+0

這個問題讓我想起了Varnish HTTP緩存/加速器,它試圖做同樣的事情。 – 2012-02-22 08:50:56

+0

>>>勉強少於總內存 - 由於服務時間以指數方式接近無窮大,所以利用接近100%[甚至90%]實際上並不是一個好主意。查看任何排隊理論文件或http://www.johndcook.com/blog/2009/01/30/server-utilization-joel-on-queuing/ – Fakrudeen 2012-02-22 09:49:05

回答

1

這聽起來很像你試圖編寫圍繞虛擬內存管理器(VMM)。這不太可能按照你想要的方式工作,或者即使這樣做:非常有效。

此問題在Poul-Henning Kamp編寫的Varnish architecture notes中討論。我敦促您閱讀本文,因爲他談到Varnish如何與VMM進行高效交互,並且可能會爲您的緩存提供其他設計思路的一些想法。

任何試圖通過查看以下比率來調整自身到系統內存壓力的用戶進程:駐留集大小(rss)/虛擬大小(vsize)。會受到VMM反饋迴路的影響,並且反饋迴路可能會對流程,系統或兩者產生不利影響。

查看/proc的文檔,瞭解獲取rss的位置以及vsize的過程。

祝你好運。