На конференции Linux Plumbers Conference 2020 разработчики
Microsoft
рассказали
о своем экспериментальном проекте
оптимизации ядра Linux для серверных ARM-процессоров. С
докладом выступил главный менеджер по разработке программного
обеспечения Ян Бирман.
По словам специалиста, проект стартовал по внутреннему запросу
компании. Linux уже используется в проектах Azure Cloud, Azure
Sphere и Windows Subsystem for Linux. Перед командой Бирмана
поставили задачу максимизировать производительность облачного
сервиса на Linux при использовании процессоров с архитектурой ARM
или x86 с 64-битной разрядностью. Разработчикам позволили
скомпилировать ядро для операционной системы с собственными
параметрами и флагами.
Исходный дистрибутив Ubuntu 19.10 с предустановленными GCC 9.2.1,
binutils 2.33 и kernel 5.3. Процессор сервера 64-битный ARM Marvell
Thunder X2. После мозгового штурма команда решила использовать
оптимизацию LTO и PGO для сборки ядра.
Оптимизация профилирования (PGO или FDO) и оптимизация времени
связи (LTO или LTCG) существенно замедляют процесс сборки и требует
больше оперативной памяти для работы компилятора, но в теории дают
прирост скорости выполнения команд на 10-20%. PGO редко
используется разработчиками, а LTO не так давно стала применяться
для сборки ядер и других пакетов. Ранее разработчики опасались
использовать оптимизацию времени связи из-за проблем совместимости
в компиляторах GCC и LLVM. Команда Бирмана обратилась за помощью к
опытному разработчику ядра Linux Энди Клину, который выпустил патч
для корректной работы LTO с ARM-процессорами. Чтобы заставить
работать PGO, разработчики изучили документацию и методом проб и
ошибок добились стабильной работы.
Завершив сборку ядра, команда протестировала производительность на
резидентной системе управления базами данных класса NoSQL с
открытым исходным кодом redis. После выполнения различных команд
разработчики отчитались о приросте скорости выполнения команд на
5-20%. Данные получены из внутреннего бенчмарк теста redis.
Кстати, не так давно Microsoft выпустила обновление KB4566116 для
Windows 10. Апдейт добавляет в 1909 и 1903 версии ОС поддержку
подсистемы Windows Subsystem for Linux 2 (WSL 2). Это дает
возможность использовать полноценное ядро Linux. Оно в WSL2 не
является частью Windows по умолчанию, а загружается динамически и
обновляется посредством встроенных в ОС инструментов.