Dette indlæg er alene udtryk for skribentens egen holdning.

UNIX pusleri: en hurtigere uptime?

28. april 2013 kl. 20:1111
Artiklen er ældre end 30 dage
Manglende links i teksten kan sandsynligvis findes i bunden af artiklen.

Et af de steder jeg er lidt træt af UNIX er "uptime", som viser tre system-"load" værdier - i snit over det sidste et, fem og ti minutter.
Vi kan diskutere hvad load er, men min pointe er nærmere de tidskonstanter. Hvordan får man tilsvarende på en meget mindre tids-skala?

Eksempel:

  1. $ uptime
  2. 17:41:19 up 2 days, 5:37, 1 user, load average: 0.24, 0.41, 0.54

hver af de sidste værdier er resultatet af et IIR-filter hvor tidskonstanterne er - som sagt et, fem og ti minutter.
En ganske fin forklaring kan læses f.eks. på wikipedia.

For tiden laver jeg noget arbejde, hvor load på et eller fem sekund-niveau vil være mere relevant.

Artiklen fortsætter efter annoncen

Mit spørgsmål er om en sådan udvidelse skal laves i UNIX-kernen, eller om det sagtens kan laves i user-land?
Og giver det mening at lave en et-sekunds load average - givet f.eks. Linux-kernens normale scheduler.

/pto

11 kommentarer.  Hop til debatten
Denne artikel er gratis...

...men det er dyrt at lave god journalistik. Derfor beder vi dig overveje at tegne abonnement på Version2.

Digitaliseringen buldrer derudaf, og it-folkene tegner fremtidens Danmark. Derfor er det vigtigere end nogensinde med et kvalificeret bud på, hvordan it bedst kan være med til at udvikle det danske samfund og erhvervsliv.

Og der har aldrig været mere akut brug for en kritisk vagthund, der råber op, når der tages forkerte it-beslutninger.

Den rolle har Version2 indtaget siden 2006 - og det bliver vi ved med.

Debatten
Log ind eller opret en bruger for at deltage i debatten.
settingsDebatindstillinger
8
30. april 2013 kl. 12:19

Man skal jo også huske at tage højde for om man kører med HW tråde (Simultanious/coarse/fine-grained multithreading) om man så ønsker at priotere overall throughput eller der er enkelte job der skal prioteres over hinanden.

// Jesper

7
29. april 2013 kl. 11:22

sar

Fandt ud af at den ikke var på min Linux Mint med er i pakken sysstat

3
28. april 2013 kl. 21:16

Du kan bruge første linje fra /proc/stat[1], som du blot skal sample med et sekunds mellemrum og bruge delta-værdierne:

  1. head -n1 /proc/stat; sleep 1; head -n1 /proc/stat
  2. cpu 40045 2026 11539 2331154 4646 0 143 0 0 0
  3. cpu 40047 2026 11540 2331551 4646 0 143 0 0 0

Load for det sidste sekund bliver da:

  1. load1 = 40045 + 2026 + 11539 + 4646 + 143
  2. load2 = 40047 + 2026 + 11540 + 4646 + 143
  3. idle1 = 2331154
  4. idle2 = 2331551
  5. usage = (load2 - load1)/(idle2 - idle1 + load2 - load1)

Det skulle være muligt at lave et kvikt script eller bruge Linux-kernens API til proc...

[1] http://www.linuxhowtos.org/System/procstat.htm

1
28. april 2013 kl. 20:24

loadaverage er en helt ubrugelig metrik nu om dage, den stammer fra den gang hvor man havde 100 bruger på 1 MIPS CPU.

For alt andet en en programbelastning der kører konstant på CPU'en, med kun minimal I/O, er loadaverage totalt misvisende.

Hvad er det du i virkeligheden vil vide om din maskines performance ?

6
29. april 2013 kl. 10:30

vmstat er nok mere anvendeligt, den giver dig i al fald også information om det er cputid eller disk I/O du max'er ud. (Dine compile-jobs er formentlig ikke noget der kræver meget netværks-I/O, med mindre dine filer ligger på et netværks-share). vmstat kan sample hvert sekund.

5
29. april 2013 kl. 09:29

Har du overvejet at benytte en resource manager? Lyder umiddlebart til at det ville være en off-the-shelf løsning til dit problem. Prøv evt. at se på slurm eller torque.