[Перевод] Ускоряет ли освобождение дискового пространства ваш компьютер?
Это перевод ответа на вопрос о влиянии свободного пространства на диске на производительность с сайта superuser.com — прим. переводчикаОт автора: Похоже, я случайно написал целую книгу. Налейте себе чашку кофе перед чтением.
Ускоряет ли освобождение дискового пространства ваш компьютер?
Освобождение дискового пространства не ускоряет компьютер, по крайней мере не само по себе. Это действительно распространённый миф. Этот миф так распространён, потому что заполнение вашего жёсткого диска часто происходит одновременно с другими процессами, которые традиционно могут замедлить† ваш компьютер. Производительность SSD может снижаться по мере заполнения, однако это сравнительно новая проблема, свойственная SSD, и, в действительности, малозаметная для простых пользователей. В общем случае, недостаток свободного места — просто красная тряпка для быка (отвлекает внимание — прим. переводчика). Прим. автора: † «Замедление» — термин с весьма широкой трактовкой. Здесь я использую его в отношении процессов связанных с I/O (т.е. если ваш компьютер занимается чисто вычислениями, содержимое диска не оказывает никакого влияния), либо связанных с процессором и конкурирующих с процессами потребляющим много процессорных ресурсов (т.е. антивирусом, сканирующим большое количество файлов)
Например, такие явления как:
Фрагментация файлов. Фрагментация файлов является проблемо醆, однако отсутствие свободного места, хоть и является одним из многих факторов, не является единственной причиной фрагментации. Основные моменты: Прим. автора: †† Фрагментация влияет на SSD за счёт того что операции последовательного чтения обычно значительно быстрее чем случайный доступ, хотя для SSD не существует тех же ограничений, что для механических устройств (даже в этом случае, отсутствие фрагментации не гарантирует последовательного доступа в силу распределения износа и подобных процессов). Однако, практически в любом типовом сценарии использования, это не является проблемой. Различия в производительности SSD связанные с фрагментацией обычно незаметны для процессов запуска приложений, загрузки компьютера и прочих.
Вероятность фрагментации файла не связана с объёмом свободного места на диске. Она зависит от размера наибольшего непрерывного блока свободного пространства на диске (т.е. «пробелов» свободного пространства), который ограничен сверху объёмом свободного пространства. Другой зависимостью является метод, используемый файловой системой при размещении файлов (об этом далее).Например: Если на диске занято 95% пространства и всё что свободно представлено одним непрерывным блоком, то у новый файл будет фрагментирован с вероятностью 0% (если, конечно нормальная файловая система не фрагментирует файлы специально — прим. автора) (также и вероятность фрагментации расширяемого файла не зависит от объёма свободного пространства). С другой стороны, диск, заполненный на 5% данными равномерно распределёнными по нему имеет очень высокую вероятность фрагментации. Обратите внимание, что фрагментация файлов влияет на производительность только когда осуществляется доступ к этим файлам. Например: У вас есть хороший, дефрагментированный диск с большим количеством свободных «пробелов» на нём. Типичная ситуация. Всё работает хорошо. Однако, в какой-то момент вы приходите к ситуации когда больше не осталось больших свободных блоков. Вы скачиваете большой фильм, и этот файл оказывается сильно фрагментирован. Это не замедлит ваш компьютер. Файлы ваших приложений и прочие, что были в полном порядке, не станут моментально фрагментированными. Фильм конечно может дольше грузиться (однако, типичные битрейты фильмов настолько значительно ниже скорости чтения жёстких дисков, что вероятно это пройдёт незамеченным), также это может сказаться на производительности I/O пока фильм загружается, но ничего более не изменится. Хотя фрагментация и является проблемой, часто проблема компенсируется кэшированием и буферизацией со стороны операционной системы и аппаратного обеспечения. Отложенная запись, упреждающее чтение и прочее помогают решить проблемы, вызываемые фрагментацией. В общем случае вы не замечаете ничего, пока уровень фрагментации не станет слишком высок (я даже рискну сказать, что пока ваш файл подкачки не фрагментирован, вы не заметите ничего) Другой пример — Поисковая индексация. Предположим, что у вас включена автоматическая индексация, и операционная система не слишком хорошо её реализует. По мере того как вы сохраняете всё больше индексируемых файлов на свой компьютер (документы и тому подобное), индексирование начинает занимать всё больше времени и может начать оказывать заметное влияние на наблюдаемую производительность компьютера в ходе своей работы, съедая одновременно I/O и процессорное время. Это не связано со свободным пространством, но связано с количеством индексируемых данных. Однако исчерпание дискового пространства происходит одновременно с сохранением большего количества контента, поэтому многие устанавливают неверную взаимосвязь. Антивирусы. Всё очень похоже на пример с поисковым индексом. Скажем, у вас есть антивирус, осуществляющий фоновое сканирование вашего диска. У вас появляется всё больше и больше файлов для сканирования, поиск начинает потреблять всё больше и больше ресурсов I/O и процессора, возможно мешая работе. Снова, проблема связана с количеством сканируемого контента. Больше контента — меньше свободного места, но отсутствие свободного места е является причиной проблемы. Установленные программы. Предположим, у вас установлено множество программ, которые запускаются при загрузке компьютера, что увеличивает время загрузки. Это замедление происходит потому, что загружается много программ. Одновременно, установленные программы занимают место на диске. Следовательно, объём свободного пространства уменьшается одновременно с замедлением, что может привести к неверным выводам. Можно привести множество других подобных примеров, которые дают иллюзию связи исчерпания дискового пространства и снижения производительности. Написанное выше иллюстрирует другую причину распространённости этого мифа: хотя исчерпание свободного пространства не является напрямую причиной замедления, деинсталляция различных приложений, удаление индексируемого и сканируемого контента и т.п. иногда (но не всегда, такие случаи находятся за рамками этого текста) приводит к увеличению производительности по причинам, не связанным с объёмом свободного места. При этом дисковое пространство высвобождается естественным образом. Следовательно, и здесь проявляется ложная связь между «больше свободного пространства» и «быстрый компьютер».
Смотрите: если у вас компьютер медленно работает из-за большого числа установленных программ и т.п., и вы клонируете, в точности, ваш жёсткий диск на жёсткий диск большего объёма, а затем расширите разделы, чтобы получить больше свободного пространства, компьютер не станет по мановению руки быстрее. Те же программы загружаются, те же файлы фрагментированы тем же образом, работает тот же сервис индексирования, ничто не изменяется, несмотря на увеличение свободного пространства.
Связано ли это как-то с поиском места для размещения файлов?
Нет, не связано. Здесь есть два важных момента:
Ваш жёсткий диск не занимается поиском места для размещения файлов. Жёсткий диск глуп. Он ничто. Это большой блок адресуемого хранилища, который слепо повинуется операционной системе в вопросах размещения. Современные диски оснащены сложными механизмами кэширования и буферизации, созданными чтобы предсказывать запросы операционной системы на основе накопленного людьми опыта (некоторые диски даже знают о файловых системах). Но, по сути, о диске следует думать как о большом глупом хранящем данные кирпиче, иногда обладающем функциями повышения производительности. Ваша операционная система также не занимается поиском места для размещения. Нет никакого «поиска». Большие усилия были приложены для решения этой проблемы, т.к. она является критичной для производительности файловых систем. Данные располагаются на вашем диске так как определено файловой системой, Например, FAT32 (старые компьютеры с DOS и Windows), NTFS (новые системы Windows), HFS+ (Mac), ext4 (некоторые системы Linux) и многие другие. Даже концепция «файла» или «директории» («папки» — прим. переводчика) — всего лишь плод типичной файловой системы: жёсткие диски знать не знают о таких зверях как «файлы». Детали лежат за пределами этого текста. Однако, по сути, все распространённые файловые системы содержат способ отслеживания свободного пространства на диске и потому «поиск» свободного пространства, при нормальных обстоятельствах (т.е. при нормальном состоянии файловой системы), не является необходимым. Примеры: NTFS содержит главную таблицу файлов (master file table) которая включает специальные файлы (например, $Bitmap) и множество метаданных, описывающих диск. По сути, она отслеживает последующие свободные блоки, так что файлы могут быть записаны на диск без необходимости сканировать диск каждый раз. Другой пример, ext4 имеет сущность, называемую «bitmap allocator», улучшение по сравнению с ext2 и ext3, которое помогает напрямую определить положение свободных блоков, вместо сканирования списка свободных блоков. Ext4 также поддерживает «отложенное распределение», по сути являющуюся буферизацией данных операционной системой в оперативную память перед записью на диск, с тем чтобы принять наилучшее решение по размещению для снижения фрагментации. Множество других примеров. Может дело в перемещении файлов туда-сюда для выделения достаточно длинного непрерывного места при сохранении?
Нет, этого не происходит. По крайней мере ни в одной из знакомых мне файловых систем. Файлы просто фрагментируются.
Процесс «перемещения файлов туда-сюда для выделения длинного непрерывного блока» называется дефрагментацией. Этого не происходит при записи файлов. Это происходит когда вы запускаете программу дефрагментации диска. по крайней мере, в новых системах Windows это происходит автоматически по расписанию, но запись файла никогда не является причиной для старта этого процесса.
Возможность избегать необходимости в перемещении файлов подобным образом является ключевой для производительности файловых систем, и причиной почему происходит фрагментация, а дефрагментация является отдельным шагом.
Сколько свободного места следует оставлять на диске?
Это более сложный вопрос, а я уже и так много написал.
Основные правила, которым можно следовать:
Для всех типов дисков: Самое важное — оставлять достаточно места для того чтобы самому пользоваться компьютером эффективно. Если заканчивается место, возможно вам нужен диск большего объёма. Многие утилиты дефрагментации дисков требуют наличие некоторого минимума свободного места (кажется, поставляемая в комплексе с Windows в худшем случае требует 15% свободного места) для своей работы. Они используют это место для временного хранения фрагментированных файлов, пока производится перемещение других объектов. Оставьте места для других функций операционной системы. Например, если у вашего компьютера нет большого количества физической оперативной памяти, и виртуальная память включена с файлом подкачки динамического объёма, следует оставлять достаточно свободного места для размещения файла подкачки максимального размера. Если у вас ноутбук, который вы отправляете в гибернацию (hibernation), вам потребуется достаточно свободного места для сохранения файла состояния гибернации. Такие вот вещи. Касательно SSD: Для оптимальной надёжности (и в меньшей степени производительности) на SSD должно быть некоторое свободное пространство, которое, не вдаваясь в детали, используется для равномерного распределения данных по диску, чтобы избежать постоянной записи в одно и то же место (что приводит к истощению ресурса). Концепция резервирования свободного места называется перезакладывание (over-provisionning). Это важно, но во многих SSD обязательное резервное пространство уже выделено. То есть, у дисков часто есть на несколько десятков гигабайт больше места, чем они демонстрируют операционной системе. Более дешёвые диски часто требуют, чтобы вы оставили неразмеченным часть пространства. Но при работе с дисками, у которых есть принудительное резервирование, этого не требуется. Важно отметить, что дополнительное место часто берётся только из неразмеченных областей. Поэтому не всегда будет работать вариант, когда ваш раздел занимает весь диск, а вы оставляете немного свободного места на нём. Ручное перезакладывание требует чтобы вы сделали ваш раздел меньше, чем размер диска. Сверьтесь с руководством пользователя вашего SSD. TRIM и сбор мусора (garbage collection) и подобные вещи тоже оказывают влияние, но они лежат за рамками этого текста. Лично я обычно покупаю новый диск большего размера, когда у меня остаётся примерно 20–25% свободного пространства. Это не связано с производительностью, просто, когда я дохожу до этой точки — это означает, что скоро место закончится, а значит, пора купить новый диск.
Более важным делом, нежели слежение за свободным местом, является проверить, что запланированная дефрагментация включена там, где надо (не на SSD), так что вы никогда не придёте к моменту, когда она достаточно велика чтобы оказать заметное воздействие.
Послесловие Есть ещё одна вещь, о которой следует упомянуть. Один из других ответов на этот вопрос упоминает, что полудуплексный режим SATA не даёт возможности читать и писать одновременно. Хотя это действительно так, это сильное упрощение и оно по большей части не связано с проблемами производительности, обсуждаемыми здесь. В действительности, это просто означает, что данные не могут передаваться по проводу одновременно в двух направлениях. Однако спецификация SATA включает в себя крошечные максимальные размеры блока (я думаю, около 8кБ на блок при передаче по проводу), очереди операций чтения и записи и прочее, и ничто не мешает писать данные в буфер, пока осуществляется чтение и подобные пересекающиеся операции.Любое блокирование, которое может произойти будет связано с конкуренцией за физические ресурсы, что обычно компенсируется большими объёмами кэша. Дуплексный режим SATA не имеет почти никакого отношения к данному случаю.