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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!



Раз в месяц 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 возвращается к своей базовой версии, поэтому с каждым обновлением поставлялись прямая и обратная дельты.

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

К примеру, если в октябрьском ежемесячном обновлении изменился файл 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 11»
  • «Обновления Windows с прямым и обратным разностным сжатием»

Можно добавить, что все файлы Windows Update подписаны цифровой подписью Microsoft с соответствующим цифровым сертификатом. Наличие у программы сертификата подписи кода гарантирует беспроблемную установку под Windows, потому что Windows Defender SmartScreen учитывает репутацию издателя и не выдаёт предупреждений безопасности при установке программы с сертификатом.
Источник: https://habr.com/ru/company/globalsign/blog/587714/


Интересные статьи

Интересные статьи

Пожелтевшие виноградные поля холмов «Безмятежности», фотография 26 ноября 2006 года, Голдин+Сеннеби 25 октября 2001 года на полках магазинов появились зелёные (домашняя) и синие (профессиональная...
Анализ вредоносных программ, защищающих себя от анализа, — это всегда дополнительные трудности для вирусного аналитика. Точнее, постоянная борьба. Злоумышленники постоянн...
Это очередная статья из цикла о том, как я работаю с устаревшими устройствами, добавляя им больше возможностей и упрощая взаимодействие. Однако в этот раз я не стал брать чужие разработки...
Эта история о том, как простая переустановка затянулась на несколько дней. И как я пытался подружить EFI и Legacy в MacBook Pro. Предыстория В 2018 году я себе приобрел в личное пользо...
В предыдущих сериях Не так давно я рассказал о двух уязвимостях Стима: CVE-2019-14743 и CVE-2019-15316. Там была целая история о том, как я пытался зарепортить их, у меня не получалось, меня заб...