2010-08-05 9 views
11

In Trasforma questa bandiera esiste:Come determinare un buon valore per --load-average usando gnu Make?

-l [carico], --load-media [= carico] Specifica che nessuna nuovi posti di lavoro (comandi) deve essere iniziato se non ci sono altri lavori in esecuzione e il carico la media è almeno il carico (un numero in virgola mobile). Senza argomenti, rimuove un limite di carico precedente.

Avete una buona strategia per quale valore utilizzare per il limite di carico? Sembra molto diverso tra le mie macchine.

risposta

3

Il carico accettabile dipende dal numero di core della CPU. Se c'è un core, la media del carico più di 1 è sovraccarico. Se ci sono quattro core, il carico medio di più di quattro è sovraccarico.

Le persone spesso specificano solo il numero di core usando -j switch.

vedere alcuni numeri empirici qui: https://stackoverflow.com/a/17749621/412080

+2

Sperimentalmente se Ho notato su una macchina mentre temporizzazione diverso utilizzo -j I ho ottenuto le compilazioni più veloci usando -j8 su una macchina a 4 core. – Zitrax

+2

Ho esperienza simile. Probabilmente perché ci sono alcuni stadi di compilazione con I/O, così che quando un processo del compilatore blocca per I/O un altro può usare quel tempo per la compilazione. –

3

vi consiglio di non usare l'opzione -l.

In linea di principio, -l sembra superiore a -j. -j dice, inizia molti lavori. -l dice, assicurati che molti lavori siano in esecuzione. Spesso, quelli sono quasi la stessa cosa, ma quando si hanno lavori di I/O rilegati sono altre stranezze, quindi -l dovrebbe essere migliore.

Detto questo, il concetto di carico medio è un po 'dubbio. È necessariamente un campione di ciò che accade sul sistema. Quindi, se si esegue make -j -l N (per alcuni N) e si dispone di un file di testo ben scritto, quindi eseguirà immediatamente un numero elevato di lavori e esaurirà i descrittori di file o la memoria prima che anche il primo campione del carico di sistema possa essere prelevato. Inoltre, la contabilizzazione della media del carico varia da un sistema operativo all'altro e alcuni oscuri non ne hanno affatto.

In pratica, sarete ugualmente fuori usando -j e avrete meno mal di testa. Per ottenere più prestazioni dalla build, ottimizzare i makefile, giocare con le opzioni del compilatore e usare ccache o simili.

(temo il motivo originale per l'opzione -l deriva da un momento in cui più processori erano rari e I/O era molto lento.)

+1

Hai provato questo ultimamente? A partire da GNU make 3.81 (rilasciato nel 2006) GNU rende implementare un algoritmo per regolare la sua idea del carico medio del sistema in base al numero di lavori invocati da make nell'ultimo secondo. Ovviamente non è l'ideale, dal momento che è solo un'ipotesi, ma è opportuno che 100 anni di lavoro vengano richiamati immediatamente all'avvio. – MadScientist

+1

Non so quanto sia diventato più intelligente internamente, ma il comportamento che sta per iniziare molti lavori subito è ancora facilmente riproducibile. –

+1

Sfortunatamente, nella mia esperienza hai anche bisogno di -l. Il problema è che spesso si hanno più sistemi di creazione complessi che non si conoscono necessariamente l'uno con l'altro, quindi il meccanismo che condivide il conteggio dei lavori non è sempre utile.(Provate cose come builds che includono openssl, dbus, curl e una dozzina di altre librerie per Android e iOS, dovrete dare il via a build che non fanno realmente parte del vostro sistema di compilazione.) –