make -j (n+1)
Published agosto 24th, 2006 in SoftwareUn pastor amigo meu escribiu sobre o valor axeitado para o parámetro de configuración CONCURRENCY_LEVEL de make-kpkg. Chega á conclusión de que para o seu Intel Core Duo, polo tanto 2 CPUs, o valor óptimo é 2, despois de comprobar que con 3 daban uns valores lixeiramente superiores.
Este resultado deixoume un tanto confundido. Nesta entrada intentarei explicar de onde veñen eses dous valores, 2 e 3, e porque o último se suxería como óptimo.
n ou n+1?
make-kpkg emprega CONCURRENCY_LEVEL para pasarllo a make como valor para o parámetro -j. Este parámetro indica o número de traballos que se executan ó mesmo tempo ou, en caso de non indicar un valor, arrincar tódolos posibles. Para que se poidan lanzar varios traballos ó mesmo tempo deben existir regras independentes, é dicir, regras con ficheiros fonte distintos.
Dende sempre oira que para alcanzar un maior rendimento á hora de compilar debíase empregar: make -j (n+1), sendo n o número de CPUs. Nunca pensara no motivo ata agora.
As CPUs modernas poden facer varias cousas ó mesmo tempo: executar instruccións e facer operacións de entrada/saída. Cando un proceso ten que facer unha operación de entrada/saída bloquéase ata que esa operación se realizou, momento no que volve a estar preparado para seguir executándose. Mentres que este proceso esta bloqueado, a CPU segue a execución doutro.
Así, o n+1 pretende aproveitar ciclos de CPU nos que algún dos procesos lanzados por make esté facendo unha operación de entrada/saída.
É un mito o de make -j (n+1)?
Hai varias razóns polas que o valor óptimo sexa n en vez de n+1:
- Memoria RAM limitada: os procesos poden consumir moita memoria chegando a consumir toda a RAM e facendo que a máquina empece a swapear.
- Ficheiros cacheados: o sistema operativo garda en memoria os últimos ficheiros accedidos para que en caso dun novo acceso non haxa que ir a disco duro, eliminando as operacións de entrada/saída.
- Sistema de escritorio: Nun sistema con moitos procesos non se producen ciclos de CPU sen se aproveitar. Isto poderíase solucionar dándolle a make unha prioriedade alta con nice.
Ligazóns:
chúzame -




Unha explicación que aclaroume o dilema, pero ainda así seguirei investigando no tema. Grazas polos enlaces, seranme de axuda.