использование памяти пространства пользователя linux для кэширования - PullRequest
2 голосов
/ 22 февраля 2012

Я хотел бы внедрить кэш в памяти (некоторого типа) в моем приложении linux пользовательского пространства.

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

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

я хотел бы, чтобы linux вызывал какой-то обратный вызов, который уведомляет меня об удалении некоторых записей из моего кэша, когда ему действительно требуется память.

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

Есть ли способ сделать это в Linux?

лучший способ сделать это, просто отслеживая / proc / meminfo и увеличивая размер моего кэша так, чтобы используемая физическая память была чуть меньше общей физической памяти?

1 Ответ

1 голос
/ 23 февраля 2012

Это звучит очень похоже на то, что вы пытаетесь кодировать вокруг менеджера виртуальной памяти (VMM).Это вряд ли сработает так, как вы хотели бы, или даже если это сработало бы: очень эффективно.

Эта проблема обсуждается в Замечаниях по архитектуре лака , написанных Poul-Henning Kamp.,Я призываю вас прочитать этот документ, так как он рассказывает о том, как Varnish был разработан для эффективного взаимодействия с VMM, и может дать вам несколько идей для альтернативных идей дизайна для вашего кэша.

Любой пользовательский процесс, который пытается приспособиться к давлению системной памяти, скажем, взглянув на соотношение: размер резидентного набора (rss) / виртуальный размер (vsize).Будет страдать от того, что он находится в цикле обратной связи с VMM, и этот цикл обратной связи может иметь пагубные последствия для процесса, системы или обоих.

Посмотрите документацию для / proc , где найти rss и vsize для процесса.

Удачи.

...