Начало:
Копирование: простая сложность №1
,

Копирование: простаясложность №2

Возможно самым заметным недостатком в алгоритме копирования, замеченным
многими в Vista, является то, что при копировании больших групп файлов от 256 Кб
до многих мегабайтов скорость копирования заметно ниже, чем в
Windows XP. Это из-за того, что предыдущий алгоритм использовал
кэшируемые операции чтения/записи, что позволяло Проводнику записывать файлы в
память и закрывать диалог копирования задолго до того как Cache Manager на самом
деле записывал данные на диск. В Vista применяются
некэшируемые операции и Проводнику необходимо дождаться окончания каждой прежде
чем продолжить и, соответственно, необходимо записать все данные на диск прежде
чем объявить об окончании процесса. К тому же Проводник новой операционной
системы ждет 12 секунд прежде чем оценить предполагаемое время копирования, а
сам алгоритм оценки времени чувствителен к изменениям в скорости копирования,
что еще больше раздражало пользователей.

Улучшения в SP1

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

Во-первых, копирование в SP1
не использует кэширование при удаленном копировании файлов, в котором движок
предотвращает двойное кэширование используя файловый драйвер удаленной системы
Rdbss.sys. Делается это отдачей команды драйверу не кэшировать сетевой файл на
локальной системе как в случае с чтением или записью. Вы можете видеть это в
следующем перехвате Process Monitor-а:

Другим улучшением для удаленного копирования является использование
конвейерных операций чтения/записи реализованное в драйвере файловой системы
SMB2, srv2.sys, появившемся в Windows Vista и
Windows Server 2008. Вместо использования 60 Кб блоков
в сети как в оригинальной версии, SMB2 использует
конвейер из 64 Кб запросов, так что при получении больших запросов на
чтение/запись от приложения система использует несколько 64 Кб блоков
одновременно, что позволяет уменьшает задержки в передачи потока данных к или от
удаленной системы.

Процедура копирования изначально использует четыре блока размером от 128 Кб
до 1 Мб, в зависимости от размера копируемого файла, что в свою очередь
заставляет Cache Manager начать опережающее чтение для работы с большим потоком
запросов. Изменения, сделанные в SP1 с Cache
Manager-ом, позволяют ему использовать большие блоки при опережающем чтении и
отложенной записи. Использование более крупных блоков чтения/записи стало
возможным только за счет проделанной работы в оригинальной системе
Vista, которая поддерживате блоки больше 64 Кб, что было невозможно в предыдущих
версиях Windows. Большие операции так же ускоряют и
локальное копирование так как уменьшается количество операция доступа к диску и
поиск, это позволяет потоку отложенного чтения Cache Manager-а более "идти в
ногу" с заполнением памяти данными. Это снижает, хотя и не обязательно
исключает, нагрузку на память которая ранее заставляла в процессе копирования
откладывать активное использование памяти. Ну и наконец использование больших
запросов чтения/записи позволяет драйверу SMB2
использовать конвейер. Cache Manager использует
запросы в два раза большего размера чем запросы приложения, до 2 Мб в
Vista и 16 Мб в Server 2008,
запись до 1 Мб и 32 Мб соответственно.

Трассировка копирования 16 Мб файла от одной SP1
системы к другой показывает 1 Мб запросы Проводника и 2 Мб операции опережающего
чтения Cache Manager-а, которые можно отличить по флагу некэшируемоего I/O :

К сожалению изменения первого сервис-пака, в большинстве случае
обеспечивающие большое быстродействие, в определенных ситуациях могут вызывать
более медленную работу по сравнению с оригинальной Vista.
Во-первых, при копировании на или от Server 2003 по
медленной сети. Первый движок Vista обеспечивал
высокоскоростное копирование, но из-за проблем
Cache Manager-а на Server 2003
вся память сервера оказывалась забита данными копируемого файла. В
SP1 это проблемы удалось избежать, но из-за изменения
размера блока скорость передачи данных по сети с высокими задержками может
составлять лишь половину от того, что удается добиться в оригинальной
Vista.

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

Ну и наконец последнее изменение в SP1 состоит в
том, что Проводник может предсказать время копирования заметно раньше и сам
механизм предсказания более аккуратен.

Источник:
http://blogs.technet.com/markrussinovich/

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии