/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
loadavg
Fra : mtg


Dato : 27-09-04 14:19

Hvad præcis betyder de tal som loadavg spytter ud?



 
 
Peter Makholm (27-09-2004)
Kommentar
Fra : Peter Makholm


Dato : 27-09-04 14:21

"mtg" <mtg@nospam.dk> writes:

> Hvad præcis betyder de tal som loadavg spytter ud?

Den præcise definition er lidt forskellig fra system til system.

Under linux er load et udtryk for det gennemsnitlige antal processer
der enten er villig til at bruge processtid eller er i den tilstand
kernen kalder 'uninteruptible sleep'.

--
Peter Makholm | I laugh in the face of danger. Then I hide until
peter@makholm.net | it goes away
http://hacking.dk | -- Xander

Thomas S. Iversen (27-09-2004)
Kommentar
Fra : Thomas S. Iversen


Dato : 27-09-04 14:30

On 2004-09-27, Peter Makholm <peter@makholm.net> wrote:
> "mtg" <mtg@nospam.dk> writes:
>
>> Hvad præcis betyder de tal som loadavg spytter ud?
>
> Den præcise definition er lidt forskellig fra system til system.
>
> Under linux er load et udtryk for det gennemsnitlige antal processer
> der enten er villig til at bruge processtid eller er i den tilstand
> kernen kalder 'uninteruptible sleep'.

Og forskellen i de 3 tal er:

"The load average numbers give the average number of jobs in the run queue
over the last 1, 5, and 15 minutes."

Det første tal er altså som det ser ud her inden for det sidste minut
Det andet er hvordan det har set ud de sidste 5 minutter (i gennemsnit)
Det tredie .... 15 minutter.

Thomas

Kasper Dupont (29-09-2004)
Kommentar
Fra : Kasper Dupont


Dato : 29-09-04 13:34

"Thomas S. Iversen" wrote:
>
> "The load average numbers give the average number of jobs in the run queue
> over the last 1, 5, and 15 minutes."

Den formulering er dog ikke helt korrekt. Det
er faktisk ikke gennemsnittet for et specifikt
interval, men derimod et expontential fading
average. Hvad de 1, 5 og 15 minutter så helt
præcist dækker over ved jeg ikke, måske er det
halveringstiden.

--
Kasper Dupont

Jesper Louis Anderse~ (27-09-2004)
Kommentar
Fra : Jesper Louis Anderse~


Dato : 27-09-04 19:21

Peter Makholm <peter@makholm.net> wrote:

>> Hvad pr?cis betyder de tal som loadavg spytter ud?
>
> Den pr?cise definition er lidt forskellig fra system til system.
>
> Under linux er load et udtryk for det gennemsnitlige antal processer
> der enten er villig til at bruge processtid eller er i den tilstand
> kernen kalder 'uninteruptible sleep'.

Ifoelge OpenBSD er loadavg paa sadanne systemer det
gennemsnitslige antal processer der enten er runable. Det er i ald
fald det jeg faar ud af OpenBSDs w(1) manpage.



--
j.

Kristian Thy (28-09-2004)
Kommentar
Fra : Kristian Thy


Dato : 28-09-04 20:03

Jesper Louis Andersen uttered:
> det gennemsnitslige antal processer der enten er runable.

Den lader vi lige stå et øjeblik, mens jeg klør mig i nakken...



\\kristian
--
http://lpf.ai.mit.edu/Patents/knuth-to-pto.txt
http://home.att.net/~jbcole/humor/Microsoft_patents.htm

Christian Iversen (28-09-2004)
Kommentar
Fra : Christian Iversen


Dato : 28-09-04 22:20

Kristian Thy wrote:

> Jesper Louis Andersen uttered:
>> det gennemsnitslige antal processer der enten er runable.
>
> Den lader vi lige stå et øjeblik, mens jeg klør mig i nakken...

Det er fordi OpenBSD (og for den sags skulle alle slags unix) har flere
processstadier. Derfor er en proces enten runable, eller også.

--
M.V.H
Christian Iversen

Kristian Thy (28-09-2004)
Kommentar
Fra : Kristian Thy


Dato : 28-09-04 23:04

Christian Iversen uttered:
> Kristian Thy wrote:
>
>> Jesper Louis Andersen uttered:
>>> det gennemsnitslige antal processer der enten er runable.
>>
>> Den lader vi lige stå et øjeblik, mens jeg klør mig i nakken...
>
> Det er fordi OpenBSD (og for den sags skulle alle slags unix) har flere
> processstadier. Derfor er en proces enten runable, eller også.

Er det en gætteleg, eller prøver I at holde noget hemmeligt for mig?
Runnable, eller også _hvad_???

\\kristian
--
http://lpf.ai.mit.edu/Patents/knuth-to-pto.txt
http://home.att.net/~jbcole/humor/Microsoft_patents.htm

Anders Lund (29-09-2004)
Kommentar
Fra : Anders Lund


Dato : 29-09-04 06:39

Kristian Thy wrote:

> Er det en gætteleg, eller prøver I at holde noget hemmeligt for mig?
> Runnable, eller også _hvad_???

