2010-08-05 7 views
11

En Haga existe esta bandera:Cómo determinar un buen valor para - cargar promedio usando gnu Make?

-l [carga], --load de la media [= carga] Especifica que no hay nuevos puestos de trabajo (comandos) debe iniciarse si hay otros trabajos en ejecución y la carga el promedio es al menos carga (un número de coma flotante). Sin argumentos, elimina un límite de carga anterior.

¿Tiene una buena estrategia para qué valor usar para el límite de carga? Parece diferir mucho entre mis máquinas.

Respuesta

3

La carga aceptable depende de la cantidad de núcleos de la CPU. Si hay un núcleo, el promedio de carga más de 1 es sobrecarga. Si hay cuatro núcleos, el promedio de carga de más de cuatro es sobrecarga.

Las personas a menudo solo especifican el número de núcleos utilizando el modificador -j.

ver algunos números empíricos aquí: https://stackoverflow.com/a/17749621/412080

+2

Experimentalmente aunque me di cuenta en una máquina, durante la temporización uso diferente de I -j obtuve las compilaciones más rápidas usando -j8 en una máquina de 4 núcleos. – Zitrax

+2

Tengo una experiencia similar. Probablemente porque hay algunas etapas de compilación vinculadas a E/S, de modo que cuando un proceso de compilación bloquea las E/S, otro puede usar ese tiempo para compilar. –

3

que se oponen al uso de la opción -l.

En principio, -l parece superior a -j. -j dice, comience este muchos trabajos. -l dice, asegúrese de que se estén ejecutando muchos trabajos. A menudo, esos son casi lo mismo, pero cuando tienes trabajos vinculados con E/S son otras rarezas, entonces -l debería ser mejor.

Dicho esto, el concepto de promedio de carga es un poco dudoso. Es necesariamente una muestra de lo que sucede en el sistema. Por lo tanto, si ejecuta make -j -l N (para algunos N) y tiene un archivo MAKE bien escrito, entonces make iniciará inmediatamente una gran cantidad de trabajos y se quedará sin descriptores de archivos o memoria antes de que se pueda tomar la primera muestra de la carga del sistema. Además, la contabilidad del promedio de carga difiere en los sistemas operativos, y algunos oscuros no la tienen en absoluto.

En la práctica, te irá tan bien usando -j y tendrás menos dolores de cabeza. Para obtener un mayor rendimiento de la compilación, ajuste sus archivos make, juegue con las opciones del compilador y use ccache o similar.

(Sospecho que la razón original para la opción -l se debe a un momento en que varios procesadores eran raros y de E/S fue muy lento.)

+1

¿Has probado esto últimamente? A partir de GNU make 3.81 (lanzado en 2006) GNU make implementa un algoritmo para ajustar su idea del promedio de carga del sistema en función del número de trabajos invocados por make en el último segundo. Esto no es ideal, por supuesto, ya que es solo una suposición, pero debe evitar que se invoquen cientos de trabajos de inmediato cuando comience. – MadScientist

+1

No sé cuánto más inteligente se ha obtenido internamente, pero el comportamiento que va a iniciar muchos trabajos de inmediato sigue siendo fácilmente reproducible. –

+1

Desafortunadamente, en mi experiencia también necesita -l. El problema es que a menudo tendrás múltiples sistemas complejos que no necesariamente se conocen unos a otros, por lo que el mecanismo que comparte el recuento de trabajos no siempre es útil.(Prueba cosas como compilaciones que incluyen openssl, dbus, curl y una docena de otras bibliotecas para Android e iOS; vas a estar lanzando compilaciones que no son realmente parte de tu propio sistema de compilación). –

Cuestiones relacionadas