Linux Kernel (Ядро линукса) (часть 3)


Утилизация страниц из кэша элемента каталога

Функция shrink dcache memory является сокращающей для кэша элементов каталога. Она ищет в кэше неиспользуемые элементы каталога, т. е. объекты, на которые не ссылается ни один процесс и освобождает их.

Поскольку объекты в кэше элементов каталога выделяются с помощью slab- аллокатора, фуНКЦИЯ shrink dcache memory МОЖет освободить неСКОЛЬКО участков памяти, в результате чего некоторые страничные кадры будут утилизированы функцией cache reapO Кроме того, кэш элементов каталога действует как контроллер кэша индексных дескрипторов. Следовательно, когда элемент каталога освобождается, страницы, содержащие соответствующий индексный дескриптор, могут стать неиспользуемыми” и, в конечном счете, будут освобождены.

Функция shrink dcache memory принимает в качестве параметров количество страничных кадров, которое нужно освободить, и GFP-маску. Она начинает работу с проверки, сброшен ли бит gfp fs в GFP-маске. Если сброшен, функция возвращает-1, потому что освобождение элемента каталога может запустить какую-либо операцию в дисковой файловой системе. Собственно утилизация страничных кадров выполняется функцией prune dcache . Эта функция сканирует список неиспользуемых элементов каталога (чья голова хранится в переменной dentry unused), пока не достигнуто требуемое количество освобожденных объектов, или не будет просканирован весь список. Для каждого объекта, к которому давно не было обращений, функция выполняет
следующие действия:
1. Удаляет объект элемент каталога” из хеш-таблицы элементов каталога, из списка элементов каталога в его родительском каталоге и из списка элементов каталога индексного дескриптора-владельца.
2. Уменьшает счетчик обращений индексного дескриптора элемента каталога, для чего вызывает метод d iput, если он определен для данного элемента каталога, или функцию iput .
3. Вызывает метод d reiease элемента каталога, если метод определен.
4. Вызывает функцию caii_rcu для регистрации функции обратного вызова, которая удалит элемент каталога. В свою очередь, функция обратного вызова воспользуется функцией kmem_cache_f гее , Чтобы вернуть объект slab-аллокатору
5. Уменьшает счетчик обращений родительского каталога.

В конце своей работы функция shrink dcache memory возвращает значение, зависящее от количества неиспользуемых элементов каталога, оставшихся в кэше. Более точно, возвращенное значение равно количеству неиспользуемых элементов каталога, умноженному на 100 и разделенному на значение глобальной переменной syscti vfs cache pressure. По умолчанию эта переменная равна 100, и возвращенное значение в точности равно количеству неиспользуемых элементов каталога. Однако системный администратор может модифицировть эту переменную в файле /proc/sys/vm/vfs_cache_pressure или с помощью системного вызова sysctio. Если установить эту переменную в значение, меньшее 100, функция shrink siabo утилизирует меньше страниц из кэша элементов каталога (и кэша индексных дескрипторов) по отношению к количеству страниц, утилизированных из списков LRU. И наоборот, установка этой переменной в значение, большее 100, заставляет функцию shrink siabo утилизировать больше страниц кэша элементов каталога и кэша индексных дескрипторов по отношению к количеству страниц, утилизированных из списков LRU.

Предыдущая страница | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | Следующая страница




Возможно, Вас также заинтересует:

ОС Knoppix - это Linux без про...

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

Linux Kernel (Ядро линукса) (ч...

Спин-блокировкаСпин-блокировка необходима в многопроцессорной системе, потому что могут возникнуть...

Linux Kernel (Ядро линукса) (ч...

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно...

Linux Kernel (Ядро линукса) (ч...

Буферы блоков и головы буферовУ каждого буфера есть дескриптор голова буфера, имеющий тип buffer...