Недавно команда разработчиков облачных технологий разработала проект, который занял 124,44 ГБ дискового пространства и более 1400 складов. Такой масштаб кода сталкивается с такими проблемами, как длительное время извлечения, большое использование дискового пространства, низкая эффективность и ограниченное параллельное создание. Столкнувшись с этими постоянными проблемами, команда поняла, что необходимо фундаментально решить проблему скорости клонирования кода, которая не только связана с эффективностью разработки, но и напрямую влияет на процесс CI/CD и использование ресурсов.
Итак, мы обратили внимание на этот недавно выпущенный артефакт CI. Эта статья представляет собой подробное техническое объяснение части компиляции.
Следите за разработчиками Tencent Cloud и заранее получайте техническую информацию из первых рук👇
в предыдущей статье《125G Код, готовый к выполнению за 10 секунд: это CI Артефакт немного мощный! 》середина,Мы поделились, как пройти CNB из git-clone-yyds плагин, поставь 125 GB База кода из времени клонирования с 20 минут до 10 В течение нескольких секунд. Это значительно сократило время работы трубопровода нашей команды и значительно повысило эффективность строительства.
Однако при фактическом выполнении индивидуальной разработки для AOSP мы столкнулись с более сложной проблемой:
Даже если база кода успешно клонирована, процесс,Полная реализация такой огромной базы кода по-прежнему остается очень трудоемким процессом.,Это занимает около 46 минут.
Традиционные стратегии решения, то естьвернокомпилироватьпродуктизкэш,Избегайте последующих сборок и полных перестроек.,Ускорьте процесс компиляции. Именно поэтому упомянутая выше команда специально приобрела компилирующую строительную машину для компиляции.
Хотя это решение осуществимо, очевидно, что это довольно разочаровывающий метод:
теперь это CNB Уже решили это за нас clone Код из-за проблемы со скоростью, будь то CNB Также предлагает программу компилироватькэшиз?
Есть из, и он очень продвинутый!
на основе Docker Экологическое строительство из CNB также очень ориентирован на облачные технологии и чрезвычайно продвинут в своих методах обработки.
Основной принцип заключается в хранении данных, которые необходимокэшизпродукт,Затем в компилируемой средеиз Docker Когда контейнер поднимется, пройдите volume После монтирования параметров кеш можно использовать в контейнере среды компиляции.
Docker пары игроков volumes Они все знакомы и распространены. rw/ro Два режима (режим чтения-записи и режим только чтения).
CNB Помимо этого, он также обеспечивает Copy-on-Write Режим, смонтированный в каталоге кэша контейнера, установлен. основе Реализован механизм копирования при записи. Копирование при записи (CoW Копирование во время записи позволяет системам совместно использовать одну и ту же копию данных до тех пор, пока данные не потребуют изменения, что позволяет эффективно копировать. В одновременной среде этот метод вида позволяет избежать конфликтов чтения и записи кэшиз,Потому что только тогда, когда данные действительно необходимо изменить,Будет создана личная копия данных.。
Этот вид томов + механизм копирования при записи значительно повышает одновременно производительность.
По словам официальный документ изконфигурация, пересмотреть конвейер изконфигурации, команда находится в стадии компиляции AOSP из времени, пройти Copy-on-Write изWAY кэш ./out Каталог, метод конфигурации очень простой, измените docker.volumes поля:
build_config: &aosp_build_config
runner:
cpus: 64
docker:
build: .ide/Dockerfile
# установить здесь volume кэш, заявленный как copy-on-write
volumes:
- out:copy-on-write
stages:
- name: build
env:
BUILD_HOSTNAME: cnb-build
shell: |
source build/envsetup.sh
lunch aosp_arm-eng
make -j64
script: bash -e -c "${shell}"
# тестодновременно 6 Тестирование трубопроводов
master:
push:
- *aosp_build_config
- *aosp_build_config
- *aosp_build_config
- *aosp_build_config
- *aosp_build_config
- *aosp_build_config
По словам официального quick start из Тестовый пример, модифицированный SurfaceFlinger.cpp Цвет системы по умолчанию Конфигурация и триггер 6 Конвейер компилирует несколько пакетов одновременно.
Как видно на скриншоте выше, после первой компиляции через CNB Конфигурация volume Монтировать Кэшиз проезд, 6 Параллельные трубопроводы уже имеются.
Потому что мы заявили, что это Copy-on-Write из СПОСОБ использоватькэш, в 6 Компиляция реализована во всех конвейерах 100% из Приращениекомпилировать,
Время компиляции сократилось с 46 минут и 40 секунд до 1 минуты и 30 секунд.
Docker Volume — это механизм сохранения и обмена данными.,Позволяет хранить данные вне контейнера (например, на хост-компьютере),Убедитесь, что данные не потеряны при уничтожении контейнера.,И поддерживает обмен данными между различными контейнерами.
CNB использовать Docker Volume Чтобы реализовать кэш, поддержите несколько стратегий кэширования, например :
Здесь мы используем Copy-on-Write Метод кэширования, познакомьтесь CNB как объединить CoW и Docker Volume добиться высокой эффективностиизкэш Стратегияиз。
Как упоминалось ранее, копирование при записи — это когда данные необходимо изменить.,Будет создана личная копия данных.,И операция чтения безопасна при одновременном запуске.
Давайте посмотрим на это с точки зрения монтирования файловой системы.,Когда появится сборочная линия,CNB Конфигурация обнаружена в файле Конфигурация volumes поле, которое появится в /data/cache Ниже создайте папку кэшиз, продукт пользователя кэшкомпилируйте.
когда мы заявляем volume кэшиспользовать Copy-on-Write из Тип тома данных при кэшизе, CNB Будет ли он по-прежнему оставаться на материнской машине? /data/copy-on-write Создать под 3 папка, верхняя dir、 work dir、 merged dir。
наконец прошло mount -t overlay установлен как CoW, среди которых lower dir ,то есть volume Папка, в которой находится кэш, Этот кэш в конечном итоге произойдет при запуске компилируемого контейнера (docker беги) прошло -v (volumes) из Как прикрепить к контейнеруизверно应目录下,Чтобы при работе трубопровода,Можно подавать прямо в контейнере.
Как вы можете видеть на рисунке ниже, в контейнере компиляции каталог кэша смонтирован в каталоге /workspace/out.
Когда имеется несколько сборочных линий одновременноиспользоватькэшиз,Ситуация аналогичная,У нас много сборочных линий,CNB будет создан путем создания нескольких наборов CoW папка (нижняя dir Все /data/cache/ каталог), несколько контейнеров сборки не конфликтуют друг с другом, другими словами, когда необходимо одновременно запускать несколько задач компиляции, CNB Можетодновременно命середина并использоватькомпилироватькэш,тем самымускорятьсякомпилироватьизпроцесс。
на основе Docker Экологическое строительство из ЧНБ, за исключением git-clone-yyds ускоряться clone Код из скорости, громкости Помимо скорости, он имеет и более взрывную функцию – дальнобойность. ЧНБ Удаленная разработка сочетает в себе вышеперечисленные преимущества:
Позже мы обсудим более подробную информацию об удаленном развитии.,Особенности того, как CNB одновременно решает сексуальные проблемы,Таким образом, обеспечивается бесперебойная и эффективная удаленная работа.
-End-
Автор оригинала|Ли Чжихан