Es probable que todos los usuarios de Bazel hayan experimentado compilaciones lentas o más lentas que lo previsto. Mejorar el rendimiento de compilaciones individuales tiene un valor particular para objetivos con impacto significativo, como los siguientes:
Objetivos principales del desarrollador que se iteran y (re)compilan con frecuencia.
Bibliotecas comunes de las que dependen ampliamente otros objetivos
Un objetivo representativo de una clase de objetivos (p.ej., reglas personalizadas) diagnosticar y solucionar problemas en una compilación puede ayudar a resolverlos a mayor escala.
Un paso importante para mejorar el rendimiento de las compilaciones es comprender dónde se gastan todos los recursos. En esta página, se enumeran las diferentes métricas que puedes recopilar. Muestras de desglosa el rendimiento de la compilación cómo puedes usar estas métricas para detectar y corregir problemas de rendimiento de compilación.
Existen varias formas principales de extraer métricas de tus compilaciones de Bazel, como las siguientes:
protocolo de eventos de compilación (BEP)
Bazel genera una variedad de búferes de protocolo.
build_event_stream.proto
a través del protocolo de eventos de compilación (BEP), que
pueden agregarse a través de un backend
que especifiques. Según tus casos de uso,
puede decidir agregar las métricas de varias maneras, pero aquí
sobre algunos conceptos y campos proto que serían útiles de tener en cuenta en general.
Comandos de Bazel para consultas, cquery y aquery
Bazel proporciona 3 modos de consulta diferentes (consulta, cquery y aquery) que permiten a los usuarios para consultar el gráfico de destino, el gráfico de destino configurado y el gráfico de acción respectivamente. El lenguaje de consulta proporciona un paquete de funciones que se puedan usar en los diferentes modos de consulta, que te permiten personalizar tus consultas según tus necesidades.
Perfiles de seguimiento de JSON
Para cada invocación de Bazel similar a una compilación, Bazel escribe un perfil de seguimiento en JSON. de un conjunto de datos tengan un formato común. El perfil de seguimiento de JSON puede sería muy útil para comprender rápidamente a qué dedicaba Bazel durante el invocación.
Registro de ejecución
El registro de ejecución puede ayudarte a solucionar problemas y corregir errores.
aciertos de caché remota faltantes debido a diferencias de máquina y entorno, o
y no deterministas. Si pasas la bandera
--experimental_execution_log_spawn_metrics
(disponible a partir de Bazel 5.2) también contendrá métricas de generación detalladas,
acciones ejecutadas de forma local y remota. Puedes usar estas métricas, por ejemplo, para
comparar el rendimiento de la máquina local
y el de la máquina remota o averiguar
qué parte de la ejecución de la generación es coherentemente más lenta de lo esperado (para
ejemplo debido a la fila).
Registro del grafo de ejecución
Si bien el perfil de seguimiento JSON contiene la información de la ruta crítica, a veces
necesitas información adicional en el gráfico de dependencia de las acciones ejecutadas.
A partir de Bazel 6.0, puedes pasar las marcas
--experimental_execution_graph_log
y
--experimental_execution_graph_log_dep_type=all
para escribir un registro sobre el
las acciones ejecutadas y sus interdependencias.
Esta información se puede usar para comprender el arrastre que agrega un nodo en la ruta crítica. El arrastre es la cantidad de tiempo que se puede ahorrar quitando un nodo específico del grafo de ejecución.
Los datos te ayudan a predecir el impacto de los cambios en la compilación y el gráfico de acciones. antes de implementarlas.
Comparativas con Bazel-bench
El banco de Bazel es un de compilación para proyectos de Git, que permite comparar el rendimiento de compilación en el los siguientes casos:
Comparativas del proyecto: Compara dos confirmaciones de Git entre sí en un versión única de Bazel. Se usan para detectar regresiones en tu compilación (a menudo, a través de la adición de dependencias).
Comparativas de Bazel: Son comparativas de dos versiones de Bazel entre sí en una sola confirmación de Git. Se usa para detectar regresiones en el mismo Bazel (si mantener / bifurcar Bazel).
Las comparativas supervisan el tiempo de pared, el tiempo de CPU y el tiempo del sistema, así como la retención el tamaño del montón de memoria.
También se recomienda ejecutar Bazel Bench en máquinas físicas dedicadas que no estén ejecutando otros procesos para reducir las fuentes de variabilidad.