Нужна помощь с учетом памяти для нестраничных памяти - PullRequest
1 голос
/ 23 марта 2011

Я видел много вопросов относительно использования памяти malloc, но ни одного из них относительно того, с чем я имею дело.

Я работал над процессом с высоким потреблением памяти, который также требовал хорошей производительности. Код находится на C. Мое намерение состоит в том, чтобы позволить этому процессу использовать до 70% памяти машины в качестве нестраничной памяти (для производительности) и все, что выше, в качестве памяти с возможностью постраничного вывода, так что ОС все еще будет иметь некоторую память для «воспроизведения». 1003 *

, так как он мне нужен во время выполнения, любые программы профилирования (valgrind или аналогичные) не имеют отношения.

проблема в том, что я могу отслеживать только объем памяти, который я запрашивал, но не фактический размер, который использует malloc. так что, хотя я думаю, что у меня выделено не более 700 МБ, malloc удерживает ~ 1 ГБ памяти, и, поскольку я просил нестраничные, вся эта память нестранична, и процессы начинают умирать для меня.

Если есть способ узнать, сколько памяти с малой страницей хранится для моего процесса, это будет здорово. Но, читая посты здесь, я думаю, это все еще не поддерживается.

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

Спасибо.

1 Ответ

1 голос
/ 23 марта 2011

В общем, если вам нужен точный контроль над выделением памяти, вы должны явно выделить его с помощью mmap(), а затем предоставить собственную замену malloc(), которая выделяет ваш регион.Это также избавляет вас от проблемы, заключающейся в том, что, если вы попытаетесь mlock заполнить общий пул malloc(), вы все равно будете блокировать больше, чем планировали, потому что степень детализации блокировки составляет 4 КБ страницы, а ваши заблокированные выделения будут распределеныс общими libc ассигнованиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...