Я ищу способы оптимизировать время сборки наших уникальных контейнеров HP C. Я знаю, что могу сэкономить время, создавая их слой за слоем. Но все же есть возможности для оптимизации.
Меня интересует использование / кеширование всего, что имеет смысл в хост-системе.
- CCache для кэширования артефактов сборки C ++
- git клонирование репо
- Загрузки пакетов APT
Я провел несколько экспериментов, но ни разу не преуспел.
Что я обнаружил far:
CCache
Я устанавливаю ccache в контейнер и инструктирую систему сборки использовать его. Я знаю, что, поскольку я запускаю singularity build
с sudo, кеш будет под /root
. Но после запуска сборки /root/.ccache
пуст. Я проверил сгенерированные файлы сборки CMake, и они определенно используют ccache.
Я даже создал тестовый рецепт, содержащий %post
touch "$HOME/.ccache/test"
, но тестовый файл нигде не появился на хост-система (не в /root
и не в доме моего пользователя). Монтируется ли на этапе сборки каталог, поддерживаемый контейнером, в /root
вместо root dir хоста?
Нужно ли что-то еще сделать для использования ccache?
Git
Люди предлагают запустить, например, git -cache-http-server ({ ссылка }) и использовать git config --global url."http://gitcache:1234/".insteadOf https://
.
Поскольку особенность может читать части файловой системы хоста, я думаю, может быть даже способ заставить ее работать без прокси-программы. Однако, если репозитории хоста git не находятся внутри $HOME
или /tmp
, как сингулярность может получить к ним доступ во время сборки? singularity build
не имеет флага --bind
для указания дополнительных каталогов монтирования. А использование раздела %files
в рецепте звучит неэффективно - копировать все при каждом запуске сборки.
APT
Люди предлагают использовать, например, squid-deb- прокси (https://gist.github.com/dergachev/8441335). Опять же, поскольку Singularity может читать файлы файловой системы хоста, я хотел бы просто использовать хост /var/cache/apt
. Но /var
по умолчанию не монтируется в контейнер. И снова тот же вопрос - как мне смонтировать /var/cache/apt
во время сборки контейнера. И в целом это хорошая идея? Разве это не повредит APT-кеш хоста, учитывая, что и хост, и контейнер основаны на одной и той же версии Ubuntu и одной архитектуры?
Или сингулярность сама делает какое-то умное кеширование APT? Я только что заметил, что он загрузил 420 МБ пакетов за 25 секунд, что возможно при моем подключении, но не очень вероятно, учитывая стандартную скорость зеркал ubuntu.
Изменить: я создал выпуск по сингулярному репо: https://github.com/hpcng/singularity/issues/5352.