makepkg-optimize (Русский)

From ArchWiki

Состояние перевода: На этой странице представлен перевод статьи makepkg-optimize. Дата последней синхронизации: 16 сентября 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

makepkg-optimizeAUR — это коллекция дополнительных tidy, buildenv и executable скриптов для pacman, которые предоставляют макросы для нескольких видов оптимизации на этапах build() и package().

Примечание: Как и в случае с любым пакетом из Arch User Repository, makepkg-optimizeAUR не имеет официальной поддержки. Читайте и отправляйте комментарии на его странице в AUR.

Установка

Установите пакет makepkg-optimizeAUR и, чтобы сделать доступными оптимизации, требующие их, установите бэкенды: openmp, upx, optipng, svgo и polly.

Настройка

makepkg-optimizeAUR генерирует избыточный файл настроек /etc/makepkg-optimize.conf, из вашего текущего makepkg.conf(5).

В файле присутствуют дополнительные опции: COMPILE FLAGS, BUILD ENVIRONMENT, GLOBAL PACKAGE OPTIONS, PACKAGE OUTPUT и COMPRESSION DEFAULTS — все они по умолчанию отключены.

Создание оптимизированного пакета

Важно: Некоторые пакеты могут не собираться с определёнными оптимизациями, а чрезмерная оптимизация может вызвать проблемы в некоторых программах — например, снижение производительности и ошибки сегментирования.

После выбора предпочтительных оптимизаций используйте этот файл настроек при сборке:

$ makepkg -c --config /etc/makepkg-optimize.conf
Совет: Используйте -c c makepkg, чтобы предотвратить повторное использование пакетами устаревших флагов оптимизации. Смотрите Makepkg (Русский)#Использование.
Примечание: Profile-guided optimization требует, чтобы пакет был собран и установлен дважды. Первая фаза инициирует генерацию профилей в $PROFDEST/pkgbase.gen; вторая перемещает их в $PROFDEST/pkgbase.used и применяет их.

Сборка оптимизированного пакета в чистом chroot

В качестве альтернативы makepkg-optimize можно использовать для сборки оптимизированных пакетов внутри chroot.

Настройка chroot

После настройки chroot необходимо выполнить несколько дополнительных шагов.

Установка makepkg-optimize и бэкендов

Сначала установите некоторые бэкенды для макросов оптимизации в базовый chroot:

$ arch-nspawn "$CHROOT"/root pacman -S openmp upx optipng polly

Затем скачайте и соберите пакеты makepkg-optimizeAUR и svgo.

Чтобы установить их в базовый chroot, скопируйте в него файлы пакетов и установите их, например:

# cp svgo-1.2.2-2-any.pkg.tar.xz "$CHROOT"/root/root/
$ arch-nspawn "$CHROOT"/root pacman -U /root/svgo-1.2.2-2-any.pkg.tar.xz
Важно: Это аннулирует гарантию на ваш "чистый" chroot!

Использование chroot

Сборка пакета

Сначала отредактируйте $CHROOT/root/etc/makepkg-optimize.conf и выберите предпочтительные оптимизации.

При сборке передайте файл настроек в makepkg:

$ makechrootpkg -c -r "$CHROOT" -- -c --config /etc/makepkg-optimize.conf
Сборка с PGO

Опция pgo для BUILDENV включает генерацию или применение профилей в зависимости от того, выполняется ли первая или вторая сборка пакета с этим флагом. Сборка в чистом chroot усложняет эту задачу, поскольку программа запускается вне chroot для генерации профилей, но профили должны быть применены внутри chroot при последующей перекомпиляции. Решение состоит в объединении трёх файловых систем с помощью bind-монтирования.

Создание кэша PGO

Создайте каталог для хранения профилей и выполните bind-монтирование:

# mkdir -m 777 {"$CHROOT"/{root,"$USER"},}/mnt/pgo
# mount -o bind {,"$CHROOT"/root}/mnt/pgo
# mount -o bind "$CHROOT"/{root,"$USER"}/mnt/pgo
Совет: Используйте fstab для автоматического bind-монтирования при загрузке системы.
#PGODEST
/полный/путь/к/$CHROOT/$USER/mnt/pgo/ /mnt/pgo/ none bind,x-gvfs-hide 0 0
/mnt/pgo/ /полный/путь/к/$CHROOT/root/mnt/pgo/ none bind,x-gvfs-hide 0 0

Примечание: Введите полный путь к каталогам chroot pgo, без использования каких-либо $ПЕРЕМЕННЫХ

Отредактируйте $CHROOT/root/etc/makepkg-optimize.conf и установите PROFDEST=/mnt/pgo.

Профилирование программы

Соберите, затем установите пакет и выполните тестовый запуск его исполняемых файлов.

Примечание: Профили создаются при завершении работы программы (exit()). Для создания профилей постоянно работающих демонов, таких как systemd, может потребоваться перезагрузка.

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