Har ikke lige min FreeBSD maskine kørende, så lige dem jeg kan huske:

running
sleeping
waiting

--
Anders Lund - anders@andersonline.dk
Take back the web - www.mozilla.org/firefox

Christian Iversen (29-09-2004)
Kommentar
Fra : Christian Iversen


Dato : 29-09-04 13:26

Kristian Thy wrote:

> Christian Iversen uttered:
>> Kristian Thy wrote:
>>
>>> Jesper Louis Andersen uttered:
>>>> det gennemsnitslige antal processer der enten er runable.
>>>
>>> Den lader vi lige stå et øjeblik, mens jeg klør mig i nakken...
>>
>> Det er fordi OpenBSD (og for den sags skulle alle slags unix) har flere
>> processstadier. Derfor er en proces enten runable, eller også.
>
> Er det en gætteleg, eller prøver I at holde noget hemmeligt for mig?
> Runnable, eller også _hvad_???

Hehe ;)

Enten, eller også!

Nej, populært sagt er loadavg antallet af programmer der gerne "vil" køres.
(som Peter Makholm også skriver).

Derfor kan man ikke sammenligne loadavg mellem forskellige computere, men
det kan give en idé om hvor belastet én aktuel computer er. For eksempel
vil en dual-cpu maskine have (groft sagt) lige så let ved at klare et load
på 10, som den tilsvarende enkelt-cpu maskine ville have ved 5. (det
forudsætter at programmerne der kører ikke er bundne af andre flaskehalse,
ellers vil det naturligvis ingen forskel gøre).

--
M.V.H
Christian Iversen

Kent Friis (29-09-2004)
Kommentar
Fra : Kent Friis


Dato : 29-09-04 18:37

Den Wed, 29 Sep 2004 14:25:31 +0200 skrev Christian Iversen:
>
> Derfor kan man ikke sammenligne loadavg mellem forskellige computere, men
> det kan give en idé om hvor belastet én aktuel computer er. For eksempel
> vil en dual-cpu maskine have (groft sagt) lige så let ved at klare et load
> på 10, som den tilsvarende enkelt-cpu maskine ville have ved 5.

Og det holder så heller ikke altid, fx HP-UX tager gennemsnittet, så
load=1 på en 4-CPU maskine betyder 4 runnable - 1 pr CPU.

Mvh
Kent
--
Help test this great MMORPG game - http://www.eternal-lands.com/

Christian Iversen (29-09-2004)
Kommentar
Fra : Christian Iversen


Dato : 29-09-04 18:51

Kent Friis wrote:

> Den Wed, 29 Sep 2004 14:25:31 +0200 skrev Christian Iversen:
>>
>> Derfor kan man ikke sammenligne loadavg mellem forskellige computere, men
>> det kan give en idé om hvor belastet én aktuel computer er. For eksempel
>> vil en dual-cpu maskine have (groft sagt) lige så let ved at klare et
>> load på 10, som den tilsvarende enkelt-cpu maskine ville have ved 5.
>
> Og det holder så heller ikke altid, fx HP-UX tager gennemsnittet, så
> load=1 på en 4-CPU maskine betyder 4 runnable - 1 pr CPU.

Det er også rigtigt, det havde jeg glemt. Det går dog godt i spænd med hvad
jeg sagde om at det er svært at sammenligne tallet mellem maskiner

--
M.V.H
Christian Iversen

Thorbjoern Ravn Ande~ (29-09-2004)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 29-09-04 21:17

Kent Friis <nospam@nospam.invalid> writes:

> Og det holder så heller ikke altid, fx HP-UX tager gennemsnittet, så
> load=1 på en 4-CPU maskine betyder 4 runnable - 1 pr CPU.

Jeg havde engang et pudsigt problem med at sendmail paa en 24-CPU's
maskine ikke ville sende post hvis load var for hoej. Det var den som
regel, da Irix glad gav en load paa 24 hvis alle var aktive.

Men der var saa meget andet boevl med den maskine, at ovenstaaende
bare var en lille pudsighed :)
--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk - Unix, Java, Web, Netværk, Århus

Peter Makholm (29-09-2004)
Kommentar
Fra : Peter Makholm


Dato : 29-09-04 08:01

Anders Lund <anders@andersonline.dk> writes:

> Kristian Thy wrote:
>
>> Er det en gætteleg, eller prøver I at holde noget hemmeligt for mig?
>> Runnable, eller også _hvad_???
>
> Har ikke lige min FreeBSD maskine kørende, så lige dem jeg kan huske:
>
> running
> sleeping
> waiting

sleeping og waiting bør helt klart ikke tælle med i
loadavarage. Ifølge den version af w(1) jeg lige kunen finde for
OpenBSD taler den kun om Runable.

Under Linux kan en process være i 5 tilstande:

D uninterruptible sleep (usually IO)
R runnable (on run queue)
S sleeping
T traced or stopped
Z a defunct ("zombie") process

Normalt vil en process ikke være i D-tilstand særlig længe ad
gangen. Men ved diskfejl (herunder at man hiver en usb-disk hårdt ud
og fejl i diskdriveren) kan en process sidde fast i D-tilstanden og så
er den umulig at slå ihjel.

Under normale forhold giver det mening også at lade IO indgå i en
angivelse af maskinens belastning, men når processer hænger i
D-tilstand vil de tælle med i load som 1 uden at belaste systemet.

Jeg kan dog ikke umidelbart finde dokumentation for at D-tilstand også
tæller med i loadavarage under linux, men det gør det.

--
Peter Makholm | I congratulate you. Happy goldfish bowl to you, to
peter@makholm.net | me, to everyone, and may each of you fry in hell
http://hacking.dk | forever
| -- The Dead Past

Adam Sjøgren (29-09-2004)
Kommentar
Fra : Adam Sjøgren


Dato : 29-09-04 15:17

On Wed, 29 Sep 2004 14:33:52 +0200, Kasper wrote:

> "Thomas S. Iversen" wrote:
>> "The load average numbers give the average number of jobs in the
>> run queue over the last 1, 5, and 15 minutes."

> Den formulering er dog ikke helt korrekt. Det er faktisk ikke
> gennemsnittet for et specifikt interval, men derimod et expontential
> fading average. Hvad de 1, 5 og 15 minutter så helt præcist dækker
> over ved jeg ikke, måske er det halveringstiden.

Kan I ikke være rare at give referencer til de definitioner I giver?

(Så er det også meget nemmere at vende tilbage til sådan en tråd her,
og få det rigtige svar).


Mvh.

--
"KOMPRESSOR crush american burger" Adam Sjøgren
asjo@koldfront.dk

Peter Makholm (29-09-2004)
Kommentar
Fra : Peter Makholm


Dato : 29-09-04 17:52

asjo@koldfront.dk (Adam Sjøgren) writes:

>> Den formulering er dog ikke helt korrekt. Det er faktisk ikke
>> gennemsnittet for et specifikt interval, men derimod et expontential
>> fading average. Hvad de 1, 5 og 15 minutter så helt præcist dækker
>> over ved jeg ikke, måske er det halveringstiden.
>
> Kan I ikke være rare at give referencer til de definitioner I giver?

Det kan godt være at jeg leder de forkerte steder, men jeg *kan* ikke
lige finde dokumentation. Så er det godt vi har sourcen. De tre
load-tal findes i et array der hedder avenrun[3] som er defineret i
<linux/sched.h>:

/*
* These are the constant used to fake the fixed-point load-average
* counting. Some notes:
* - 11 bit fractions expand to 22 bits by the multiplies: this gives
* a load-average precision of 10 bits integer + 11 bits fractional
* - if you want to count load-averages more often, you need more
* precision, or rounding will get you. With 2-second counting freq,
* the EXP_n values would be 1981, 2034 and 2043 if still using only
* 11 bit fractions.
*/
extern unsigned long avenrun[]; /* Load averages */

#define FSHIFT 11 /* nr of bits of precision */
#define FIXED_1 (1<<FSHIFT) /* 1.0 as fixed-point */
#define LOAD_FREQ (5*HZ) /* 5 sec intervals */
#define EXP_1 1884 /* 1/exp(5sec/1min) as fixed-point */
#define EXP_5 2014 /* 1/exp(5sec/5min) */
#define EXP_15 2037 /* 1/exp(5sec/15min) */

#define CALC_LOAD(load,exp,n) \
load *= exp; \
load += n*(FIXED_1-exp); \
load >>= FSHIFT;


Her er den eksponentielt aftagende gennemsnit. Selve udregningen af
load foregår i kernel/timer.c hvor man primært kan se at det er tasks
der er markeret running eller uninterruptible der tælles:

/*
* Nr of active tasks - counted in fixed-point numbers
*/
static unsigned long count_active_tasks(void)
{
struct task_struct *p;
unsigned long nr = 0;

read_lock(&tasklist_lock);
for_each_task(p) {
if ((p->state == TASK_RUNNING ||
(p->state & TASK_UNINTERRUPTIBLE)))
nr += FIXED_1;
}
read_unlock(&tasklist_lock);
return nr;
}

/*
* Hmm.. Changed this, as the GNU make sources (load.c) seems to
* imply that avenrun[] is the standard name for this kind of thing.
* Nothing else seems to be standardized: the fractional size etc
* all seem to differ on different machines.
*/
unsigned long avenrun[3];

static inline void calc_load(unsigned long ticks)
{
unsigned long active_tasks; /* fixed-point */
static int count = LOAD_FREQ;

count -= ticks;
if (count < 0) {
count += LOAD_FREQ;
active_tasks = count_active_tasks();
CALC_LOAD(avenrun[0], EXP_1, active_tasks);
CALC_LOAD(avenrun[1], EXP_5, active_tasks);
CALC_LOAD(avenrun[2], EXP_15, active_tasks);
}
}


--
Peter Makholm | What if:
peter@makholm.net | IBM bought Xenix from Microsoft instead of buying
http://hacking.dk | DOS?

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste