Как Windows 11 уменьшила размер кумулятивных обновлений на 40%

в 16:46, , рубрики: MSDelta, Windows 10, windows 11, Windows Defender, windows update, Алгоритмы, Блог компании GlobalSign, версионность, информационная безопасность, кумулятивное обновление, маппинг виртуальных адресов, разностное сжатие, разработка под windows, сертификат подписи кода, сжатие данных
Как Windows 11 уменьшила размер кумулятивных обновлений на 40% - 1

Раз в месяц Microsoft выпускает кумулятивное обновление Windows, которое включают в себя все предыдущие. То есть для приведения системы в актуальное состояние требуется установка единственного апдейта.

Учитывая огромное количество исправлений в Windows, кумулятивное обновление без оптимизации может сильно вырасти в размере, что неприемлемо. Например, его не смогут скачать пользователи с медленным подключением к интернету, а только в США таких 20%. Поэтому уменьшение размера обновлений — приоритетная задача. Теперь для неё нашлось решение.

Если вкратце, то раньше каждое обновление включало в себя прямую дельту изменений системы, а также обратную дельту для приведения системы к базовой RTM, чтобы установить новую прямую дельту через месяц. Однако выяснилось, что обратную дельту можно вычислить в процессе установки обновления. Теперь Microsoft намерена запатентовать этот алгоритм.

Проблема с большим размером обновлений Windows

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

В этой статье рассказывается о новой технологии сжатия, которая позволила уменьшить размер кумулятивных обновлений в Windows 11 на 40% (аналогичная система реализована в Windows 10).

Цели

Разработчикам была поставлена задача уменьшить размер обновлений Windows 11 со следующими условиями:

  • Уменьшить размер трафика
  • Не увеличивать время установки
  • Сохранить совместимость со всеми каналами распространения без каких-либо изменений конфигурации, то есть без лишней головной боли для сисадминов

Как выпускаются новые версии Windows

Windows 10 с версии 1809 использовала одновременно прямое и обратное разностное сжатие, где учитываются прямая и обратная разности (дельты) между тремя версиями системы: текущая $V_N$, целевая $V_R$ и базовая исходная $V_0$.

Как Windows 11 уменьшила размер кумулятивных обновлений на 40% - 5

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

Хотя прямая и обратная дельты симметричны по функции, их содержимое в значительной степени отличается. Это значит, что двунаправленная дельта, которая содержит и новые, и старые данные, не намного меньше по размеру, чем старые файлы Patch Storage Files (PSF) в версиях Windows 10 1803 и старше, куда записывались прямые дельты для всех возможных сочетаний $V_N$ и $V_R$, то есть без использования обратных дельт и промежуточной базы $V_0$.

К примеру, если в октябрьском ежемесячном обновлении изменился файл Notepad.exe, то генерировались дельты для изменений файла Notepad.exe с сентября по октябрь, с августа по октябрь, с июля по октябрь, с июня по октябрь, а также с первоначального RTM по октябрь. Таким образом, кумулятивные обновления с каждым месяцем всё увеличивались в размере. Поэтому разработчикам поставили задачу оптимизировать их.

Начиная с Windows 10 1809 механизм изменили — и ввели обратную дельту, благодаря которому размер кумулятивных обновлений всегда оставался практически одинаковым.

Как Windows 11 уменьшила размер кумулятивных обновлений на 40% - 9
Дельта-пары в Windows Update. Чтобы создать целевую ревизию, к базовой версии файла применяется прямая дельта (forward delta). Затем к целевой ревизии применяется обратная дельта (reverse delta), чтобы создать промежуточную базовую версию для следующей прямой дельты через месяц

Чем плоха двунаправленная дельта

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

Генерация данных для обратного обновления

Разработчики Microsoft нашли способ «зафиксировать» на этапе применения дельты все преобразования и исправления — и эффективно перекодировать их из прямой в обратную дельту (n→0), что избавляет от необходимости распространять обратные дельты в паре.

Примечание. Microsoft пишет, что предварительная заявка на патент США № 63/160,284 с описанием этого механизма «Генерация данных для обратного обновления» подана 12 марта 2021 года. К сожалению, найти заявку на сайте патентного ведомства не удалось.

Как Windows 11 уменьшила размер кумулятивных обновлений на 40% - 10

Как Windows 11 уменьшила размер кумулятивных обновлений на 40% - 11
Генерация данных для обратного обновления происходит в процессе применения прямой дельты с инструкциями вставки и удаления данных

Маппинг виртуальных адресов в ассемблере

Архитектурно продвинутые алгоритмы дельта-сжатия, такие как MSDelta от Microsoft, при изменении адреса функции изменяют также виртуальные адреса в ассемблере (маппинг виртуальных адресов). Это важно, поскольку даже небольшие исправления в ассемблерном коде сдвигают адреса последующих функций в бинарной программе. Без ремаппинга виртуальных адресов изменение ассемблерного кода в одной строке может привести к тому, что придётся изменять виртуальные адреса для десятков тысяч вызовов.

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

Как Windows 11 уменьшила размер кумулятивных обновлений на 40% - 12
Пример, как все инструкции call в ассемблере x86 сдвигаются после добавления всего одной инструкции mov по адресу 0x18000097D3 (строка 17)

Обратный маппинг виртуальных адресов в ассемблере

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

Вывод

Возможность сгенерировать обратное обновление обеспечивает эффективный способ распространения прямых дельт с возможностью вернуть систему в исходное состояние. Microsoft пишет, что в Windows 11 такой подход сократил размер обновлений на 40%.

Дополнительная информация

Можно добавить, что все файлы Windows Update подписаны цифровой подписью Microsoft с соответствующим цифровым сертификатом. Наличие у программы сертификата подписи кода гарантирует беспроблемную установку под Windows, потому что Windows Defender SmartScreen учитывает репутацию издателя и не выдаёт предупреждений безопасности при установке программы с сертификатом.

Автор: GlobalSign_admin

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js