Европейский Университет в Санкт-Петербурге
Опубликован: 19.10.2005 | Доступ: свободный | Студентов: 1763 / 169 | Оценка: 4.31 / 3.82 | Длительность: 18:28:00
Лекция 7:

Настройка производительности системы

Кэш поиска имен каталогов (DNLC)

Чтобы не искать номер индексного дескриптора по имени файла каждый раз, когда к файлу происходит обращение, система кэширует имена файлов и каталогов вместе с номерами их виртуальных индексных дескрипторов. Этот специальный кэш называется кэш поиска имен каталогов (directory name lookup cache - DNLC).

При открытии файла DNLC вычисляет соответствующий индексный дескриптор по имени этого файла. Если имя уже находится в кэше, то оно отыскивается очень быстро, поскольку не происходит сканирования каталогов на диске. Каждая запись DNLC в ранних версиях системы имела фиксированный размер, поэтому пространство для имени файла не могло превышать 30 символов, а более длинные имена файлов не кэшировались. Начиная с Solaris 7, это ограничение снято. Если каталог содержит несколько тысяч записей, поиск номера индексного дескриптора конкретного файла отнимет много времени. В том случае, когда в системе открыто много файлов, а количество файлов в рабочих каталогах велико, высокая частота успешных обращений к DNLC очень важна.

Кэш имен каталогов не нуждается в настройке, хотя его размер зависит от значения maxusers. По умолчанию он определяется как (17x maxusers )+90 (в Solaris 2.5.1) или 4x( maxusers + max_nprocs )+320 (в Solaris 2.6 и выше). Другие параметры, на которые тоже оказывает влияние maxusers, обсуждены в лекции 10.

Команда

vmstat -s

показывает частоту успешных попаданий в DNLC с момента начала работы системы.

Если частота промахов велика (попаданий обычно не должно быть меньше 90%), следует подумать об увеличении размера DNLC. Проверим этот показатель работы системы командой

vmstat -s |grep 'name lookups'
	422920 total name lookups (cache hits 99%)

Количество запросов к DNLC в секунду можно получить из поля namei/s в выводе команды sar -a:

sar -a  1 5 
SunOS sunny 5.9 Generic_112234-03 i86pc  07/03/2004
19:26:50 	iget/s 	namei/s 	dirbk/s
19:26:51	0	1	0
19:26:52 	0 	0 	0
19:26:53 	0 	0 	0
19:26:54 	0 	4 	0
19:26:55 	0 	0 	0

Как видно, система не очень-то загружена запросами к файлам и одыхает. А теперь запустим операцию, которая точно требует многократного обращения к DNLC:

find / -name "top" &
[1] 577
sar -a 1 5
SunOS sunny 5.9 Generic_112234-03 i86pc  07/03/2004
19:27:14 	iget/s 	namei/s 	dirbk/s
19:27:15  	1675  	2592  	1922
19:27:16  	1220  	2365  	1474
19:27:17   	968  	1882  	1172
19:27:18  	1057  	2107  	1292
19:27:19  	1231  	2211  	1443
vmstat -s |grep 'name lookups'
  503370 total name lookups (cache hits 86%)

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