Есть ли способ отключить очистку памяти в jemallo c? - PullRequest
0 голосов
/ 15 апреля 2020

Мы реализуем долго работающий сервер, который использует память jemallo c внутри для памяти alloc / deallo c. Сервер обрабатывает данные периодически, непрерывно. С каждым пакетом он выделяет память (через mallo c ()) и обрабатывает данные внутри пакета, после чего освобождается память (через free ()).

Проблема в том, что когда поступают новые данные , он должен выделить новую память для обработки, которая вызывает много ошибок страниц, потому что страницы памяти, выделенные из операционной системы ранее, возвращаются обратно в предыдущую функцию free () (или очищается madvise)

Есть ли способ сохранить (в адресном пространстве процесса) память, которая была ранее освобождена, чтобы при следующем выделении их можно было использовать повторно?

Обратите внимание, что поскольку каждое выделение / освобождение не имеют фиксированного размера, пул памяти фиксированного размера здесь не подходит. Здесь необходим некоторый общий распределитель, такой как jemallo c.

Есть ли в jemallo c конфигурация, чтобы вся выделенная и освобожденная память оставалась в адресном пространстве процесса для последующего повторного использования? Допустимо выделять большой кусок (например, 64 ГБ) при запуске сервера и обрабатывать выделение / освобождение / фрагментацию / дефрагментацию внутри этого отдельного фрагмента.

...