Заставить библиотеки Linux оставаться в физической памяти? - PullRequest
1 голос
/ 09 декабря 2011

У нас есть набор приложений для Linux, который состоит из 3G общих библиотек с множеством различных внешних интерфейсов, которые загружают различные части общих библиотек. Мы работаем на машинах с 24G и часто загружаем большие части этого 3G. Мы думаем о том, чтобы заставить все 3G постоянно находиться в оперативной памяти, чтобы каждое приложение запускалось как можно быстрее.

Можно ли это сделать? Нашей первой мыслью было поместить двоичные файлы в виртуальный диск типа / dev / shm, но похоже, что тогда ядро ​​будет свободно обмениваться содержимым, что нам не нужно. Мы могли бы уменьшить параметр swappiness до 0, но я не думаю, что мы этого тоже хотим, потому что файловые кеши - это хорошее использование памяти. Мы просто хотим диктовать, что этот конкретный кусок материала должен постоянно оставаться горячим.

Есть системный вызов mlock, который звучит именно так, как мы хотим, но я не уверен, как интегрировать это с виртуальным диском.

Может быть, нам вообще не нужен ramdisk, а процесс демона, который просто отображает полный экстент каждого двоичного файла, передавая MAP_SHARED, MAP_LOCKED и MAP_POPULATE? Приведет ли это к будущим нагрузкам других процессов для немедленного доступа к той же физической памяти? Правильно ли, что ld загружает разделяемые библиотеки, используя mmap с MAP_SHARED?

Любые указатели приветствуются! Также любые замечания о том, почему это хорошая идея.

Ответы [ 2 ]

1 голос
/ 17 января 2014

Вы можете заставить ядро ​​linux хранить разделяемые библиотеки в памяти. Я использую для этого vmtouch.

Посмотрите на эти вопросы для получения дополнительной информации: https://serverfault.com/questions/43383/caching-preloading-files-on-linux-into-ram

0 голосов
/ 09 декабря 2011

Вы можете посмотреть на предварительную ссылку в сочетании с переключением частоты до нуля. Если у вас есть 24G, и ваша коробка начинает меняться, вы все равно тост. Prelink заставит вас перемещать библиотеки в одну и ту же область памяти для каждой библиотеки каждый раз, когда она загружается. Это позволяет библиотекам избегать любых перекрывающихся диапазонов памяти (по крайней мере в 64-битной системе), поэтому каждая библиотека загружается ровно один раз. Кроме того, сохраняется небольшой объем памяти (на моей системе он составляет около 100 М), и, конечно, он быстрее.

По моему личному мнению, неплохо бы уменьшить частоту перестановки до 0, даже на машинах с меньшим количеством оперативной памяти. Это главным образом там, потому что Эндрю Мортону понравилось, и это больше нацелено на рабочий стол с малым объемом памяти.

Я собираюсь засунуть пальцы в уши и петь «ля ля ля», пока люди не скажут мне: «Я установил своппинг на ноль, и он не сделал то, что я хотел, чтобы он сделал»

Что, конечно, никогда не случается или только останавливает ужасное пение.

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

...