7. Сравнение NTFS и FAT
Скорость
доступа к файлам
С точки зрения
перспективности, функциональных возможностей, безопасности и надежности NTFS
намного опережает FAT [10].
Однако сравнение
производительности этих файловых систем не дает однозначного результата, так
как производительность зависит от множества различных факторов [9,
12, 13].
Так как принципы
работы и внутренние структуры FAT намного проще, чем NTFS, при работе с
небольшими каталогами FAT будет быстрее. Однако, если содержимое каталога
настолько мало, что он полностью помещается в одну или несколько записей файла
$MFT, или если каталог очень большой, то быстрее окажется NTFS.
Скорее всего, NTFS
окажется быстрее при поиске несуществующих файлов или каталогов (т.к. при этом
не потребуется полностью просматривать содержимое каталога), при обращении к
файлам небольшого размера (объемом порядка сотен байт), а также в случае
сильной фрагментации диска.
Для увеличения
производительности NTFS можно увеличить размер кластера, но это может привести
к неэкономному использованию дискового пространства при хранении большого
количества файлов, размер которых превышает 1-2 Кбайт и составляет десятки
Кбайт.
При увеличении
размера кластера до 64 Кбайт можно получить максимальное повышение
производительности, но придется отказаться от упаковки файлов и применения
утилит дефрагментации [11, 12].
При
упаковке файлов, расположенных на дисках небольшого размера (порядка 4 Гбайт),
производительность может возрасти, а при сжатии дисков большого размера –
уменьшиться.
В
любом случае упаковка приведет к появлению дополнительной нагрузки на центральный
процессор.
Поиск данных файла
Самое фундаментальное свойство
любой файловой системы, влияющее на быстродействие всех дисковых операций –
структура организации и хранения информации. Выяснение того, в каких областях
диска хранится тот или иной фрагмент файла – процесс, который имеет
принципиально разное воплощение в различных файловых системах. Это лишь поиск
информации о местоположении файла – доступ к самим данным, фрагментированы они
или нет, здесь уже не рассматривается, так как этот процесс совершенно одинаков
для всех систем.
Рассматриваются действия,
которые приходится выполнять системе перед доступом к реальным данным файлов.
На что влияет этот
параметр: на скорость навигации
по файлу (доступ к произвольному фрагменту файла). Любая работа с большими
файлами данных и документов, если их размер – несколько мегабайт и более. Этот
параметр показывает, насколько сильно сама файловая система
страдает от фрагментации файлов.
NTFS способна обеспечить
быстрый поиск фрагментов, поскольку вся информация хранится в нескольких очень
компактных записях (типичный размер – несколько килобайт). Если файл очень
сильно фрагментирован (содержит большое число фрагментов) – NTFS придется
использовать много записей, что часто заставит хранить их в разных местах.
Лишние движения головок при поиске этих данных, в таком случае, приведут к
сильному замедлению процесса поиска данных о местоположении файла.
FAT32, из-за большой области
самой таблицы размещения будет испытывать огромные трудности, если фрагменты
файла разбросаны по всему диску. Так как
FAT представляет собой мини-образ диска, куда включен каждый его
кластер, то для доступа к фрагменту файла в системе FAT16 и FAT32 приходится
обращаться к соответствующей части FAT. Если файл, к примеру, расположен в трех
фрагментах – в начале диска, в середине, и в конце – то в системе FAT нам
придется обратиться к фрагменту FAT также в его начале, в середине и в конце. В
системе FAT16, где максимальный размер области FAT составляет 128 Кбайт, это не
составит проблемы – вся область FAT просто хранится в памяти, или же
считывается с диска целиком за один проход и буферизируется. FAT32 же,
напротив, имеет типичный размер области FAT порядка сотен килобайт, а на
больших дисках – даже несколько мегабайт. Если файл расположен в разных частях
диска – это вынуждает систему совершать движения головок винчестера столько
раз, сколько групп фрагментов в разных областях имеет файл, а это очень и очень
сильно замедляет процесс поиска фрагментов файла.
Вывод: Самая быстрая система – FAT16, она никогда не
заставит систему делать лишние дисковые операции для данной цели. Затем идет
NTFS – эта система также не требует чтения лишней информации, по крайней мере,
до того момента, пока файл имеет разумное число фрагментов. FAT32 испытывает
огромные трудности, вплоть до чтения лишних сотен килобайт из области FAT, если
файл разбросан по разным областям диска. Работа с внушительными по размеру
файлами на FAT32 в любом случае сопряжена с огромными трудностями – понять, в
каком месте на диске расположен тот или иной фрагмент файла, можно лишь изучив
всю последовательность кластеров файла с самого начала, обрабатывая за один раз
один кластер (через каждые 4 Кбайт файла в типичной системе). Стоит отметить,
что если файл фрагментирован, но лежит компактной кучей фрагментов – FAT32 всё
же не испытывает больших трудностей, так как физический доступ к области FAT
будет также компактен и буферизован.
Поиск свободного места
Данная операция производится в
том случае, если файл нужно создать с нуля или скопировать на диск. Поиск места
под физические данные файла зависит от того, как хранится информация о занятых
участках диска.
На что влияет этот
параметр: на скорость создания
файлов, особенно больших. Сохранение или создание в реальном времени больших
мультимедийных файлов (.wav, к примеру), копирование больших объемов информации,
т.д. Этот параметр показывает, насколько быстро система сможет найти место для
записи на диск новых данных, и какие операции ей придется для этого проделать.
Для определения того, свободен
ли данный кластер или нет, системы на основе FAT должны просмотреть одну запись
FAT, соответствующую этому кластеру. Размер одной записи FAT16 составляет 16
бит, одной записи FAT32 – 32 бита. Для поиска свободного места на диске может
потребоваться просмотреть почти весь FAT – это 128 Кбайт (максимум) для FAT16 и
до нескольких мегабайт – в FAT32. Для
того, чтобы не превращать поиск свободного места в катастрофу (для FAT32),
операционной системе приходится идти на различные ухищрения.
NTFS имеет битовую карту
свободного места, одному кластеру соответствует 1 бит. Для поиска свободного
места на диске приходится оценивать объемы в десятки раз меньшие, чем в
системах FAT и FAT32.
Вывод: NTFS имеет наиболее эффективную систему нахождения свободного
места. Стоит отметить, что FAT16 или FAT32 действуют очень медленно, поэтому
для нахождения свободного места в этих системах применяются различные методы
оптимизации, в результате чего и там достигается приемлемая скорость. (Поиск
свободного места при работе в DOS на FAT32 – катастрофический по скорости
процесс, поскольку никакая оптимизация невозможна без поддержки хоть сколь
серьезной операционной системы).
Работа с каталогами и файлами
Каждая файловая система
выполняет элементарные операции с файлами – доступ, удаление, создание,
перемещение и т.д. Скорость работы этих операций зависит от принципов
организации хранения данных об отдельных файлах и от устройства структур
каталогов.
На что влияет этот
параметр: на скорость
осуществления любых операций с файлом, в том числе – на скорость любой операции
доступа к файлу, особенно – в каталогах с большим числом файлов (тысячи).
FAT16 и FAT32 имеют очень
компактные каталоги, размер каждой записи которых предельно мал. Более того,
из-за сложившейся исторически системы хранения длинных имен файлов (более 11
символов), в каталогах систем FAT используется не очень эффективная и на первый
взгляд неудачная, но зато очень экономная структура хранения этих самих длинных
имен файлов. Работа с каталогами FAT производится достаточно быстро, так как в
подавляющем числе случаев каталог (файл данных каталога) не фрагментирован и
находится на диске в одном месте.
Единственная проблема, которая
может существенно понизить скорость работы каталогов FAT – большое количество
файлов в одном каталоге (порядка тысячи или более). Система хранения данных –
линейный массив - не позволяет организовать эффективный поиск файлов в таком
каталоге, и для нахождения данного файла приходится перебирать большой объем данных
(в среднем – половину файла каталога).
NTFS использует гораздо более
эффективный способ адресации – бинарное дерево. Эта организация позволяет
эффективно работать с каталогами любого размера – каталогам NTFS не страшно
увеличение количества файлов в одном каталоге и до десятков тысяч.
Стоит заметить, что сам
каталог NTFS представляет собой гораздо менее компактную
структуру, нежели каталог FAT – это связано с гораздо большим (в несколько раз)
размером одной записи каталога. Данное обстоятельство приводит к тому, что
каталоги на томе NTFS в подавляющем числе случаев сильно фрагментированы.
Размер типичного каталога на FAT-е укладывается в один кластер, тогда как сотня
файлов (и даже меньше) в каталоге на NTFS уже приводит к размеру файла
каталога, превышающему типичный размер одного кластера.
Это, в свою очередь, почти
гарантирует фрагментацию файла каталога, что, довольно часто сводит на нет все
преимущества гораздо более эффективной организации самих данных.
Вывод: структура каталогов на NTFS теоретически гораздо
эффективнее, но при размере каталога в несколько сотен файлов это практически
не имеет значения. Фрагментация каталогов NTFS уже уверенно наступает уже при
таком размере каталога. Для малых и средних каталогов NTFS, как это не печально,
имеет на практике меньшее быстродействие.
Преимущества каталогов NTFS
становятся реальными и неоспоримыми только в том случае, если в одно каталоге
присутствуют тысячи файлов – в этом случае быстродействие компенсирует фрагментированность
самого каталога и трудности с физическим обращением к данным (в первый раз – далее
каталог кэшируется). Напряженная работа с каталогами, содержащими порядка
тысячи и более файлов, проходит на NTFS буквально в несколько раз быстрее, а
иногда выигрыш в скорости по сравнению с FAT и FAT32 достигает десятков раз.
К сожалению, как это часто
бывает во всевозможных компьютерных вопросах, практика не очень хорошо
согласуется с теорией. NTFS, имеющая, казалось бы, очевидные преимущества в
структуре, показывает не настолько уж фантастические результаты, как можно было
бы ожидать. Какие еще соображения влияют на быстродействие файловой системы?
Каждый из рассматриваемых далее вопросов вносит свой вклад в итоговое быстродействие.
Однако, реальное быстродействие – результат действия сразу всех факторов.
Кэширование
Очень многие данные
современных файловых систем кэшируются или буферизируются в памяти компьютера,
что позволяет избежать лишних операций физического чтения данных с диска. Для
нормальной (высокопроизводительной) работы системы в кэше приходится хранить
следующие типы информации:
-
данные о физическом
местоположении всех открытых файлов. Это, прежде всего, позволит обращаться к
системным файлам и библиотекам, доступ к которым идет буквально постоянно, без
чтения служебной (не относящейся к самим файлам) информации с диска. Это же
относится к тем файлам, которые исполняются в данный момент – т.е. к
выполняемым модулям (.exe и .dll) активных процессов в системе. В эту категорию
попадают также файлы системы, с которыми производится работа (прежде всего
реестр и виртуальная память, различные .ini файлы, а также файлы документов и
приложений);
-
наиболее часто
используемые каталоги. К ним можно отнести рабочий стол, меню «пуск», системные
каталоги, каталоги кэша интернета, и т.п.;
-
данные о свободном месте
диска – т.е. та информация, которая позволит найти место для сохранения на диск
новых данных. В случае, если этот базовый объем информации не будет доступен
прямо в оперативной памяти, системе придется совершать множество ненужных
операций еще до того, как она начнет работу с реальными данными. Возникает
вопрос – каким объемом свободной оперативной памяти надо располагать, чтобы
эффективно работать с той или иной файловой системой;
-
FAT16 имеет очень мало
данных, отвечающих за организацию файловой системы. Из служебных областей можно
выделить только саму область FAT, которая не может превышать 128 Кбайт (!) –
эта область отвечает и за поиск фрагментов файлов, и за поиск свободного места
на томе. Каталоги системы FAT также очень компактны. Общий объем памяти,
необходимый для предельно эффективной работы с FAT-ом, может колебаться от сотни
килобайт и до мегабайта-другого – при условии огромного числа и размера
каталогов, с которыми ведется работа;
-
FAT32 отличается от
FAT16 лишь тем, что сама область FAT может иметь более внушительные размеры. На
томах порядка 5 – 10 Гбайт область FAT может занимать объем в несколько Мбайт,
и это уже очень внушительный объем, надежно кэшировать который не
представляется возможным. Тем не менее, область FAT, а вернее те фрагменты,
которые отвечают за местоположение рабочих файлов, в подавляющем большинстве
систем находятся в памяти машины – на это расходуется порядка нескольких Мбайт
оперативной памяти;
-
NTFS предъявляет гораздо
большие требования к памяти, необходимой для работы системы. Прежде всего,
кэширование сильно затрудняет большие размеры каталогов. Размер одних только
каталогов, с которыми активно ведет работу система, может доходить до
нескольких Мбайт и даже десятков Мбайт. Кроме этого, необходимо кэшировать
карту свободного места тома (сотни Кбайт) и записи MFT для файлов, с которыми
осуществляется работа (в типичной системе – по 1 Кбайт на каждый файл). К счастью,
NTFS имеет удачную систему хранения данных, которая не приводит к увеличению
каких-либо фиксированных областей при увеличении объема диска. Количество
данных, с которым оперирует система на основе NTFS, практически не зависит от
объема тома, и основной вклад в объемы данных, которые необходимо кэшировать,
вносят каталоги. Тем не менее, уже этого вполне достаточно для того, чтобы
только минимальный объем данных, необходимых для кэширования
базовых областей NTFS, доходил до 5 – 8 Мбайт.
Необходимо отметить, что NTFS
теряет огромное количество своего теоретического быстродействия из-за
недостаточного кэширования. На системах, имеющих менее 64 Мбайт памяти,
NTFS просто не может оказаться быстрее FAT16 или FAT32.
Единственное исключение из этого правила – диски FAT32, имеющие объем десятки
Гбайт. В остальных же случаях – системы с менее чем 64 мегабайтами памяти
работают с FAT32 быстрее.
Системы с объемом памяти в 64
Мбайта, к сожалению, также не дают возможности организовать
эффективную работу с NTFS. На малых и средних дисках (до 10 Гбайт) в типичных
системах FAT32 будет работать немного быстрее. Единственное, что можно сказать
по поводу быстродействия систем с таким объемом оперативной памяти – системы,
работающие с FAT32, будут гораздо сильнее страдать от фрагментации, чем системы
на NTFS. Но если хотя бы изредка дефрагментировать диски, то FAT32, с точки
зрения быстродействия, является предпочтительным вариантом. Многие люди, тем не
менее, выбирают в таких системах NTFS – просто из-за того, что это даст некоторые
довольно важные преимущества, тогда как типичная потеря быстродействия не очень
велика.
Системы с более чем 64
Мбайтами, а особенно – со 128 Мбайт и более памяти, смогут уверенно
кэшировать абсолютно всё, что необходимо для работы систем, и вот на таких
компьютерах NTFS, скорее всего, покажет более высокое быстродействие из-за
более продуманной организации данных.
Быстродействие накопителя
Физические параметры жесткого
диска незначительно влияют на быстродействие файловой системы. Можно выделить
следующие параметры физической дисковой системы, которые по-разному влияют на
разные типы файловых систем [13]:
-
Время случайного доступа
(random seek time). К сожалению, для доступа к системным областям на типичном
диске более сложной файловой системы (NTFS) приходится совершать, в среднем,
больше движений головками диска, чем в более простых системах (FAT16 и FAT32).
Гораздо большая фрагментация каталогов, возможность фрагментации системных областей
– всё это делает диски NTFS гораздо более чувствительными к скорости считывания
произвольных областей диска. По этой причине использовать NTFS на медленных
дисках не рекомендуется, так как высокое время поиска дорожки дает еще один
плюс в пользу систем FAT.
-
Наличие Bus Mastering. Bus
Mastering – специальный режим работы драйвера и контроллера, при использовании
которого обмен с диском производится без участия процессора. Стоит отметить,
что система запаздывающего кэширования NTFS сможет действовать гораздо более
эффективно при наличии Bus Mastering, т.к. NTFS производит отложенную запись
гораздо большего числа данных. Системы без Bus Mastering в настоящее время
встречаются достаточно редко (обычно это накопители или контроллеры, работающие
в режиме PIO3 или PIO4) и их использование приведет к снижению быстродействия,
особенно при операциях модификации каталогов (например, активной работе в
интернете – работа с кэшем интернета).
-
Кэширование как чтения,
так и записи на уровне жестких дисков (объем буфера HDD – от 2 Мбайт до 8 Мбайт
в современных дисках) – фактор, который будет более полезен системам на основе
FAT. NTFS из соображений надежности хранения информации осуществляет
модификацию системных областей с флагом «не кэшировать запись», поэтому
быстродействие системы NTFS слабо зависит от возможности кэширования самого
HDD. Системы FAT, напротив, получат некоторый плюс от кэширования записи на
физическом уровне. Стоит отметить, что, вообще говоря, всерьез принимать в
расчет размер буфера HDD при оценке быстродействия тех или иных файловых систем
не стоит.
Подводя краткий итог влиянию
быстродействия диска и контроллера на быстродействия системы в целом, можно
сказать так: NTFS страдает от медленных дисков гораздо сильнее, чем FAT.
Размер кластера
Размер кластера в файловых системах FAT32 и NTFS можно
задавать при форматировании практически произвольно. Прежде всего, надо сказать,
что больший размер кластера – это практически всегда большее
быстродействие. Размер кластера на томе NTFS, однако, имеет меньшее влияние на
быстродействие, чем размер кластера для системы FAT32.
-
Типичный размер кластера
для NTFS – 4 Кбайта. Стоит отметить, что с большим размером кластера
отключается встроенная в файловую систему возможность сжатия индивидуальных
файлов, а также перестает работать встроенный API дефрагментации. Оптимальным с
точки зрения быстродействия, по крайней мере, для средних и больших файлов,
считается (самой Microsoft) размер 16 Кбайт. Увеличивать размер далее неразумно
из-за слишком больших расходов на неэффективность хранения данных и из-за мизерного
дальнейшего увеличения быстродействия. Можно повысить быстродействие NTFS ценой
потери возможности сжатия. Но это даст довольно скромный прирост
быстродействия, который часто не стоит даже уменьшения эффективности размещения
файлов на диске.
-
Быстродействие системы
FAT32, напротив, можно довольно существенно повысить, увеличив размер кластера.
Если в NTFS размер кластера почти не влияет на размер и характер данных
системных областей, то в системе FAT увеличивая кластер в два раза, мы сокращаем
область FAT в те же два раза. В типичной системе FAT32 эта очень важная для
быстродействия область занимает несколько Мбайт. Сокращение области FAT в
несколько раз даст заметное увеличение быстродействия, так как объем системных
данных файловой системы сильно сократиться – уменьшается и время, затрачиваемое
на чтение данных о расположении файлов, и объем оперативной памяти, необходимый
для буферизирования этой информации. Увеличение объема кластера для систем
FAT32 от 4 Кб до 8 или даже до 16 Кб
для больших внешних запоминающих устройств (десяток и сотен гигабайт) – достаточно
разумный шаг.
NTFS
является сложной системой, поэтому, в отличие от FAT16 и FAT32, имеются и
другие факторы, которые могут привести к существенному замедлению работы NTFS:
-
диск NTFS был получен
преобразованием раздела FAT16 или FAT32 (команда convert). Данная процедура в
большинстве случаев сильно замедляет быстродействие, так как структура
служебных областей NTFS получится очень фрагментированной;
-
активная работа с
диском, заполненным более чем на 80% – 90%, представляет собой случай,
значительно замедляющий работу NTFS, так как фрагментация файлов и, самое
главное, служебных областей, будет расти очень быстро.
Необходимо отметить, что
основной фактор, от которого зависит быстродействие файловой системы – это
объем оперативной памяти машины (ПК, ноутбука, нетбука, планшета).