1

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

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

Но могут ли части, которые не часто (или вообще не используются), перемещаться куда-нибудь, а наиболее часто используемые части размещаются рядом друг с другом последовательно в том порядке, в котором приложение читает их большую часть времени, чтобы улучшить свою производительность?

Я понимаю, что эта проблема может быть решена с помощью жестких дисков, которые имеют более короткое время доступа к очень разным местам, например, к твердотельным накопителям, но разве они все еще не затронуты этим?

Имеет ли смысл практично перемещать данные приложения, как это, чтобы еще больше сократить время на диске, а не идеально дефрагментированное состояние?

3 ответа3

4

Хорошо, давайте возьмем простой вопрос здесь. SSD особенно хороши при случайном чтении. Пока вы читаете полный блок, не имеет значения, делаете ли вы это непосредственно перед блоком или «на полпути через диск». Это не имеет никакого практического значения. На самом деле, вы даже не можете сказать. Ваша операционная система может думать, что она хранит данные в последовательных местах на SSD, но сам SSD вполне может сопоставить их с противоположными сторонами «хранилища». Таким образом, на SSD вам практически не нужно беспокоиться о дефрагментации файлов. Кроме. Я вернусь к этому.

Хорошо, давайте вернемся к обычным механическим дискам. Они намного быстрее при последовательном чтении, чем при случайном чтении. Гораздо быстрее.

Теперь, если я играю в Half-Life 3 и ему нужно загружать файлы данных, моему компьютеру будет намного легче, если эти файлы данных будут дефрагментированы и хранятся в непосредственной близости. Грубо (очень грубо), дефрагментация преобразует случайное чтение в последовательное чтение.

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

Но ... вы выдвигаете довольно странный сценарий. Вы предлагаете, например, что Half Life 3 должен загрузить PART файла данных карты и PART файла данных персонажа. Например, ему нужны только первые 10% файла данных карты и средние 10% файла данных символа.

В этом случае оптимальным способом хранения данных будет сохранение первых 10% данных карты, за которыми сразу следует средние 10% данных символов. Поскольку вы ничего не загружаете (в этом надуманном примере), не имеет значения, где что-то еще находится.

Так да. В этом конкретном случае было бы полезно, если бы данные были фрагментированы.

Теперь вернемся к SSD. Оказывается, твердотельные накопители должны читать и записывать страницу одновременно. Точный размер страницы зависит от SSD, но может составлять 2 КБ, 4 КБ, 8 КБ, 16 КБ или другой размер. Я хочу сказать, что если размер страницы SSD равен 16 КБ, и это минимальный размер, который вы можете загрузить, то ситуация, когда 10% данных карты и 10% необходимых вам символов находятся в одном блоке Ну, это будет быстрее. Быстрее загрузить один блок, чем два.

Так. Да, есть некоторые обстоятельства, когда преднамеренное фрагментирование данных ускоряет ваш доступ. Но трудно представить, почему вы пытаетесь оптимизировать этот случай. Действительно, большую часть времени вы хотите загрузить весь файл, а не только первые 10%. А современные операционные системы в любом случае кешируют файлы, поэтому при переходе с Half-Life 3 на другую карту есть неплохой шанс, когда данные карты уже находятся в кеше файловой системы, и вам вообще не нужно ничего загружать с диска. ,

Один интересный вариант - SSHD, гибридные диски. Это (практически) комбинации механических приводов с SSD-кешем. Насколько это актуально здесь? Ну, грубо говоря, гибридные диски будут перемещать часто доступный контент в более быструю область хранения, перемещая данные с вашего прядильного диска на часть SSD. Если вы всегда загружали первые 10% данных карты и средние 10% символьных данных и никогда не загружали что-либо еще, и если алгоритм гибридного диска был хорош, эти данные оказались бы на более быстрой части SSD. Таким образом, до некоторой степени это завершает то, что вы намереваетесь сделать. Обратите внимание, что обычный кэш файловой системы выполняет то же самое, только эффект, вероятно, быстрее, но длится только до перезагрузки.

TL; DNR: Да. А если серьезно, то это почти гарантированная бесполезная оптимизация.

0

Давайте рассмотрим, как происходит фрагментация.

Вы пишете небольшие файлы на жесткий диск. Данные записываются на первом свободном месте. Предположим, что данные не были удалены, только записаны. Данные будут отображаться следующим образом: [##########-----------------] где # используются кластеры и - являются свободными кластерами.

Теперь давайте предположим, что где-то в этих кластерах у вас есть файл, который удаляется. Внезапно ваш график выглядит так:
[#####-####-----------------]

Это, конечно, часто случается, поэтому график может выглядеть примерно так:
[##-##-#-##-#--##-#--#------]

В зависимости от файловой системы (FAT32 записывает в первое доступное пустое пространство, NTFS намного умнее в этом и пытается сохранить файлы нефрагментированными, где это возможно), в какой-то момент большой файл не может быть сохранен только в одном пустом сегменте. Этот файл затем будет распространен по жесткому диску, например:
[##F##F#F##-#--##-#--#------] где F - это файл.

NTFS уже будет пытаться хранить файлы в непосредственной близости от себя и пытается бороться с фрагментацией, где это возможно.

Но все это сводится к тому, что не имеет значения, если вы намеренно фрагментируете файлы, даже если эти файлы используются не часто, они всегда будут представлять возможность фрагментации в любой момент времени. Я предполагаю, что если бы можно было переместить файлы, которые не используются, в конец диска, то, возможно, было бы быстрее дефрагментировать часто используемые файлы (что может фактически сделать то, что NTFS уже делает), но кроме этого, ответ на Ваш вопрос прост: нет. фрагментация файлов специально не поможет. Вы даже можете хранить файлы с дефрагментацией в конце диска, и они все равно будут дефрагментированы.

0

"Фрагментации" нет. "Организация файлов для эффективности" Maaaybe, хотя я сомневаюсь, что это работает. Ваш план основан на нескольких посылках.

  1. ОС не кешируется. Который, как правило, будет. Windows делает. Обычно хранимые файлы, кэшируемые в оперативной памяти, будут на порядок быстрее.
  2. Вы можете определенно размещать файлы в определенных частях диска. Есть инструменты, которые делают это с помощью API-интерфейса дефрагментации - jkdefrag/mydefrag сделал это с впечатляющими результатами. Некоторое время Это был удобный трюк, чтобы получить систему, которая была необычайно медленной в использовании.
  3. Ваш накопитель имеет определенное (небольшое) количество внутреннего плунжера, чтобы сгладить подобные вещи.
  4. Вы предполагаете, что ваши файлы хранятся в статических местах и / или накладные расходы на хранение этих файлов для оптимизированного времени поиска невелики. Никто, кажется, не делает это таким образом.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .