![](https://habrastorage.org/webt/pr/mu/88/prmu88f3cfiicaiezfau4iadvgc.png)
На конференции Linux Plumbers Conference 2020 разработчики Microsoft рассказали о своем экспериментальном проекте — оптимизации ядра Linux для серверных ARM-процессоров. С докладом выступил главный менеджер по разработке программного обеспечения Ян Бирман.
По словам специалиста, проект стартовал по внутреннему запросу компании. Linux уже используется в проектах Azure Cloud, Azure Sphere и Windows Subsystem for Linux. Перед командой Бирмана поставили задачу максимизировать производительность облачного сервиса на Linux при использовании процессоров с архитектурой ARM или x86 с 64-битной разрядностью. Разработчикам позволили скомпилировать ядро для операционной системы с собственными параметрами и флагами.
![](https://habrastorage.org/getpro/habr/post_images/f2c/7ad/062/f2c7ad062a6b39451fa3ebaed6903af0.jpg)
Исходный дистрибутив — Ubuntu 19.10 с предустановленными GCC 9.2.1, binutils 2.33 и kernel 5.3. Процессор сервера — 64-битный ARM Marvell Thunder X2. После мозгового штурма команда решила использовать оптимизацию LTO и PGO для сборки ядра.
![](https://habrastorage.org/getpro/habr/post_images/087/3f2/ba1/0873f2ba17bde195a98f2aba1f25f971.png)
Оптимизация профилирования (PGO или FDO) и оптимизация времени связи (LTO или LTCG) существенно замедляют процесс сборки и требует больше оперативной памяти для работы компилятора, но в теории дают прирост скорости выполнения команд на 10-20%. PGO редко используется разработчиками, а LTO не так давно стала применяться для сборки ядер и других пакетов. Ранее разработчики опасались использовать оптимизацию времени связи из-за проблем совместимости в компиляторах GCC и LLVM. Команда Бирмана обратилась за помощью к опытному разработчику ядра Linux Энди Клину, который выпустил патч для корректной работы LTO с ARM-процессорами. Чтобы заставить работать PGO, разработчики изучили документацию и методом проб и ошибок добились стабильной работы.
![](https://habrastorage.org/getpro/habr/post_images/64e/0f0/c73/64e0f0c7332a5400a2be8594c61ec9d2.png)
Завершив сборку ядра, команда протестировала производительность на резидентной системе управления базами данных класса NoSQL с открытым исходным кодом redis. После выполнения различных команд разработчики отчитались о приросте скорости выполнения команд на 5-20%. Данные получены из внутреннего бенчмарк теста redis.
![](https://habrastorage.org/getpro/habr/post_images/cbb/c1f/189/cbbc1f1897c4010d31ac63510e079ea6.png)
![](https://habrastorage.org/getpro/habr/post_images/986/783/b0e/986783b0e29ae75cdcda2d46a7e302d2.png)
Кстати, не так давно Microsoft выпустила обновление KB4566116 для Windows 10. Апдейт добавляет в 1909 и 1903 версии ОС поддержку подсистемы Windows Subsystem for Linux 2 (WSL 2). Это дает возможность использовать полноценное ядро Linux. Оно в WSL2 не является частью Windows по умолчанию, а загружается динамически и обновляется посредством встроенных в ОС инструментов.
beeruser
График Redis в лучших традициях маркетинга.
По-факту разница 1-4%.
staticmain
Сделал наглядную иллюстрацию к вашим словам:
![image](https://habrastorage.org/getpro/habr/comment_images/6e8/93d/9a9/6e893d9a9f39baede2aebb2ead9850fb.png)