Время компиляции: 46 минут → 1 минута, этот артефакт CI довольно мощный!
Время компиляции: 46 минут → 1 минута, этот артефакт CI довольно мощный!

Недавно команда разработчиков облачных технологий разработала проект, который занял 124,44 ГБ дискового пространства и более 1400 складов. Такой масштаб кода сталкивается с такими проблемами, как длительное время извлечения, большое использование дискового пространства, низкая эффективность и ограниченное параллельное создание. Столкнувшись с этими постоянными проблемами, команда поняла, что необходимо фундаментально решить проблему скорости клонирования кода, которая не только связана с эффективностью разработки, но и напрямую влияет на процесс CI/CD и использование ресурсов.

Итак, мы обратили внимание на этот недавно выпущенный артефакт CI. Эта статья представляет собой подробное техническое объяснение части компиляции.

Следите за разработчиками Tencent Cloud и заранее получайте техническую информацию из первых рук👇

в предыдущей статье《125G Код, готовый к выполнению за 10 секунд: это CI Артефакт немного мощный! 》середина,Мы поделились, как пройти CNB из git-clone-yyds плагин, поставь 125 GB База кода из времени клонирования с 20 минут до 10 В течение нескольких секунд. Это значительно сократило время работы трубопровода нашей команды и значительно повысило эффективность строительства.

Однако при фактическом выполнении индивидуальной разработки для AOSP мы столкнулись с более сложной проблемой:

Даже если база кода успешно клонирована, процесс,Полная реализация такой огромной базы кода по-прежнему остается очень трудоемким процессом.,Это занимает около 46 минут.

Традиционные стратегии решения, то естьвернокомпилироватьпродуктизкэш,Избегайте последующих сборок и полных перестроек.,Ускорьте процесс компиляции. Именно поэтому упомянутая выше команда специально приобрела компилирующую строительную машину для компиляции.

Хотя это решение осуществимо, очевидно, что это довольно разочаровывающий метод:

  1. Одномашинный компилированиекэш ограничивает возможности параллельной компиляции.
  2. Увеличение сложности и стоимости управления продуктом.

теперь это CNB Уже решили это за нас clone Код из-за проблемы со скоростью, будь то CNB Также предлагает программу компилироватькэшиз?

Есть из, и он очень продвинутый!

01. CNB использует тома для монтирования кеша

на основе Docker Экологическое строительство из CNB также очень ориентирован на облачные технологии и чрезвычайно продвинут в своих методах обработки.

Основной принцип заключается в хранении данных, которые необходимокэшизпродукт,Затем в компилируемой средеиз Docker Когда контейнер поднимется, пройдите volume После монтирования параметров кеш можно использовать в контейнере среды компиляции.

Docker пары игроков volumes Они все знакомы и распространены. rw/ro Два режима (режим чтения-записи и режим только чтения).

CNB Помимо этого, он также обеспечивает Copy-on-Write Режим, смонтированный в каталоге кэша контейнера, установлен. основе Реализован механизм копирования при записи. Копирование при записи (CoW Копирование во время записи позволяет системам совместно использовать одну и ту же копию данных до тех пор, пока данные не потребуют изменения, что позволяет эффективно копировать. В одновременной среде этот метод вида позволяет избежать конфликтов чтения и записи кэшиз,Потому что только тогда, когда данные действительно необходимо изменить,Будет создана личная копия данных.。

Этот вид томов + механизм копирования при записи значительно повышает одновременно производительность.

По словам официальный документ изконфигурация, пересмотреть конвейер изконфигурации, команда находится в стадии компиляции AOSP из времени, пройти Copy-on-Write изWAY кэш ./out Каталог, метод конфигурации очень простой, измените docker.volumes поля:

Язык кода:javascript
копировать
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 секунд.

02. Принцип кэширования томов CNB

Docker Volume — это механизм сохранения и обмена данными.,Позволяет хранить данные вне контейнера (например, на хост-компьютере),Убедитесь, что данные не потеряны при уничтожении контейнера.,И поддерживает обмен данными между различными контейнерами.

CNB использовать Docker Volume Чтобы реализовать кэш, поддержите несколько стратегий кэширования, например :

  • чтение-запись: читать и писать,Конфликты одновременной записи необходимо решать самостоятельно.,Подходит для сценариев серийной сборки
  • только для чтения: только для чтения, операция записи выдает исключение
  • копирование при записи: чтение и запись,Изменения объединяются после успешной сборки.,Применимо к сценариям одновременной сборки.
  • копирование при записи только для чтения: только чтение, изменения отбрасываются после завершения сборки
  • data: создайте временный том данных, который будет автоматически очищен в конце конвейера.

Здесь мы используем 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 Можетодновременно命середина并использоватькомпилироватькэш,тем самымускорятьсякомпилироватьизпроцесс。

03. Больше способов игры — удаленная разработка

на основе Docker Экологическое строительство из ЧНБ, за исключением git-clone-yyds ускоряться clone Код из скорости, громкости Помимо скорости, он имеет и более взрывную функцию – дальнобойность. ЧНБ Удаленная разработка сочетает в себе вышеперечисленные преимущества:

  1. Запустите удаленное рабочее пространство за считанные секунды,С помощью git-clone-yyds Обеспечьте клонирование кода второго уровня, значительно сократите время инициализации и поддержите web IDE местный VSCode Remote Подключайтесь и повышайте эффективность.
  2. Достичь быстрого результата из инкрементальной компиляции,Эффективно используя объемы компилироватькэш, делая даже огромные проекты, такие как AOSP,Модификацию и компиляцию кода также можно выполнить быстро.,Позвольте пользователям насладиться удобством немедленного просмотра изменений.
  3. поддерживатьодновременноиспользоватьудаленное рабочее пространстворазвивать。в целомразвивать者自建 code server Из удаленного развития, хотя оно также поставляется с кэшем, часто оно является только однопользовательским и не может поддерживать многопользовательские рабочие пространства. На самом деле не факт, что над одним проектом одновременно работает несколько человек. ЧНБ удаленныйразвиватьподдерживать多人одновременноиспользоватьудаленное рабочее пространстворазвивать,общий кэш,Но не мешайте друг другу,В то же время наслаждайтесь запуском второго уровня и быстрой компиляцией.

Позже мы обсудим более подробную информацию об удаленном развитии.,Особенности того, как CNB одновременно решает сексуальные проблемы,Таким образом, обеспечивается бесперебойная и эффективная удаленная работа.

-End-

Автор оригинала|Ли Чжихан

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose