Раз в месяц Microsoft выпускает кумулятивное обновление Windows, которое включают в себя все предыдущие. То есть для приведения системы в актуальное состояние требуется установка единственного апдейта.
Учитывая огромное количество исправлений в Windows, кумулятивное обновление без оптимизации может сильно вырасти в размере, что неприемлемо. Например, его не смогут скачать пользователи с медленным подключением к интернету, а только в США таких 20%. Поэтому уменьшение размера обновлений — приоритетная задача. Теперь для неё нашлось решение.
Если вкратце, то раньше каждое обновление включало в себя прямую дельту изменений системы, а также обратную дельту для приведения системы к базовой RTM, чтобы установить новую прямую дельту через месяц. Однако выяснилось, что обратную дельту можно вычислить в процессе установки обновления. Теперь Microsoft намерена запатентовать этот алгоритм.
Проблема с большим размером обновлений Windows
С переходом сотрудников на удалённую работу большой размер апдейтов стал создавать проблемы для многих компаний. У них нет скоростного интранета. Сотрудники подключаются к корпоративному VPN и скачивают обновления через домашний интернет. Для оперативного распространения патчей безопасности очень важно свести к минимуму сетевой трафик, чтобы обеспечить защиту удалённых сотрудников, где бы они ни находились.
В этой статье рассказывается о новой технологии сжатия, которая позволила уменьшить размер кумулятивных обновлений в Windows 11 на 40% (аналогичная система реализована в Windows 10).
Цели
Разработчикам была поставлена задача уменьшить размер обновлений Windows 11 со следующими условиями:
- Уменьшить размер трафика
- Не увеличивать время установки
- Сохранить совместимость со всеми каналами распространения без каких-либо изменений конфигурации, то есть без лишней головной боли для сисадминов
Как выпускаются новые версии Windows
Windows 10 с версии 1809 использовала одновременно прямое и обратное разностное сжатие, где учитываются прямая и обратная разности (дельты) между тремя версиями системы: текущая , целевая и базовая исходная .
Таким образом, в качестве промежуточного состояния Windows возвращается к своей базовой версии, поэтому с каждым обновлением поставлялись прямая и обратная дельты.
Хотя прямая и обратная дельты симметричны по функции, их содержимое в значительной степени отличается. Это значит, что двунаправленная дельта, которая содержит и новые, и старые данные, не намного меньше по размеру, чем старые файлы Patch Storage Files (PSF) в версиях Windows 10 1803 и старше, куда записывались прямые дельты для всех возможных сочетаний и , то есть без использования обратных дельт и промежуточной базы .
К примеру, если в октябрьском ежемесячном обновлении изменился файл Notepad.exe
, то генерировались дельты для изменений файла Notepad.exe с сентября по октябрь, с августа по октябрь, с июля по октябрь, с июня по октябрь, а также с первоначального RTM по октябрь. Таким образом, кумулятивные обновления с каждым месяцем всё увеличивались в размере. Поэтому разработчикам поставили задачу оптимизировать их.
Начиная с Windows 10 1809 механизм изменили — и ввели обратную дельту, благодаря которому размер кумулятивных обновлений всегда оставался практически одинаковым.
Дельта-пары в Windows Update. Чтобы создать целевую ревизию, к базовой версии файла применяется прямая дельта (forward delta). Затем к целевой ревизии применяется обратная дельта (reverse delta), чтобы создать промежуточную базовую версию для следующей прямой дельты через месяц
Чем плоха двунаправленная дельта
Дельты создают целевую версию путём преобразований и исправлений базовой версии. В одних случаях данные добавляются, в других — удаляются. Поэтому двунаправленная дельта хранит и добавленное, и удалённое содержимое. Поскольку данные в прямой и обратной дельтах сильно не совпадают, двунаправленная дельта не слишком эффективна.
Генерация данных для обратного обновления
Разработчики Microsoft нашли способ «зафиксировать» на этапе применения дельты все преобразования и исправления — и эффективно перекодировать их из прямой в обратную дельту (n→0), что избавляет от необходимости распространять обратные дельты в паре.
Примечание. Microsoft пишет, что предварительная заявка на патент США № 63/160,284 с описанием этого механизма «Генерация данных для обратного обновления» подана 12 марта 2021 года. К сожалению, найти заявку на сайте патентного ведомства не удалось.
Генерация данных для обратного обновления происходит в процессе применения прямой дельты с инструкциями вставки и удаления данных
Маппинг виртуальных адресов в ассемблере
Архитектурно продвинутые алгоритмы дельта-сжатия, такие как MSDelta от Microsoft, при изменении адреса функции изменяют также виртуальные адреса в ассемблере (маппинг виртуальных адресов). Это важно, поскольку даже небольшие исправления в ассемблерном коде сдвигают адреса последующих функций в бинарной программе. Без ремаппинга виртуальных адресов изменение ассемблерного кода в одной строке может привести к тому, что придётся изменять виртуальные адреса для десятков тысяч вызовов.
Маппинг выполняется путём побайтового дизассемблирования кода программы и идентификации виртуальных адресов. Виртуальные адреса логически соответствуют точкам входа для функций ассемблерного кода и смещаются, когда ассемблерный код обновляется в патче. Дельта-движок отслеживает эти сдвиги — и они фиксируются в таблице сопоставления. Маппинг во время применения дельты — одна из важных причин, почему современные архитектурно продвинутые алгоритмы дельта-сжатия настолько эффективны.
Пример, как все инструкции call
в ассемблере x86 сдвигаются после добавления всего одной инструкции mov
по адресу 0x18000097D3 (строка 17)
Обратный маппинг виртуальных адресов в ассемблере
Как и обычные изменения данных, преобразования адресов можно «зафиксировать» и отменить. При этом возникают небольшие накладные расходы, поскольку не всегда отображение выполняется в точности. Если прямое отображение конфликтует с наблюдаемым обратным, то для выравнивания необходимо использовать дополнительную инструкцию исправления. Это можно сделать сразу на месте, и тогда обратный маппинг обеспечит почти такую же производительность, как обратная дельта с прямым маппингом из дельты, сгенерированной на сервере.
Вывод
Возможность сгенерировать обратное обновление обеспечивает эффективный способ распространения прямых дельт с возможностью вернуть систему в исходное состояние. Microsoft пишет, что в Windows 11 такой подход сократил размер обновлений на 40%.
Дополнительная информация
Можно добавить, что все файлы Windows Update подписаны цифровой подписью Microsoft с соответствующим цифровым сертификатом. Наличие у программы сертификата подписи кода гарантирует беспроблемную установку под Windows, потому что Windows Defender SmartScreen учитывает репутацию издателя и не выдаёт предупреждений безопасности при установке программы с сертификатом.
Автор: GlobalSign_admin