Почему очистка диска занимает так много времени и ресурсов процессора?


29

Просто вопрос любопытства. Очистка диска уже довольно долго расходует 100% одного из моих ядер. Кажется, тратит много времени, особенно на Windows Update Cleanup.

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

Почему очистка диска занимает так много времени и ресурсов процессора? Что он делает так интенсивно?

Два из четырех ядер максимально

Ответы:


20

Windows сжимает папку WinSxS, удаляя замененные обновления и сжимая файлы, которые нельзя удалить и которые не используются в diff-файлах. Это требует много ресурсов процессора и поэтому вы видите высокую загрузку процессора.

Вы можете проанализировать использование ЦП с помощью xperf / WPA, чтобы убедиться в этом.


Разве он также не вычисляет место, сэкономленное при сжатии самых старых файлов (тех, которые недавно не открывались)?
Джастин Голдберг

Хорошее видео! Обязательно проверю этот инструмент: D
Свиш

@ Свиш, ты это подтвердил? Ответ на вопрос?
magicandre1981

4

Я могу подтвердить, что очистка обновлений Windows занимает почти 100% загрузки ЦП, все дело в сжатии WinSxS и реинтеграции обновлений:

Windows Cleanup 100% загрузка процессора

Я начал чистку в первый раз после установки Windows, и мне потребовалось 2 часа, чтобы завершить 50%. Из графика видно, что сначала выполняется чтение небольших файлов с диска (второй график), а также после 100% использования ЦП для сжатия и так далее.


2

Просто чтобы поджечь вопрос, я сделал на неизменяемой виртуальной машине следующие шаги:

  1. Загрузите SystemRescueCD и смонтируйте раздел Windows
  2. Вывести список всех файлов на диске в файл журнала (менее минуты)
  3. Перезагрузитесь на Windows
  4. Пусть cleanmgrделают свое дело и принимают к сведению время (более восьми часов)
  5. Перезагрузитесь на SystemRescueCD и смонтируйте раздел Windows
  6. Вывести список всех файлов на диске в другой файл журнала (менее минуты)
  7. Сброс обратно неизменяемой виртуальной машины
  8. Перезагрузитесь на Windows
  9. Выполните FOR / F ..., чтобы удалить такие файлы в командной строке администратора (cmd) и запишите время (не более пяти минут)

Пожалуйста, обратите внимание, что я перезагружен на Linux SystemRescueCd просто для того, чтобы иметь возможность перечислять все файлы, в том числе те, которые просматривал Window, а также делать такой список максимально быстро (без проверки ACL и т. Д.).

Также обратите внимание, что cleanmgrя считаю только время после окончания поиска (сам поиск занимает больше шести часов).

Таким образом, удаление файлов не является проблемой (само удаление занимает всего пять минут, но cleanmgrзанимает более восьми часов).

Само удаление может идти так быстро, так как хост - это Linux, эта скорость вызвана тем, что Linux кэширует все записи в файл фиксированного размера, который используется в качестве диска на виртуальной машине (24 ГБ), и поскольку у меня 64 ГБ RAM и я позволю Windows 16GiB не нужно использовать SWAP, ни PAGEFILE.SYS; кроме того, Linux может хранить весь файл в оперативной памяти (я проверял этот файл в оперативной памяти, и время удаления прошло много, но cleanmgrвремя не уменьшается).

Да, если я помещаю виртуальный диск полностью в ОЗУ, cleanmgrвремя не падает, но если я вручную удаляю файлы, это время уменьшается немного (кэш записи Linux отлично работает, когда на нем 64 ГБ ОЗУ).

Моя конфигурация для тестов:

  • Хост: Linux 64-битный дистрибутив на оборудовании, основными частями которого являются AMD Deca Core 5 ГГц с 64 ГБ ОЗУ и контроллер Sata Raid0 с двумя жесткими дисками WD VelociRaptor (способный поддерживать комбинированную скорость последовательной записи около 1 ГБ / с и 4K произвольной записи 300MiB / с); стоимость составляет> десять тысяч евро
  • Гость: Windows 10 Home с 16 ГБ оперативной памяти и виртуальным диском 24 ГБ

Тест1: Наличие виртуального диска 24GiB на физических жестких дисках Тест2: Наличие виртуального диска 24GiB в оперативной памяти хоста Linux

