Эксперименты с применением многопользовательского теста
В каждой файловой системе имеется таблица индексных дескрипторов фиксированного размера, ограничивающая общее количество активных дескрипторов в ядре.
В SVR3 механизм кэширования дескрипторов использует алгоритм замены последнего, недавно использовавшегося элемента. Ядро освобождает дескрипторы, размещенные в конце списка, и размещает другие, взятые из его начала. Такая схема является стандартной методикой работы кэша и оптимальным решением для кэша дескрипторов из-за того, что именно неактивные дескрипторы используются чаще всего.
Если файл часто используется, то его индексный дескриптор является прикрепленным (pinned) к таблице. При доступе к файлу происходит кэширование его страниц в памяти. После того как файл становится неактивным, вероятно нахождение некоторых его страниц в памяти. Такие страницы могут быть обнаружены через список страниц объекта vnode (с использованием поля v_page структуры). Система управления страницами производит хэширование также на основе указателя на vnode и смещения страницы в файле. Когда ядро использует индексный дескриптор заново, его предыдущие страницы могут уже не быть идентичными данным файла. Если процессу нужна страница, сформированная из данных этого файла, ядру необходимо будет прочесть ее с диска заново, даже в том случае, если страница уже находится в памяти.
Говорят, что объект закреплен в памяти, если его нежелательно удалять или освобождать. Объекты со счетчиками ссылок являются прикрепленными до тех пор, пока не освободится последняя ссылка. Процесс также может закрепить часть своего адресного пространства в памяти при помощи системного вызова mlock.
В любом случае для повторного использования лучше применять дескрипторы, не имеющие страниц, кэшированных в памяти. При достижении счетчиком ссылок на vnode нуля, ядро вызывает операцию VOP_INACTIVE для освобождения vnode и его закрытого объекта данных (в рассматриваемой файловой системе — индексного дескриптора). При освобождении дескриптора ядро проверяет список страниц vnode. Освобожденный дескриптор помещается в начало списка, если его список страниц пуст, либо в конец списка, если какие-либо страницы файла до сих пор находятся в памяти. Если индексный дескриптор будет оставаться неактивным, система управления страницами произведет удаление страниц из памяти.
В работе описываются правила размещения и возврата индексных дескрипторов, позволяющие регулировать загруженность системы управлением количеством дескрипторов в памяти. Вместо применения таблицы фиксированного размера файловая система производит размещение дескрипторов динамически при помощи диспетчера памяти ядра.
Это позволяет увеличивать или уменьшать количество индексных дескрипторов в системе по мере необходимости. Системному администратору больше не нужно угадывать наиболее подходящее число дескрипторов при установке системы.
Если функция
iget()
не может обнаружить дескриптор в своей таблице хэширования, то она выбирает первый дескриптор из списка. Если окажется, что он имеет страницы в памяти, функция возвратит такой дескриптор обратно в список и вызовет диспетчер памяти ядра для размещения новой структуры inode. Алгоритм проверки списка свободных дескрипторов можно сделать более универсальным, если производить поиск объектов, не обладающих страницами в памяти, однако реализация, описываемая в этом разделе, является простой, но достаточно эффективной. Ее единственным недостатком является размещение в памяти несколько большего количества дескрипторов, чем это реально требуется.
Эксперименты с применением многопользовательского теста загрузки, работающего в режиме разделения времени, показали, что новый алгоритм сокращает использование системного времени (проведенного процессором в режиме ядра) с 16 до 12 %. Хотя описанный алгоритм был изначально реализован для s5fs, он оказался настолько универсальным, что был взят на вооружение и в других файловых системах, в том числе и в FFS.
Опубликовал katy
July 09 2015 09:16:05 ·
0 Комментариев ·
2542 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.