2010-07-15 63 views
1

我一直在FreeBSD和大型映像中遇到一些麻煩。 Linux不顯示相同的問題。32位FreeBSD 7.2和1GB映像

在程序啓動時,它總是可以獲得1 GB的地圖。但是,有一個重載操作,其中文件被替換並重新映射。新地圖每次通常會稍微大一些,因此它不適合整齊地放入舊的mmap位置。這種重新映射經常在FreeBSD上失敗,但在Linux上幾乎沒有。

認爲這是因爲加載程序運行該片段的虛擬內存空間中做其他圖書館也內存分配庫(它更經常使用ASLR失敗的Linux版本。是否使用FreeBSD ASLR?)。 FreeBSD的malloc實現或庫加載可能會導致這種情況。

我正在尋找一些我可以做的事情,使其更有可能工作。

我正在考慮的一件事就是總是mmap滿1 GB的空間,即使文件大小實際上可能是890 MB。如果我能做到這一點,那麼我總是會有一個1 GB的插槽來重新映射新的895 MB文件。

+0

你看過'login.conf(5)',特別是'memorylocked'和'vmemoryuse'嗎? – 2010-07-15 22:08:11

+0

@尼古拉:這些限制沒有設置。問題不是限制。我知道,因爲mmap總是在程序啓動時工作。 – 2010-07-15 23:58:28

+0

哪個FBSD版本? – 2010-07-16 01:25:58

回答

3

問題可能是由於沒有足夠大的連續地址空間塊造成的。它很可能在具有1Gb mmap的32位系統上。

考慮僅使用64位系統(大多數公司現在用於生產服務器)或mmap()代替幾個較小的區域。

你不打算解決這個問題。