32-битные карты FreeBSD 7.2 и 1GB - PullRequest
1 голос
/ 16 июля 2010

У меня были некоторые проблемы с FreeBSD и большими mmaps.Linux не показывает те же проблемы.

При запуске программы всегда можно получить карту размером 1 ГБ.Тем не менее, есть операция перезагрузки, где файл заменен и переназначен.Новая карта обычно немного больше каждый раз, поэтому она не вписывается в старое местоположение mmap.Этот переназначение часто терпит неудачу во FreeBSD, но вряд ли когда-либо в Linux.(Чаще всего происходит сбой в Linux, использующих ASLR . Использует ли FreeBSD ASLR?)

I считают это из-за загрузки библиотек другими библиотеками, а также выделения памяти во времяпрограмма запускает этот фрагмент виртуальной памяти.Вероятно, есть некоторая особенность реализации malloc во FreeBSD или загрузки библиотеки.

Я ищу кое-что, что я могу сделать, чтобы это работало с большей вероятностью.

Одна вещь, которую я имеюРассматривается просто всегда отображать полный 1 ГБ пространства, даже если размер файла на самом деле может быть 890 МБ.Если я смогу это сделать, то у меня всегда будет 1 ГБ слот для переназначения нового файла 895 МБ.

1 Ответ

3 голосов
/ 09 сентября 2010

Возможно, проблема вызвана отсутствием достаточно большого непрерывного блока адресного пространства.Это очень вероятно в 32-битной системе с 1-гигабитным mmap.

Рассмотрите возможность использования исключительно 64-битных систем (большинство компаний сейчас используют для производственных серверов) или mmap () вместо нескольких небольших областей.

Ты не сможешь обойти это.

...