Red de conocimiento informático - Material del sitio web - Cómo acelerar la compilación de Linux Android

Cómo acelerar la compilación de Linux Android

El proyecto es cada vez más grande y es necesario volver a compilar todo el proyecto cada vez, lo cual es una pérdida de tiempo. Después de investigar un poco, descubrí que los siguientes métodos pueden ayudar a mejorar la velocidad.

1. Utilice tmpfs para reemplazar parte de la lectura/escritura de IO

2. ccache, puede configurar el archivo de caché ccache en tmpfs, pero en este caso, cada vez que inicie, ccache Todos los archivos almacenados en caché se perderán

3. distcc, compilación multimáquina

4. Imprima la salida de la pantalla en un archivo de memoria o /dev/null para evitar ralentizar el terminal dispositivo (equipo lento).

tmpfs

Algunas personas dicen que usar RAMDisk en Windows puede reducir el tiempo de compilación de un proyecto de 4,5 horas a 5 minutos. Quizás ese número sea un poco exagerado, pero si lo piensas bien, tener archivos en la memoria para compilarlos debería ser mucho más rápido que ponerlos en el disco, especialmente si el compilador necesita generar muchos archivos temporales.

Este método es el más económico de implementar y en Linux es tan sencillo como montar tmpfs. No existen requisitos sobre el proyecto que se está compilando y no es necesario cambiar el entorno de compilación.

mount -t tmpfs tmpfs ~/build -o size=1G

Usa el kernel de Linux 2.6.32.2 para probar la velocidad de compilación:

Usa el disco físico: 40 puntos 16 segundos

Usando tmpfs: 39 minutos y 56 segundos

¡Uf! ......., nada cambió. Parece que el cuello de botella de la velocidad de compilación lenta no es principalmente IO. Pero en proyectos reales, pueden ocurrir operaciones intensivas de IO, como el empaquetado durante la compilación, por lo que es beneficioso usar tmpfs siempre que sea posible. Por supuesto, para proyectos grandes, necesitará suficiente memoria para manejar la sobrecarga de tmpfs.

make -j

Dado que IO no es un cuello de botella, la CPU debería ser un factor importante que afecte la velocidad de compilación.

Utilice make -j con parámetros para compilar proyectos en paralelo. Por ejemplo, en una máquina de doble núcleo, puede utilizar make -j4, que permite que make ejecute hasta 4 comandos de compilación al mismo tiempo. , que es más eficiente. Utilice los recursos de la CPU de manera eficiente.

Aún usando Kernel para pruebas:

Usando make: 40 minutos y 16 segundos

Usando make -j4: 23 minutos y 16 segundos

Usando make -j8: 22 minutos y 59 segundos

Desde este punto de vista, en CPU multinúcleo, una compilación paralela adecuada aún puede mejorar significativamente la velocidad de compilación. Sin embargo, no debe paralelizar demasiadas tareas, normalmente el doble de núcleos de CPU.

Sin embargo, esta solución no es completamente gratuita. Si el Makefile del proyecto no está estandarizado y las dependencias no están configuradas correctamente, el resultado de la compilación paralela es que la compilación no puede continuar con normalidad. Si las dependencias se establecen de manera demasiado conservadora, la compilación en sí puede volverse menos paralelizable y se pueden obtener resultados subóptimos.

ccache

Cómo funciona ccache:

ccache también es un controlador de compilación. La primera vez, ccache almacenará en caché la salida "-E" de GCC, las opciones de compilación y los archivos .o en $HOME/.ccache. La segunda vez, intentará utilizar el caché y actualizarlo si es necesario. Así que incluso "limpiar; hacer" se beneficiará de esto. ccache fue escrito con mucho cuidado para garantizar que obtenga exactamente el mismo resultado que usando GCC directamente.

ccache se utiliza para almacenar en caché los resultados intermedios de la compilación para ahorrar tiempo al volver a compilar. Esto es útil cuando se trabaja con kernels, ya que a menudo es necesario modificar parte del código del kernel y luego volver a compilarlo, y es posible que la mayor parte del contenido no haya cambiado entre compilaciones. Lo mismo ocurre con los proyectos de desarrollo en general.

¿Por qué no utilizar simplemente la compilación incremental compatible con make? ¿O es porque en realidad, debido a la irregularidad del Makefile, es posible que esta solución "inteligente" no funcione en absoluto? La única forma es limpiar y volver a hacer cada vez.

Después de instalar ccache, puede crear enlaces simbólicos para gcc, g++, ct++, cc en /usr/local/bin y vincularlos a /usr/bin/ccache. En resumen, asegúrese de que su sistema llame a ccache cuando llame a comandos como gcc (normalmente /usr/local/bin aparecerá antes de /usr/bin en la RUTA).

Otro método de instalación es:

vi ~/.bash_profile

Agregar /usr/lib/ccache/bin a PATH

PATH =/usr/lib/ccache/bin:$PATH:$HOME/bin

De esta manera, el sistema llamará a ccache cada vez que se inicie g++.

Esto iniciará /usr/lib/ccache/bin/g++ cada vez que se inicie g++, en lugar de /usr/bin/g++

El efecto es el mismo que usarlo desde la línea de comando ccache g++ tiene el mismo efecto

Esto iniciará automáticamente ccache cada vez que el usuario inicie sesión y use el compilador g++