Дополнение к заметке о дефрагментации в Linux

На этой странице приводятся выдержки из опубликованной в журнале "Системный администратор", No 1­2 (январь-­февраль) 2010 г. статьи Пешеходова Андрея "Не новое, но хорошо доработанное старое: взгляд на ext4", касающихся темы заметки блога. С полным текстом статьи можно ознакомиться здесь.


Отложенное размещение – хорошо известная техника, суть которой заключается в отсрочке выделения блоков до времени сброса страниц (flush). Это позволяет обеспечить более эффективную, с точки зрения фрагментации и нагрузки на CPU, группировку запросов на размещение. Короткоживущие временные файлы при этом могут вообще не получить дискового воплощения, оставаясь лишь в кэше. Патчи с реализацией отложенного размещения для ext4 уже написаны, сейчас идёт работа по выносу соответствующего функционала на уровень VFS для его разделения с другими файловыми системами.

С появлением отложенного размещения стало возможным реализовать так называемое многоблочное размещение, при котором дисковое пространство выделяется сразу целыми экстентами, что исключает множество лишних вызовов ext4_get_blocks() и ext4_new_blocks() и уменьшает нагрузку на процессор.

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

1. Перспективное предразмещение (incore preallocation) – информацию о свободных экстентах можно использовать для построения более мощного механизма предразмещения и резервирования дискового пространства.
Каждый inode может иметь несколько заранее зарезервированных сегментов, индексируемых в логических блоках, что, к примеру, облегчит HPC-приложениям запись в файл со множества узлов по совершенно не предсказуемым смещениям.

2. Группы размещения (locality groups) – в настоящее время решение по выделению блоков принимается независимо для каждого файла. Однако, если аллокатор будет располагать информацией о логических взаимосвязях объектов файловой системы, он сможет размещать   связанные файлы ближе друг к другу, что существенно улучшит производительность чтения/поиска. Аллокатор может отслеживать некоторое количество ещё не выделенных блоков (на уровне групп) и попытаться зарезервировать для них соответствующее количество   дискового пространства. Этот объём будет использован позднее, при сбросе страниц на диск,   для назначения конкретных блоков конкретным файлам. Всё это, ценой незначительного повышения нагрузки на ЦПУ, приведет к существенному уменьшению фрагментации файловой системы и более оптимальному, с точки зрения производительности, размещению   связанных данных на диске.

Можно с уверенностью сказать, что ext4 располагает достаточно мощным механизмом распределения дискового пространства, соответствующим современным требованиям к эффективной обработке больших и маленьких дисковых запросов под многопоточными нагрузками.

Фоновая дефрагментация

Хотя функционал, описанный выше, существенно улучшает фрагментационную устойчивость файловой системы, со временем, на активно используемой файловой системы, фрагментация всё же может достичь существенных значений.

Для решения этой проблемы была разработана программа e4defrag, способная дефрагментировать как отдельные файлы, так и весь том. При работе на отдельным файлом программа создает временный inode и выделяет под все данные файла один (если возможно) или несколько экстентов, используя многоблочное размещение. После копирования данных файла блочные указатели в оригинально inodes подменяются на новые, и временный inode удаляется.


  

Комментариев нет:

Отправить комментарий