2011-12-09 12 views
1

我們有一個Linux應用程序套件,它由大約3G的共享庫組成,其中許多不同的前端裝載共享庫的各個部分。我們使用24G的機器運行,並經常加載該3G的大部分。我們正在考慮試圖強制所有3G始終駐留在RAM中,以便每個應用都能儘快啓動。強制Linux庫駐留在物理RAM中?

可以這樣做嗎?我們的第一個想法是將二進制文件放在像/ dev/shm這樣的虛擬硬盤上,但是看起來內核可以自由地將內容交換出去,這是我們不想要的。我們可以將swappiness參數減少到0,但是我不認爲我們也想這樣做,因爲文件緩存很好地利用了內存。我們只是想指示這些特定的東西應該始終保持熱度。

有m鎖系統調用,這聽起來完全像我們所希望的,但我不知道如何將它與一個ramdisk整合。

也許我們根本不需要ramdisk,而是一個守護進程,它簡單地映射每個二進制文件的全部範圍,傳遞MAP_SHARED,MAP_LOCKED和MAP_POPULATE?這是否會導致其他進程的未來加載立即訪問相同的物理內存? ld使用mmap和MAP_SHARED加載共享庫是否正確?

任何指針讚賞!還有關於爲什麼這是或不是一個好主意的任何觀察。

+0

爲什麼要「整合[m鎖]有一個ramdisk」?用什麼方法只是使用'mlock()'不能解決你的問題?據我所知,它可以以最簡單的方式完全符合你的要求。 – mkj

回答

0

你可以看看prelink結合swappiness調低至零。如果你有24G並且你的盒子開始交換,無論如何你都會敬酒。每次加載時,預鏈接都會強制您將庫重定位到每個庫的相同特定內存區域。這使得庫可以避免任何重疊的內存範圍(至少在64位系統上),因此每個庫只加載一次。此外,還可以保存少量的內存(在我的系統中最高可達100 M),當然速度更快。

在我個人看來,這通常是一個好主意,調低swappiness爲0,即使在較少RAM的機器。這主要是因爲Andrew Morton喜歡它,它更多地針對低內存桌面。

我會堅持我的手指在我的耳邊唱「啦啦啦」,直到人們告訴我:「我設置swappiness至零,並沒有做什麼,我想它做」

這當然不會發生,或者只是爲了阻止可怕的歌聲。

這不會禁用文件高速緩存,它只是避免頁面交換出去,以騰出空間用於文件高速緩存,這通常是一個好主意,因爲交換比從磁盤讀取文件慢得多。

+0

謝謝!我會考慮預先鏈接,我沒有聽說過。我懷疑我會通過修改所有用戶計算機上的swappiness參數來進行修改,但對於可能產生的影響進行任何形式的爭論我都不甚瞭解。但是我確實得到了你的論點的要點 - 沒有人喜歡等待長時間閒置的進程交換回來,即使他們在臨時文件緩存中得到了小小的提升...... –