Мой вопрос является расширением этого Как манипулировать кешем страницы в Linux?
Я пытался создать небольшой проект, целью которого является ограничение размера кеша страницы, используемого для каждого файла. Подход, который я использовал, был следующим:
- Поддержание очереди kfifo указателей страниц, поскольку они добавлены в кэш страницы.
- Добавьте крючок в add_to_page_cache_lru() и посмотрите, больше ли размер дерева оснований (адрес_пространства) файла, чем предопределенный размер, а затем выберите жертву из очереди fifo и удалите страницу из кеша страницы.
- Я использовал функции delete_from_page_cache() и try_to_unmap(), чтобы вырезать страницу из кеша страницы, а затем put_page(). отпустите страницу.
Я ожидаю, что этот код освободит страницы и освободит память, но это, похоже, не происходит. Например, если я читаю файл размером 25 МБ, и я ограничил размер кеша страницы для этого файла размером 512 страниц (2 МБ), то я ожидаю увидеть изменение только 2 МБ в свободной памяти (free -m). Вместо этого я вижу, что полная 25 МБ съедена и отображается в свободной команде.
Что еще нужно сделать для того, чтобы мои требования были выполнены? Я еще не думал о грязных страницах, поскольку я даже не мог заставить его работать для чтения (cat the file). Любые указатели будут полезны.
P.S. - Я использую linux 4.0 для этого проекта.