Я боюсь, что cleanmgrделает что-то в реестре Windows для каждого файла, который он удаляет (доступ к реестру очень низок).

Мониторы у меня были:

  • Загрузка ЦП на хосте Linux и на гостевой Windows (чаще всего от 0% до 1%, с пиками 5%, не более)
  • Использование жесткого диска на хосте Linux (около 0%, когда cleanmgrработал, с пиками 2%), дисковый кеш Linux действительно хорош, избегая отправки данных на реальный диск
  • Использование жесткого диска в гостевой системе Windows (чаще всего от 2% до 15%, когда cleanmgrработало, с пиками 28%)

Так ясно cleanmgrделает много необнаружимой работы, может быть, время сна? Может быть, нет, если он обращается к реестру, процессор для этого не учитывается мониторами Windows, жесткий диск на нем не используется (реестр находится в оперативной памяти) и т. Д., И каждый доступ к реестру может занимать больше секунды. попробуйте свою собственную программу для доступа к реестру, открывая реестр и закрывая его для каждого действия, а не открывая HK * ... это большая разница.

Так что, если cleanmgrделает для каждого файла:

  1. Открыть реестр HK *
  2. Проконсультируйтесь с любыми нуждами и / или сделайте некоторые записи в реестре
  3. Закрыть реестр HK *

Это может занять до двух или трех секунд на операцию, и если она выполняет одну операцию на файл, это может занять около часа на каждую тысячу файлов ... мое количество файлов составило чуть более 40000 файлов, таким образом, 40000 файлов / 8 часов обрабатывает один файл каждые 1,3 секунды ... с другой стороны, удаляя их по сценарию (после того, как он узнает, какие из них) тратится менее пяти минут, то есть удаляет около 133 в секунду ... разница.

Так что определенно cleanmgrвремя не вызвано самим deletionсобой! Что еще он делает? Пожалуйста, M $ улучшить эту скорость!


1
Это не ответ на оригинальный вопрос. Если у вас есть новый вопрос, пожалуйста, задайте свой вопрос (если это поможет, обратитесь к контексту).
DavidPostill

Почему вы не использовали монитор процесса ( docs.microsoft.com/en-us/sysinternals/downloads/procmon ) для анализа действий реестра Windows и т. Д.?
кибернард

* я м изменяемый зр.
StingyJack

2

Один из способов смягчить эту проблему и немного ускорить этап «Очистка Центра обновления Windows» «Очистки диска» - это временно установить более высокий приоритет для процесса TiWorker.exe на время действия так называемой «очистки».

В панели «Подробности» диспетчера задач найдите TiWorker.exeи щелкните правой кнопкой мыши, чтобы открыть всплывающее меню. Для «Установить приоритет» выберите «Выше нормального». Для меня это повысило TiWorkerактивность процессора - с усреднения около 16% - до его полного потенциала 25% (на 4-ядерном компьютере).

введите описание изображения здесь

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

И еще, знайте, что процесс, скорее всего, не завис, и действительно когда-нибудь завершится. Чтобы проверить это (и еще больше отвлечь себя в течение этого раздражающего времени ожидания), вы можете проверить раздел «Активность диска» в Resource Monitor (запустите «resmon.exe»).


Очень хорошая скорость!
субъективист

1

Удаление 20 файлов размером 5 МБ займет больше времени, чем удаление 10 файлов размером 64 МБ. Это происходит потому, что когда система удаляет файлы, она на самом деле не удаляет их (так как пустое место на диске может быть сделано из битов «шума»), а просто перезаписывает переднюю часть, которая говорит: «Файл начинается здесь» с бредом, а затем он с радостью перезапишет эту и следующие части позже, когда вы захотите использовать пространство. На самом деле удаление - это то же самое, что и запись в противном случае.

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


Оригинальный вопрос специально задает вопрос об очистке диска.
liljoshu

0

Еще одно предупреждение: часть того, что занимает время, заключается в том, что при очистке WinSxS очистка диска должна сначала распаковать множество файлов. Таким образом, использование диска на самом деле увеличивается для первой части очистки!


-2

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


Пожалуйста, не дефрагментируйте свой SSD, он изнашивает циклы чтения и записи и почти не имеет усиления.
Nordlys Jeger

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.