УДК 004.451
Юнак А.В1
Анализ фрагментации различных файловых систем ОС LINUX
Все большее количество государственных организаций и коммерческих фирм переходит на использование альтернативного бесплатного программного обеспечения. В частности, во многих предприятиях, используется бесплатная операционная система Linux вместо платной ОС Windows.
При выполнении различных операций с документами используется, входящая в состав операционной системы, файловая подсистема. В связи с ограниченностью объема устройств хранения информации, актуальным свойством файловой подсистемы является возможность компактно располагать информацию.
Данная работа посвящена анализу фрагментации файлов (компактности расположения) в различных файловых системах и необходима для реализации программных средств для преодоления отрицательных эффектов фрагментации.
В этой статье был проведен анализ различных файловых систем и выявлена система, которая меньше всего фрагментирует файлы.
Благодаря широкой поддержке отрасли и усилиям, предпринимаемым сторонниками свободно распространяемых программ, Linux приобрела важные черты, присущие коммерческим версиям Unix и других ОС для крупных серверов. Одна из таких черт — поддержка файловых систем, способных работать с большими разделами жестких дисков, легко масштабироваться на многие тысячи файлов, быстро восстанавливаться после сбоя, поддерживать более высокую производительность ввода/вывода, эффективно работать с файлами самого разного размера, противостоять внутренней и внешней фрагментации и даже предоставлять новые функции, которые не поддерживаются ни в одной из более традиционных файловых систем.
Фрагментация происходит, когда система не может расположить целый файл на одном непрерывном участке диска. Вместо этого система разбивает файл на несколько фрагментов, которые записываются в разные места на диске и система затем должна поддерживать некую структуру файловой системы для отслеживания мест где расположены все фрагменты файла.
Проблема фрагментации файлов
Внутренняя фрагментация. Логический блок — минимальная единица дискового пространства, которую резервирует файловая система посредством системных вызовов. Если размер файла меньше числа байт в логическом блоке, то на диске он все равно будет занимать один блок. Таким образом, если длина конкретного файла не делится нацело на число байт в логическом блоке, то файловая система будет вынуждена резервировать новый блок, который останется незаполненным до конца, что приводит к нерациональному использованию дискового пространства. Такая излишняя трата пространства на диске называется внутренней фрагментацией. Чем больше размер логического блока, тем больше будет и внутренняя фрагментация.
Внешняя фрагментация. Внешняя фрагментация возникает в ситуации, когда логические блоки конкретного файла разбросаны по всему диску, что приводит к замедлению операций с данным файлом, поскольку требует большего числа движений считывающей головки диска.
1 Юнак А В., аспирант кафедры информационных систем и компьютерных технологий ВГУЭС, Специальность: 05.13.01. E-mail: [email protected]
Научный руководитель канд. хим. наук Б.К. Васильев.
В работе анализируется внешняя фрагментация файловых систем EXT3, JFS, XFS.
Любая файловая система, так или иначе, ищет компромисс между бесконтрольной фрагментацией, как в системе FAT, и полным запретом на фрагментацию, как в файловой системе ОС RT-11. Одной из проблем FAT является необходимость регулярно дефрагментировать раздел, а в файловой системе RT-11 приходилось регулярно выполнять программу squeese, которая записывает друг за другом, последовательно, все файлы, разбросанные по диску. Фрагментация FAT приводит к снижению производительности ввода/вывода, а запрет на фрагментацию в RT-11 делает невозможным запись на диск большого файла, даже если на диске было полно участков с размером хоть чуть меньше его длины, так как файл должен был быть записан только в последовательно расположенные блоки.
Фрагментация снижает быстродействие ввода/вывода, так как операции считывания и записи замедляются излишними передвижениями головок дисков. Однако для многих приложений это не слишком важно, в большинстве случаев доступ к диску имеют сразу несколько приложений, что приводит к одновременной обработке нескольких файлов. Linux минимизирует перемещения головок, так организуя доступ на чтение и запись, что большинство файлов обрабатываются из кэша. Благодаря опережающему считыванию (readahead) файлов, данные зачастую бывают прочитаны прежде, чем приложение запросит их.
Однако, при интенсивном вводе/выводе, например при постоянной записи и считывании большого количества данных, влияние фрагментации на производительность системы может стать вполне заметным.
Тестирование файловых систем
Бытует мнение, что файловые системы для OS GNU/Linux не испытывают фрагментации, либо их производительность не сильно страдает от фрагментации, в то время, как стандарт де-факто для систем на базе NT — файловая систем NTFS весьма подвержена фрагментации. В отличие от файловых систем ОС Windows таких как FAT32, NTFS большинство файловых систем ОС Linux при копировании файлов располагает блоки не в ближайшем к головке жесткого диска свободном пространстве, а предварительно находит группу смежных блоков и туда записывает информацию. Также файловые системы, работающие на базе ОС Linux, при копировании новой информации на устройство хранения информации сначала пытаются найти свободное место на жестком диске, а затем если его не находят, начинают разбивать файлы на фрагменты. Однако при таком подходе файловая система быстро использует все пространство на устройстве хранения информации.
Для проверки уровня фрагментации файловых систем на базе ОС Linux используется ОС Linux OpenSUSE 10.2. Эта операционная система установлена с помощью программы VMWare версии 6.0.1 сборка 55017. Для проверки фрагментированности файловых систем созданы 2 виртуальных жестких диска объемом 20 ГБ. Один из них используется системой для своих нужд, а второй используется для данной работы. Объем реального жесткого диска равен 750 ГБ, а дисковый кэш равен 8 МБ. Уровень фрагментации тестируется на основе файловых систем: EXT3, JFS, XFS объемом 6000 МБ каждая. Файловая система EXT3 создана посредством программы mke2fs версии 1.39. JFS создана программой mkfs.jfs версии 1.1.11 от 5 июня 2006 г. XFS была установлена с помощью программы mkfs.xfs версии 2.8.11. Средством проверки фрагментации является скрипт написанный на языке perl, который находит все файлы файловой системы, а также выбирает количество фрагментов каждого файла.
Тестирование уровня фрагментации систем предполагает несколько действий после каждого из которых производится проверка уровня фрагментации:
1. Копирование на тестируемую файловую систему 4-х файлов размером 1 467 308 032 байта.
2. Очистка диска и копирование на тестируемую файловую систему 20 файлов размером 106 041 348 байт.
3. Очистка диска и копирование на тестируемую файловую систему исходных текстов ядра linux версии 2.6.18.2-34 общим объемом 508 117 767 байт.
4. Очистка диска и копирование на тестируемую файловую систему 3-х файлов размером 1 467 308 032 байта.
5. Копирование на тестируемую файловую систему 5 файлов размером 106 041 348 байт.
6. Копирование на тестируемую файловую систему исходных текстов ядра linux версии 2.6.18.2-34 общим объемом 508 117 767 байт.
Тестирование файловой системы EXT3
Ext3 — это стандартная файловая система для ОС Linux; она надежная, быстрая, устойчивая к ошибкам, и подходит для любой сферы использования. Проведем тесты фрагментации этой файловой системы.
Тесты:
1. Копирование на файловую систему ext3 4-х файлов размером 1 467 308 032 байта. Результатом этого теста является: 80% фрагментированных файлов и в среднем 15,8 фрагментов на 1 файл.
2. Очистка диска и копирование на файловую систему ext3 20 файлов размером 106 041 348 байт. В результате этого теста файловая система фрагментирована на 90,48%, а среднее число фрагментов используемым одним файлом равно 2,43.
3. Очистка диска и копирование на тестируемую файловую систему исходных текстов ядра linux версии 2.6.18.2-34 общим объемом 508 117 767 байт. Результат: 0% фрагментированных файлов, файлы занимают по 1 фрагмент каждый.
4. Очистка диска и копирование на тестируемую файловую систему 3-х файлов размером 1 467 308 032 байта. Результатом этого теста является: 75% фрагментированных файлов, 14,5 в среднем фрагментов занимает каждый файл.
5. Копирование на тестируемую файловую систему 5 файлов размером 106 041 348 байт. В результате данного теста 80% фрагментированных файлов и 6,8 фрагментов в среднем занимает 1 файл.
6. Копирование на тестируемую файловую систему исходных текстов ядра linux версии 2.6.18.2-34 общим объемом 508 117 767 байт. Результат: 0,02% фрагментированных файлов, 1 файл в среднем занимает 1 фрагмент.
Файловые системы ext2 и ext3, часто используемые на linux, пытаются свести фрагментацию к минимуму. Эти системы держат все блоки файла недалеко друг от друга. Это делается с помощью предварительного размещения блоков для файлов перед их использованием. Когда файл увеличивается в размерах, несколько блоков уже зарезервировано - все это снижает фрагментацию. Хотя изредка и необходимо анализировать фрагментацию диска, дефрагментацию проводить не приходится. Исключение существует для файлов, которые постоянно увеличиваются в размерах, исчерпывая тем самым количество зарезервированных блоков.
Тестирование файловой системы JFS
JFS отличается высокой пропускной способностью и надежностью, удовлетворяющей требованиям серверов. В этой файловой системе используется адресная структура, базированная на расширениях (extent-based), и расположение блоков в кластерах, что позволяет создавать компактные, эффективные и масштабируемые структуры расположения файлов.
Тесты:
1. Копирование на файловую систему jfs 4-х файлов размером 1 467 308 032 байта. Результатом этого теста является: 80% фрагментированных файлов и в среднем 73 фрагмента на 1 файл.
2. Очистка диска и копирование на файловую систему jfs 20 файлов размером 106 041 348 байт. В результате этого теста файловая система фрагментирована на 74,76%, а среднее число фрагментов используемым одним файлом равно 1,04.
3. Очистка диска и копирование на тестируемую файловую систему исходных текстов ядра linux версии 2.6.18.2-34 общим объемом 508 117 767 байт. Результат: 1,23% фрагментированных файлов, файлы занимают в среднем по 1,01 фрагмента каждый.
4. Очистка диска и копирование на тестируемую файловую систему 3-х файлов размером 1 467 308 032 байта. Результатом этого теста является: 75% фрагментированных файлов, 66,5 в среднем фрагментов занимает каждый файл.
5. Копирование на тестируемую файловую систему 5 файлов размером 106 041 348 байт. В результате данного теста 88,9% фрагментированных файлов и 33,7 фрагментов в среднем занимает 1 файл.
6. Копирование на тестируемую файловую систему исходных текстов ядра linux версии 2.6.18.2-34 общим объемом 508 117 767 байт. Результат: 1,18% фрагментированных файлов, 1 файл в среднем занимает 1,02 фрагмента.
Все пространство файловой системы разделено на логические блоки, содержащие данные файлов или каталогов. Для JFS размер логического блока всегда составляет 4096 байт (4K), но может быть опционально поделен на меньшие фрагменты (512, 1024 или 2048 байт). Это приемлемое значение по умолчанию, но это означает, что файловая система не может выделить менее 4K для хранения файла. Если файловая система хранит большое количество небольших файлов (< 2K), бесполезная трата дискового пространства становится очевидной. Существует подобная проблема в FAT (размер кластера в 32K ведет к значительным расходам пространства, иногда более 50%). JFS избегает этого, допуская деление логических блоков на меньшие элементы, размером в 512 байт (это размер сектора жесткого диска и невозможно считывать или записывать менее 512 байт с/на диск). Тем не менее, пользователи должны быть осторожными, поскольку фрагментация приводит к дополнительным потерям и, следовательно, замедляет доступ к диску. Рекомендуется использовать фрагменты меньше 4K только в том случае, если пользователи уверены, что будут сохранять большое количество маленьких файлов на файловой системе.
Тестирование файловой системы XFS
XFS - это локальная файловая система нового поколения для рабочих станций и серверов SGI. Это ФС общего назначения с типичным для UNIX интерфейсом, которая одинаково хорошо работает как на рабочих станциях с 16 Mb оперативной памяти и единственным жестким диском, так и на многопроцессорных серверах с гигабайтами RAM и терабайтами дискового пространства.
XFS использует систему распределения места, основанную на расширителях, и имеет такие возможности, как delayed allocation, space pre-allocation и space coalescing on deletion. Данные располагаются с использованием самых больших расширителей из имеющихся, и это позволяет записывать файлы огромной длины. Чтобы сделать управление огромными количествами непрерывных фрагментов эффективным, XFS использует очень большие описания для расширителей. Каждое описание может включать в себя информацию о блоках файловой системы в количестве до 2 миллионов. Описание больших количеств блоков разгружает процессор от такой работы, как поиск записей в extent map, чтобы определить, являются ли блоки непрерывными. Теперь можно просто прочитать длину всего расширителя, который уже является непрерывным, а не смотреть на каждую запись, определяя, является ли она продолжением предыдущей записи.
Тесты:
1. Копирование на файловую систему xfs 4-х файлов размером 1 467 308 032 байта. Результатом этого теста является: 80% фрагментированных файлов и в среднем 4,2 фрагмента на 1 файл.
2. Очистка диска и копирование на файловую систему xfs 20 файлов размером 106 041 348 байт. В результате этого теста файловая система фрагментирована на 76,19%, а среднее число фрагментов используемым одним файлом равно 1,95.
3. Очистка диска и копирование на тестируемую файловую систему исходных текстов ядра linux версии 2.6.18.2-34 общим объемом 508 117 767 байт. Результат: 0% фрагментированных файлов, файлы занимают в среднем по 1 фрагменту каждый.
4. Очистка диска и копирование на тестируемую файловую систему 3-х файлов размером 1 467 308 032 байта. Результатом этого теста является: 75% фрагментированных файлов, 3,25 в среднем фрагментов занимает каждый файл.
5. Копирование на тестируемую файловую систему 5 файлов размером 106 041 348 байт. В результате данного теста 77,78% фрагментированных файлов и 2,67 фрагментов в среднем занимает 1 файл.
6. Копирование на тестируемую файловую систему исходных текстов ядра linux
версии 2.6.18.2-34 общим объемом 508 117 767 байт.
Результат: 0,02% фрагментированных файлов, 1 файл в среднем занимает 1,0003 фрагмента.
В файловой системе XFS данные на диск не пишутся до тех пор, пока хватает памяти. Соответственно есть возможность перегруппировать данные при записи, чтобы не было фрагментации. XFS фрагментируются так же как и любая другая файловая система. Более того, имеет штатные средства онлайн дефрагментации.
Анализ фрагментации файловых систем ОС Linux После проведения тестов, данные необходимо свести в одну таблицу, чтобы проще и нагляднее анализировать (таблица 1).
Таблица 1.
Сравнительная таблица уровней фрагментации файловых систем
ФС/ № теста 1 2 3 4 5 6
Фф % Фр Фф % Фр Фф % Фр Фф % Фр Фф % Фр Фф % Фр
EXT3 80 15,8 90,5 2,43 0 1 75 14,5 80 6,8 0,02 1
JFS 80 73 74,8 1,04 1,23 1,01 75 66,5 88,9 33,7 1,18 1,02
XFS 80 4,2 76,2 1,95 0 1 75 3,25 77,8 2,67 0,02 1
Первые три теста показывают уровень фрагментации файлов отдельно: сначала большие файлы, потом среднего размера и третий тест - много файлов маленького размера.
Из сравнительной таблицы уровней фрагментации видно, что по тесту №1 по уровню фрагментации файлов все три системы работают одинаково, а вот по количеству фрагментов лидирует файловая система XFS, затем идет ЕХТ3 и самый худший показатель у JFS.
Во втором тесте - копирование 20 файлов среднего размера - по уровню фрагментации, а также по количеству фрагментов занимаемым в среднем одним файлом лидирует файловая система JFS. Второе место по уровню фрагментированности занимает XFS, а последний результат у файловой системы ЕХТ3.
Третий тест показывает, как файловая система распределяет множество файлов маленького размера. В этом тесте ЕХТ3 и XFS находятся на одном уровне, а файловая система JFS немного хуже работает с данным типом файлов.
Тесты под номерами 4, 5, 6 показывают, как файловая система распределяет и фрагментирует большие, средние и маленькие файлы вместе.
Тест номер четыре: показатели почти такие же, как и в первом тесте, лидер XFS за ним EXT3 и самый большой уровень фрагментированности демонстрирует JFS.
В тесте № 5 - копирование 20 файлов среднего размера на файловую систему, где уже есть 3 файла большого размера - лучший показатель фрагментации показывает XFS, чуть хуже размещает файлы среднего размера EXT3 и последний показатель у JFS.
Последний тест показывает уровень фрагментации после копирования на файловую систему всех файлов. XFS и EXT3 показывают одинаковый результат, а JFS немного отстает от них и хуже фрагментирует эти файлы.
Изучая выше перечисленные показатели можно прийти к выводам:
1. С большими файлами все системы работают почти одинаково, только XFS создает меньше, других файловых систем, фрагментов на каждый файл, что теоретически может ускорить работу с файлами.
2. С файлами среднего размера лучше справляется файловая система JFS, но только если работать с файлами среднего размера.
3. Файлы маленького размера системы XFS и EXT3 фрагментируют одинаково, а JFS хуже.
4. По большинству тестов лидирует файловая система XFS, а JFS отстает от других не намного.
Из данной работы можно сделать вывод, что файловая система XFS фрагментирует файлы меньше чем другие представленные файловые системы.
Литература
1. Файловая система NTFS — http://www.ixbt.com/storage/ntfs.html. [Электронный ресурс].
2. Журнальные файловые системы. — http://www.osp.ru/os/2001/09/180399. [Электронный ресурс].
3. Фрагментация. — http://ru.wikipedia.org/wiki/Фрагментация. [Электронный ресурс]