makepkg-optimize (Русский)
makepkg-optimizeAUR — это коллекция дополнительных tidy, buildenv и executable скриптов для pacman, которые предоставляют макросы для нескольких видов оптимизации на этапах build()
и package()
.
Установка
Установите пакет 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 (Русский)#Использование.$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/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
#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/root/etc/makepkg-optimize.conf
и установите PROFDEST=/mnt/pgo
.
Профилирование программы
Соберите, затем установите пакет и выполните тестовый запуск его исполняемых файлов.
exit()
). Для создания профилей постоянно работающих демонов, таких как systemd, может потребоваться перезагрузка.После тщательного использования программы закройте её, затем пересоберите и переустановите её пакет.