С пропеллером?

Любые обсуждения, не нарушающие правил форума.

Модератор: Модераторы

Ответить
Аватара пользователя
Alexander
энтузиаст
Сообщения: 891
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

С пропеллером?

Сообщение Alexander »

Недавно в ядро Линукс была включена экспериментальная возможность включения вместо gcc clang (llvm) да ещё и с "пропеллером" и LTO (видимо наподобие smartlink в Паскале).

Сулит эта штука 10 процентов ускорения: https://www.securitylab.ru/news/567609.php, https://docs.kernel.org/dev-tools/propeller.html

Попробовал я его уже на протяжении нескольких версий ядра - полёт нормальный. Измерений производительности не проводил, но работает стабильно.

Для Дебиан (и видимо его производных) делается это так:

1. Накладываются патчи. Допустим:

Код: Выделить всё

./spkpatch.sh
2. Конфигурируется:

Код: Выделить всё

make xconfig
3. Запускается сборка с указанием использовать llvm вместо gcc:

Код: Выделить всё

make LLVM=-21 bindeb-pkg
4. Будет задан вопрос о LTO. Включаем полный LTO:

Код: Выделить всё

Link Time Optimization (LTO)
> 1. None (LTO_NONE)
  2. Clang Full LTO (EXPERIMENTAL) (LTO_CLANG_FULL) (NEW)
  3. Clang ThinLTO (EXPERIMENTAL) (LTO_CLANG_THIN) (NEW)
choice[1-3?]: 2
5. Будет задан вопрос о AutoFDO - включаем его:

Код: Выделить всё

Enable Clang's AutoFDO build (EXPERIMENTAL) (AUTOFDO_CLANG) [N/y/?] (NEW) y
6. Будет задан вопрос о пропеллере, включаем его:

Код: Выделить всё

Enable Clang's Propeller build (PROPELLER_CLANG) [N/y/?] (NEW) y
7. Будет задан вопрос о kCFI. Если не нужен - не включаем его:

Код: Выделить всё

Use Kernel Control Flow Integrity (kCFI) (CFI) [N/y/?] (NEW) n
В конфиге появятся опции вроде:

Код: Выделить всё

CONFIG_LTO=y
CONFIG_LTO_CLANG=y
CONFIG_ARCH_SUPPORTS_LTO_CLANG=y
CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y
CONFIG_HAS_LTO_CLANG=y
# CONFIG_LTO_NONE is not set
CONFIG_LTO_CLANG_FULL=y
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_ARCH_SUPPORTS_AUTOFDO_CLANG=y
CONFIG_AUTOFDO_CLANG=y
CONFIG_ARCH_SUPPORTS_PROPELLER_CLANG=y
CONFIG_PROPELLER_CLANG=y
CONFIG_ARCH_SUPPORTS_CFI=y
Далее будет долгая компиляция от нескольких часов до нескольких дней в зависимости от выбранных при конфигурировании опций. Она потребует много RAM.

В результате появятся пакеты ядра, их можно установить например так:

Код: Выделить всё

#!/bin/bash

PATH=$PATH:/usr/local/sbin:/usr/sbin:/sbin dpkg -i linux*6.19.5*.deb
Ответить