Comprensione della media superiore e del carico


11

Sto osservando una media di carico elevato su una determinata macchina (circa 9) in tutti e tre i campi di carico. Comprendo il carico come il numero di processi nello stato "run" / attualmente desiderando tempo CPU. Sono corretto nel ragionare che se N processi sono in esecuzione sul mio computer, questo non può produrre un carico maggiore di N?

Inoltre, il carico conta rispetto a processi o thread? In altre parole, un processo multithread può produrre un carico maggiore di 1?


Si noti che (poiché di solito si prevede che vengano pianificati molto presto), anche le attività nello stato "ininterrotto" vengono considerate in esecuzione. Solo un dettaglio, non qualcosa che cambia la tua domanda.
Mattdm,

Risposte:


6

La media del carico è generalmente descritta come "lunghezza media della coda di esecuzione". Quindi pochi processi o thread che consumano CPU possono elevare LA sopra 1. Non c'è problema se LA è inferiore al numero totale di core CPU. Ma se supera il numero di CPU, ciò significa che alcuni thread / processi rimarranno in coda, pronti per essere eseguiti, ma in attesa di CPU libera.


3

I numeri utilizzati per calcolare la media del carico sono attività nello stato di esecuzione o ininterrotta e la quantità di lavoro svolto nella fascia oraria della media mobile. Queste attività possono far parte di un processo multithread. I campi sono sfocati tanto più indietro nel tempo a causa del livellamento dei risultati dall'algoritmo utilizzato.

Un carico di 1 equivale al 100% del lavoro di una CPU. Se avessi un'applicazione multithread che è riuscita ad avere un numero di thread attivi in ​​eccesso rispetto al numero di CPU disponibili, allora potresti avere un singolo processo che guida il carico sopra 1. Questo sarebbe probabilmente un picco a breve termine e non riflesso nel visualizzazioni delle porzioni di tempo più lunghe della media del carico.

Inoltre, poiché la media del carico è stata sviluppata prima che esistessero sistemi multi-core, è importante dividere i numeri di carico per il numero totale di core disponibili. Se si tratta di un carico sostenuto di 9 su un sistema quad core a 4 socket, si tratta di un carico di 9 su 16 e non è un problema.


1
- Devo ancora vedere un sistema in cui più core su un socket sono esposti allo spazio utente in un modo che li fa apparire come se non più CPU. Quindi, in cima, sul sistema quad-core a 4 socket, vengono visualizzate 16 CPU. (Quindi si può facilmente vedere che il carico di 9 è inferiore al numero di CPU.)
mattdm

Capisco che i numeri sono logaritmici, quindi sono appena al di sotto o al di sopra di 1. Un sistema che ho, ho visto il sistema riportare questo: carico medio: 10.41, 9.57, 9.26. Che cosa?? Perché un sistema linux dovrebbe riportare la media del carico: 0,81, 1,57, 0,98 mentre questo sistema riporta la media del carico: 10,41, 9,57, 9,26? Tutti gli unix non sono gli stessi su questo?
Djangofan,

3

Vedi kernel / sched / loadavg.c che ha un commento lungo ed eccellente all'inizio che spiega la derivazione della media del carico da una media esponenzialmente decadente del numero di thread eseguibili (la "coda di esecuzione") più il numero di thread ininterrotti (in attesa su I / O o in attesa di un blocco).

Ecco l'essenza del commento, ma vale la pena leggerlo per intero:

 * The global load average is an exponentially decaying average of
 * nr_running + nr_uninterruptible.
 *
 * Once every LOAD_FREQ:
 *     nr_active = 0;
 *     for_each_possible_cpu(cpu)
 *         nr_active += cpu_of(cpu)->nr_running +
 *                      cpu_of(cpu)->nr_uninterruptible;
 *     avenrun[n] = avenrun[0] *
 *                  exp_n + nr_active *
 *                  (1 - exp_n)

La vita reale rende il codice un po 'complesso: contatori per CPU, kernel tickless, CPU hotswap, mancanza di codice a virgola mobile che richiede un'implementazione a virgola fissa di exp (n). Ma è facile vedere che stanno tutti lavorando per attuare fedelmente il metodo descritto nel commento.

Noterai che Linux conta i thread , non solo i processi, che rispondono alla tua domanda.


0

Le 3 medie di carico sono qualcosa come una funzione logaritmica che ruota attorno al numero 1. Qualcosa di simile a f (x) = eX (e all'esponente X). Tecnicamente una rappresentazione in virgola fissa di una funzione di decadimento esponenziale che simula una media. Sono additivi, per CPU, quindi un carico completo potrebbe apparire come 4.00 su un sistema quad-core. Il primo numero è la media dell'ultimo minuto, il secondo è la media degli ultimi cinque minuti e il terzo è la media degli ultimi 15 minuti. Ho pensato che una risposta dovrebbe essere lasciata qui che lo menziona.


0

Caricamento istantaneo: numero di attività in esecuzione o in attesa di esecuzione o, in altro modo, il numero di attività disposte a essere eseguite

Carico medio: la misura sopra ma media esponenzialmente con campioni precedenti della stessa misura

Entrambi questi numeri sono illimitati e spesso molto più grandi di N.

Per essere chiari: il conteggio dei carichi su Linux include thread, non ci sono dubbi. È possibile produrre un carico arbitrariamente grande con un singolo processo che crea molti thread.

Maggiori informazioni qui

http://blog.angulosolido.pt/2015/04/linux-load-average-definitive-summary.html

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.