Перейти к содержимому

Аналитика сборок Rust

Build Insights помогает найти, что замедляет ваши сборки Cargo, и выявить регрессии до того, как они повлияют на всю команду. Вы можете сравнивать локальные сборки со сборками в CI, отслеживать изменения времени сборки и проверять крейты, скомпилированные в каждой сборке.

Requirements

Отправка отчетов о сборках#

Выполняйте обычные команды Cargo через Tuist:

bash
tuist cargo build --workspace
tuist cargo check --all-targets
tuist cargo +nightly build --features tracing

Если вы используете mise, настройте обертку для Cargo, чтобы продолжать использовать обычные команды cargo. Ваши аргументы, выбор тулчейна, вывод и код завершения останутся прежними.

Поиск причин замедления сборки#

Откройте сборку в разделе Сборки → Запуски сборок на панели управления. Используйте фильтры по дате, окружению и версии Rust, чтобы сравнивать похожие сборки. Данные о сборках и их счетчиках кэша также доступны через tuist build cargo list и tuist build cargo show, GET /api/projects/{account_handle}/{project_handle}/cargo/builds, а также инструменты list_cargo_builds и get_cargo_build MCP.

На вкладке Обзор используйте раздел Задачи компилятора, чтобы найти медленные крейты. Сортируйте по Длительности или Начато после (время с момента запуска команды Cargo) или выполняйте поиск по имени крейта или корневому исходному файлу.

Каждая строка соответствует одному вызову rustc для крейта, который может содержать множество исходных файлов. Корень крейта указывает его корневой исходный файл; длительность относится ко всей задаче компилятора, а не только к этому файлу. Крейт может встречаться несколько раз для разных целей или конфигураций. Сообщения компилятора сгруппированы в разделах Предупреждения и Ошибки.

Отслеживание крейтов между сборками#

Для проектов, участвующих в постепенном внедрении истории крейтов, раздел Сборки → Крейты показывает наблюдаемые крейты и историю их компиляции. Откройте крейт, чтобы сравнить записанные длительности и результаты между сборками, а затем перейдите от компиляции к соответствующей сборке Cargo. Тот же инвентарь доступен через /cargo/crates в API проекта и общие инструменты MCP для сущностей сборки с параметром kind: cargo_crates.

Крейты группируются по точному записанному корневому пути, имени и типу. Изменение путей клонирования может разделить истории; профили, возможности и тройки целей не различаются. Это инвентарь наблюдаемых задач компилятора, а не всех крейтов в вашем рабочем пространстве. Кэшированные или актуальные крейты не создают образцы компиляции.

Атрибуция отчетов о сборках#

Аутентифицированные отчеты идентифицируют конкретного пользователя за личными учетными данными. Общие учетные данные могут не указывать на конкретного пользователя. При необходимости установите TUIST_ACTOR_ID в стабильный непрозрачный идентификатор на машине, отправляющей отчет; по умолчанию эта функция отключена, и значение отображается как непроверенное утверждение, которое никогда не используется для авторизации. Старые серверы могут игнорировать это утверждение. Не помещайте в него секреты.

Анализ временных показателей#

Длительность сборки — это время выполнения всей команды Cargo. Задачи компилятора могут выполняться параллельно, поэтому их длительности не суммируются в общую длительность сборки.

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

Tuist не измеряет скрипты сборки отдельно и не показывает временную шкалу сборки. В большой сборке отображаются первые 500 задач компилятора с уведомлением, если было записано больше.

Анализ измерений кэша#

tuist cargo включает экспериментальный кэш компиляции, реализованный в CLI Tuist. Следуйте руководству по кэшу Rust для настройки, удаленного чтения и записи через Kura, поддерживаемых компиляций и устранения неполадок.

Откройте раздел Cargo Cache в боковой панели проекта, чтобы отслеживать процент попаданий в кэш и записанные показатели передачи, задержки и пропускной способности между сборками. Фильтруйте по дате или окружению, переключайтесь между дневными трендами и процентом попаданий для отдельных сборок или откройте недавнюю сборку, чтобы проверить активность кэша. Сборки без измерений кэша остаются недоступными, а не учитываются как нулевые.

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

  • Кэшируемые задачи показывают, какие задачи компилятора и скриптов сборки повторно использовали кэшированные выходные данные. Ищите или фильтруйте задачи, проверяйте задержку чтения/записи кэша и разверните строку, чтобы увидеть ее выходные данные.
  • Выходные данные CAS показывают загрузки и выгрузки артефактов с указанием их размеров, длительности и пропускной способности. Диаграмма учитывает завершенные передачи; уже присутствующие артефакты и неудачные попытки остаются в таблице.

Попадание означает, что кэшированные выходные данные были повторно использованы. Промах означает, что задача была скомпилирована заново. Попадания не разделяются на локальные и удаленные; раздел «Выходные данные CAS» показывает записанные операции с артефактами.

Если подробные записи отсутствуют или неполны, страница показывает уведомление. Сводка все равно охватывает всю сборку. Оцененная избегнутая работа компилятора — это не сэкономленное время сборки.

Experimental compilation cache

Кэш является экспериментальным и протестирован на Mac с Apple Silicon. Библиотеки кэшируются по источникам, которые читал компилятор; скрипты сборки, процедурные макросы, исполняемые файлы и нативный код кэшируются только на Mac с Apple Silicon. Ключи кэша заменяют пути клонирования и тулчейна заполнителями, поэтому клонирование по другому пути на той же машине позволяет их повторно использовать. Инкрементальные компиляции выполняются обычно.

Сборки, запускающие тесты#

tuist cargo test сообщает длительность всей команды, включая ее тесты. Он также сообщает результаты отдельных тестов, включая doctests, через Rust Test Insights. Результаты отдельных тестов появляются в разделе Тесты; длительность команды отображается в аналитике сборок.

Другие инструменты компилятора#

Tuist сохраняет существующие обертки компилятора, настроенные через RUSTC_WRAPPER, CARGO_BUILD_RUSTC_WRAPPER или конфигурацию Cargo, и оставляет RUSTC_WORKSPACE_WRAPPER без изменений. Существующая глобальная обертка отключает кэш Tuist и наблюдатель компилятора: Tuist не может установить, действительно ли эта обертка запускала rustc. Пользовательские обертки рабочего пространства также могут привести к меньшему количеству задач компилятора в отчете.

Tuist находит Cargo через rustup. Если вы используете пользовательскую установку, установите TUIST_CARGO_EXECUTABLE в путь к исполняемому файлу. Вызов Cargo по прямому пути тулчейна обходит обертку mise. Алиас Cargo не может заменить встроенную команду, такую как build.

Если вы используете ночную опцию -C Cargo, сначала перейдите в рабочее пространство: Tuist перенаправляет команды -C, но не собирает их данные о времени сборки.

Устранение неполадок#

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

bash
TUIST_DEBUG=1 tuist cargo build --workspace

Отчетность не влияет на результат вашей сборки.