Это перевод ответа на вопрос о влиянии свободного пространства на диске на производительность с сайта superuser.com — прим. переводчика



От автора: Похоже, я случайно написал целую книгу. Налейте себе чашку кофе перед чтением.

Ускоряет ли освобождение дискового пространства ваш компьютер?

Освобождение дискового пространства не ускоряет компьютер, по крайней мере не само по себе. Это действительно распространённый миф. Этот миф так распространён, потому что заполнение вашего жёсткого диска часто происходит одновременно с другими процессами, которые традиционно могут замедлить* ваш компьютер. Производительность SSD может снижаться по мере заполнения, однако это сравнительно новая проблема, свойственная SSD, и, в действительности, малозаметная для простых пользователей. В общем случае, недостаток свободного места — просто красная тряпка для быка (отвлекает внимание — прим. переводчика).

Прим. автора: * «Замедление» — термин с весьма широкой трактовкой. Здесь я использую его в отношении процессов связанных с I/O (т.е. если ваш компьютер занимается чисто вычислениями, содержимое диска не оказывает никакого влияния), либо связанных с процессором и конкурирующих с процессами потребляющим много процессорных ресурсов (т.е. антивирусом, сканирующим большое количество файлов)


Например, такие явления как:
  • Фрагментация файлов. Фрагментация файлов является проблемой**, однако отсутствие свободного места, хоть и является одним из многих факторов, не является единственной причиной фрагментации. Основные моменты:
    Прим. автора: ** Фрагментация влияет на SSD за счёт того что операции последовательного чтения обычно значительно быстрее чем случайный доступ, хотя для SSD не существует тех же ограничений, что для механических устройств (даже в этом случае, отсутствие фрагментации не гарантирует последовательного доступа в силу распределения износа и подобных процессов). Однако, практически в любом типовом сценарии использования, это не является проблемой. Различия в производительности SSD связанные с фрагментацией обычно незаметны для процессов запуска приложений, загрузки компьютера и прочих.

    • Вероятность фрагментации файла не связана с объёмом свободного места на диске. Она зависит от размера наибольшего непрерывного блока свободного пространства на диске (т.е. «пробелов» свободного пространства), который ограничен сверху объёмом свободного пространства. Другой зависимостью является метод, используемый файловой системой при размещении файлов (об этом далее).
      Например: Если на диске занято 95% пространства и всё что свободно представлено одним непрерывным блоком, то у новый файл будет фрагментирован с вероятностью 0% (если, конечно нормальная файловая система не фрагментирует файлы специально — прим. автора) (также и вероятность фрагментации расширяемого файла не зависит от объёма свободного пространства). С другой стороны, диск, заполненный на 5% данными равномерно распределёнными по нему имеет очень высокую вероятность фрагментации.
    • Обратите внимание, что фрагментация файлов влияет на производительность только когда осуществляется доступ к этим файлам. Например: У вас есть хороший, дефрагментированный диск с большим количеством свободных «пробелов» на нём. Типичная ситуация. Всё работает хорошо. Однако, в какой-то момент вы приходите к ситуации когда больше не осталось больших свободных блоков. Вы скачиваете большой фильм, и этот файл оказывается сильно фрагментирован. Это не замедлит ваш компьютер. Файлы ваших приложений и прочие, что были в полном порядке, не станут моментально фрагментированными. Фильм конечно может дольше грузиться (однако, типичные битрейты фильмов настолько значительно ниже скорости чтения жёстких дисков, что вероятно это пройдёт незамеченным), также это может сказаться на производительности I/O пока фильм загружается, но ничего более не изменится.
    • Хотя фрагментация и является проблемой, часто проблема компенсируется кэшированием и буферизацией со стороны операционной системы и аппаратного обеспечения. Отложенная запись, упреждающее чтение и прочее помогают решить проблемы, вызываемые фрагментацией. В общем случае вы не замечаете ничего, пока уровень фрагментации не станет слишком высок (я даже рискну сказать, что пока ваш файл подкачки не фрагментирован, вы не заметите ничего)

  • Другой пример — Поисковая индексация. Предположим, что у вас включена автоматическая индексация, и операционная система не слишком хорошо её реализует. По мере того как вы сохраняете всё больше индексируемых файлов на свой компьютер (документы и тому подобное), индексирование начинает занимать всё больше времени и может начать оказывать заметное влияние на наблюдаемую производительность компьютера в ходе своей работы, съедая одновременно I/O и процессорное время. Это не связано со свободным пространством, но связано с количеством индексируемых данных. Однако исчерпание дискового пространства происходит одновременно с сохранением большего количества контента, поэтому многие устанавливают неверную взаимосвязь.
  • Антивирусы. Всё очень похоже на пример с поисковым индексом. Скажем, у вас есть антивирус, осуществляющий фоновое сканирование вашего диска. У вас появляется всё больше и больше файлов для сканирования, поиск начинает потреблять всё больше и больше ресурсов I/O и процессора, возможно мешая работе. Снова, проблема связана с количеством сканируемого контента. Больше контента — меньше свободного места, но отсутствие свободного места е является причиной проблемы.
  • Установленные программы. Предположим, у вас установлено множество программ, которые запускаются при загрузке компьютера, что увеличивает время загрузки. Это замедление происходит потому, что загружается много программ. Одновременно, установленные программы занимают место на диске. Следовательно, объём свободного пространства уменьшается одновременно с замедлением, что может привести к неверным выводам.
  • Можно привести множество других подобных примеров, которые дают иллюзию связи исчерпания дискового пространства и снижения производительности.


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

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

Связано ли это как-то с поиском места для размещения файлов?


Нет, не связано. Здесь есть два важных момента:
  1. Ваш жёсткий диск не занимается поиском места для размещения файлов. Жёсткий диск глуп. Он ничто. Это большой блок адресуемого хранилища, который слепо повинуется операционной системе в вопросах размещения. Современные диски оснащены сложными механизмами кэширования и буферизации, созданными чтобы предсказывать запросы операционной системы на основе накопленного людьми опыта (некоторые диски даже знают о файловых системах). Но, по сути, о диске следует думать как о большом глупом хранящем данные кирпиче, иногда обладающем функциями повышения производительности.
  2. Ваша операционная система также не занимается поиском места для размещения. Нет никакого «поиска». Большие усилия были приложены для решения этой проблемы, т.к. она является критичной для производительности файловых систем. Данные располагаются на вашем диске так как определено файловой системой, Например, 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 не имеет почти никакого отношения к данному случаю.

Комментарии (15)


  1. sigmatik
    21.04.2015 13:14
    +3

    Насчет приложений в автозапуске — это реальная проблема для всех неSSD дисков. На рабочем компьютере (с HDD ) помимо антивируса установлены клиенты облачных хранилищ данных, такие как Dropbox, Google Drive и Яндекс диск, так вот, для того чтобы ОС нормально запускалась и в ней можно было работать сразу после авторизации в домене мне пришлось весь этот софт ( убивающий производительность жесткого диска сразу после старта ) убрать из автозагрузки и поместить в планировщик задач. Задания настроены таким образом, чтобы запускать описанные выше утилиты с интервалом в 5-10 минут после входа в систему ) Зато теперь я могу взаимодействовать с компьютером почти сразу после запуска.
    P.S. к слову: при использовании ssd таких извращений конечно не требуется.


    1. pokryshkin
      21.04.2015 14:27

      ОЧЕНЬ полезно: geektimes.ru/post/106684


    1. Bal
      21.04.2015 15:18

      В Win8, наконец, дошли до включения из коробки не параллельной, а последовательной загрузки. Утилиты для последовательной загрузки были ещё со времён Win95, но сама система по дефолту всегда пыталась запускать всё одновременно.

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


      1. stavinsky
        21.04.2015 16:05

        Если я не ошибаюсь отложенный запуск служб появился чуть ли не в Висте.


        1. IRainman
          21.04.2015 16:28

          Служб да, только вроде в 7, а вот запуск приложений из автозагрузки именно с 8 идёт по очереди, а не кучей.


  1. Bombus
    21.04.2015 23:24
    -1

    У бесплатного антивирусника Microsoft Essential всегда наблюдаю фрагментированным файл mpcache-xxxx. Число фрагментов почти постоянно — 832 ±. Как-то удивляет величина и постоянство фрагментации.


  1. akrupa
    21.04.2015 23:42
    -1

    Если на диске занято 95% пространства и всё что свободно представлено одним непрерывным блоком, то у новый файл будет фрагментирован с вероятностью 0%

    Зато, вероятность фрагментации всех остальных файлов на диске при расширнии равна 100% (для всех файлов, кроме одного счастливчика).

    Дальше читать не стал. Прошу прощения, если что.


  1. BupycNet
    22.04.2015 05:03

    У меня с виндой в плане скорости веселая ситуация.
    Купил я ноут с Win7. На ноуте AMD Sata controller. Все было хорошо, пока я не обновился до Windows 8 и выше.
    И вот результат — если я копирую один файл на жестком диске куда либо в пределах этого диска или куда либо еще на внешний носитель, то доступ к диску сильно ухудшается.
    Если я буду копировать еще один файл — оба процесса копирования будут работать на скорости 1-2 мегабайта в секунду, а время доступа к диску будет 1-10 секунд!
    Я решил проблему тем, что купил SSD, но мне все равно кажется, что SSD работает также несколько медленее чем должен. Потому что любые параллельные процессы, даже на SSD сильно просаживают время доступа.
    Старый жесткий диск я поставил на место DVDROM. И что самое веселое — USB 3.0 внешний жесткий диск работает в 2 раза быстрее по скорости при обычных тестах, и в десятки раз быстрее если я работаю с этими диском в несколько параллельных процессов.

    К слову запущенный торрент клиент просто раздающий файл на жестком диске встроенном может пожирать от 20% и больше ресурсов, судя по системному монитору. Любая дисковая операция приводит к 100% нагрузке диска и скоростям в 1-2 мегабайта в секунду. Для копирования файлов с диска мне приходится выключать торрент клиент.
    Немного пруфов: www.tomshardware.co.uk/answers/id-2027511/windows-disk-usage-100-problem.html www.igorsevo.com/Blog.aspx?id=8 www.techspot.com/community/topics/unacceptably-high-disk-usage-performance-lag-windows-8.190289
    Вообще гуглится по запросу Windows 100% disk usage. Пробовал все советы — ничего не помогает.

    К слову линукс с этим диском работает отлично. Паралельные задачи, несколько процессов копирования, торренты и т.д. и т.п. диск все равно остается отзывчив и скорость делится напополам между задачами, а не уменьшается в 100 раз.


  1. DarkByte
    22.04.2015 05:09

    То есть то, что во времена, когда система стояла у меня на HDD, после дефрагментации компьютер по мановению руки начинал работать в несколько раз быстрее, переставал «задумываться» при создании файлов и папок, это чистой воды самовнушение?

    Не вспомнил когда последний раз проводил дефрагментацию диска после перехода на Windows 8, решил посмотреть на сколько же диски фрагментированы. Оказалось что всё по нулям и включена автоматическая еженедельная дефрагментация. Видимо именно из-за этого процесса диски начинают шелестеть, стоит ненадолго оставить систему в покое.


  1. Newbilius
    22.04.2015 08:09

    От автора: Похоже, я случайно написал целую книгу. Налейте себе чашку кофе перед чтением.

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


    1. askbow Автор
      22.04.2015 17:33

      Здесь нужно отметить, что автор-то писал не статью, а ответ на вопрос на superuser.com. Для формата ответов на сайтах вроде stackexchange, toster и т.п. получилось действительно длинно. Отсюда, видимо, и происходит эта фраза.


  1. DrPass
    22.04.2015 11:37

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


  1. fifonik
    22.04.2015 14:00

    У _не_ SSD дисков скорости при приближении к центру диска уменьшаются (что отлично видно в HD Tune & Co). Т.е. когда один и тот-же файл пишется в начало диска и в конец диска, то во втором случае он будет писаться дольше. Следовательно, при заполненном диске время записи большинства новых файлов (и добавлении к старым, например системным логам) увеличивается, что по моему и говорит о замедлении работы.


    1. PsyHaSTe
      23.04.2015 10:44

      Тут много тонкостей. Например зачастую пользователи хранят файлы на рабочем столе/в моих документах, а каждый файл в папке юзера замедляет работу ПК. Сколько было жалоб на то, что комп хреново загружается, а потом оказывалось, что на рабочем столке сотни файлов — и не счесть. Так что автор и формально не прав (физический смысл вы выше расписали), и практически (уже я написал).

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


    1. BlessMaster
      29.04.2015 18:13

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