1 Отредактировано Agressor (13.11.2007 12:11:53)

Тема: Оптимизация файловых систем ext2/3

Сразу оговорюсь, что говоря об "оптимизации" я буду иметь ввиду ускорение работы файловой системы с директориями, содержащими много файлов.
Данный тип оптимизации позволит решить проблемы с быстродействием, которые могут возникнуть при использовании ext2/3 на разделах жесткого диска, которые содержат директории, в которых находится множество файлов.
Примером таких директорий являются, например, кэш прокси-сервера squid, или спул nntp-сервера.
К примеру, на офисном шлюзе на данный момент в кеше сквида имеем 79728 файлов.

# ls -lR /var/spool/squid|wc -l
79728

Или, еще такой пример:

# ls -lR /usr/|wc -l
511898

Однако нужно иметь ввиду одно отличие: файлы в /usr в большинстве своем просто "лежат", изредка читаются, еще реже изменяются. Тогда как файловая система /var/spool активно модифицируется — происходит создание, удаление и массированное чтение файлов.
Для обычной, домашней десктопной системы это не так заметно, а для сервера эта директория может быть одной из самых часто используемых.
Для ускорения работы файловой системы ext2, и ее наследницы ext3 было разработана технология, получившая название directory indexin, или HTree.
Возможность создания directory index появилась в e2fsprogs версии 1.39 (утилиты для работы с etx2/3). Но для файловых систем, созданные с использованием более ранних версий требуют дополнительных действий для включения directory index.
Однако, что бы окончательно убедиться, присутствует ли directory index на каком-нибудь конкретном разделе, можно использовать следующую команду:

# tune2fs -l /dev/sda3 |grep features
Filesystem features:      has_journal resize_inode filetype needs_recovery sparse_super large_file

Из примера следует, что в данной файловой системе на включен directory index, иначе в списке features присутствовал бы "dir_index".
Для того, что бы добавить dir_index для /dev/sda3 необходимо произвести следующие действия:
1. Отмонтировать файловую систему, во избежания повреждения данных.
2. Выполнить следующие команды.

# tune2fs -O +dir_index /dev/sda3 — для добавления HTree оптимизации.
# e2fsck -Df /dev/sda3 — для проверки файловой системы, и перестройки индекса директорий.

Бенчмарков не делал, но увеличение скорости доступа ощутимо даже при навигации по директориям.
Да, и Teodor Tso, автор e2fsck, отмечает, что вполне безопасно производить операцию по добавлению dir_index на смонтированной файловой системе.

Слушаю это, работаю в Gentoo.

2

Re: Оптимизация файловых систем ext2/3

Свежие дистры dir_index включают по дефолту, + к сказанному (раз уж боянить, то по полной;)) полезно добавить параметр монтирования "noatime" запретит коррекцию "времени обращения" к файлу, что, оочень редко юзается.