Zatížení (výpočetní) - Load (computing)

htop zobrazování značný výpočetní zátěž (vpravo nahoře: Load average: )

V systému UNIX computing je zatížení systému měřítkem množství výpočetní práce, kterou počítačový systém vykonává. Vytížení představuje průměrnou zatížení systému přes časové období. Obvykle se objevuje ve formě tří čísel, která představují zatížení systému během posledních jedno-, pěti- a patnáctiminutových period.

Výpočet zatížení ve stylu Unixu

Všechny systémy Unix a unixové systémy generují v jádře bezrozměrnou metriku tří čísel „průměr zatížení“ . Uživatelé mohou snadno zjistit aktuální výsledek z unixového shellu spuštěním příkazu: uptime

$ uptime
 14:34:03 up 10:43,  4 users,  load average: 0.06, 0.11, 0.09

wA toppříkazy vykazují stejné tři zatížení průměrných čísel, stejně jako celou řadu grafického uživatelského rozhraní utility. V Linuxu k nim lze přistupovat také čtením /proc/loadavgsouboru.

Nečinný počítač má číslo zatížení 0 (nečinný proces se nepočítá). Každý proces využívající nebo čekající na CPU ( připravená fronta nebo spuštěná fronta ) zvýší počet načtení o 1. Každý proces, který ukončí, sníží o 1. Většina systémů UNIX počítá pouze procesy v běžícím (na CPU) nebo spustitelném (čeká na CPU) ) uvádí . Linux však také zahrnuje procesy ve stavech nepřerušitelného spánku (obvykle čeká na aktivitu disku ), což může vést k výrazně odlišným výsledkům, pokud mnoho procesů zůstane zablokováno ve V/V kvůli zaneprázdněnému nebo zablokovanému I/O systému. To například zahrnuje blokování procesů v důsledku selhání serveru NFS nebo příliš pomalého média (např. Paměťová zařízení USB 1.x). Takové okolnosti mohou mít za následek zvýšený průměr zátěže, který neodráží skutečné zvýšení využití CPU (ale přesto dává představu o tom, jak dlouho musí uživatelé čekat).

Systémy vypočítávají průměr zatížení jako exponenciálně tlumený/vážený klouzavý průměr čísla zatížení . Tři hodnoty průměru zátěže se vztahují k uplynulé jedné, pěti a patnácti minutám provozu systému.

Matematicky řečeno, všechny tři hodnoty vždy průměrují veškeré zatížení systému od spuštění systému. Všechny se rozpadají exponenciálně, ale rozpadají se různými rychlostmi : rozpadají se exponenciálně o e po 1, 5, respektive 15 minutách. Průměr 1minutové zátěže se tedy skládá ze 63% (přesněji: 1 - 1/ e ) zátěže z poslední minuty a 37% (1/ e ) průměrné zátěže od spuštění, s výjimkou poslední minuty. Pro průměr zátěže 5 a 15 minut se vypočítá stejný poměr 63%/37% po dobu 5 minut, respektive 15 minut. Není tedy technicky přesné, že průměr 1minutové zátěže zahrnuje pouze posledních 60 sekund aktivity, protože zahrnuje 37% aktivity z minulosti, ale je správné uvést, že zahrnuje většinou poslední minutu.

Výklad

U systémů s jedním CPU, které jsou vázány na CPU , lze průměr zatížení považovat za měřítko využití systému během příslušného časového období. U systémů s více CPU je nutné vydělit zátěž počtem procesorů, aby bylo možné získat srovnatelné měřítko.

Lze například interpretovat průměr zátěže „1,73 0,60 7,98“ v systému s jedním CPU:

  • během poslední minuty byl systém přetížen v průměru o 73% (1,73 spustitelných procesů, takže 0,73 procesů muselo v průměru čekat na obrat u jednoho systému CPU).
  • během posledních 5 minut CPU běžel v průměru 40% volnoběhu.
  • během posledních 15 minut byl systém přetížen v průměru o 698% (7,98 spustitelných procesů, takže 6,98 procesů muselo čekat v průměru na jeden systém CPU v průměru).

To znamená, že tento systém (CPU, disk, paměť atd.) Mohl zvládnout veškerou práci naplánovanou na poslední minutu, kdyby byl 1,73krát rychlejší.

V systému se čtyřmi CPU by průměr zátěže 3,73 naznačoval, že v průměru bylo připraveno ke spuštění 3,73 procesů a každý z nich mohl být naplánován do CPU.

V moderních systémech UNIX se zpracování závitů s ohledem na průměry zatížení liší. Některé systémy považují vlákna za procesy pro účely výpočtu průměrné zátěže: každé vlákno čekající na spuštění přidá 1 k zatížení. Jiné systémy, zejména systémy implementující takzvané M: N vlákna , však používají různé strategie, jako je počítání procesu přesně jednou za účelem načtení (bez ohledu na počet vláken) nebo počítání pouze vláken aktuálně vystavených uživatelem- plánovač vláken do jádra, což může záviset na úrovni souběžnosti nastavené v procesu. Zdá se, že Linux počítá každé vlákno samostatně jako přidání 1 do zátěže.

Zatížení CPU vs využití CPU

Srovnávací studie různých indexů zatížení, kterou provedli Ferrari a kol. uvedli, že informace o zatížení CPU na základě délky fronty procesoru se ve vyvažování zátěže ve srovnání s využitím CPU mnohem lépe. Důvod, proč se délka fronty CPU zlepšila, je pravděpodobně ten, že když je hostitel silně zatížen, jeho využití procesoru se pravděpodobně blíží 100% a není schopno odrážet přesnou úroveň zatížení využití. Naproti tomu délky front CPU mohou přímo odrážet množství zátěže na CPU. Například dva systémy, jeden se 3 a druhý se 6 procesy ve frontě, mají velmi pravděpodobně využití téměř 100%, i když se zjevně liší.

Počítání zatížení CPU

V systémech Linux se průměr zátěže nepočítá při každém zatržení hodin, ale vychází z proměnné hodnoty, která je založena na nastavení frekvence HZ a testována při každém zatržení hodin. Toto nastavení definuje rychlost zaškrtnutí hodin jádra v Hertzech (časy za sekundu) a výchozí hodnota je 100 pro zaškrtnutí 10 ms. Aktivity jádra používají tento počet klíšťat k načasování. Konkrétně funkce timer.c :: calc_load (), která vypočítává průměr zátěže, běží každé zaškrtnutí LOAD_FREQ = (5*HZ+1) , nebo přibližně každých pět sekund:

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);
   }
}

Pole avenrun obsahuje průměr 1 minutu, 5 minut a 15 minut. CALC_LOADMakro a přidružené hodnoty jsou definovány v sched.h:

#define FSHIFT   11		/* nr of bits of precision */
#define FIXED_1  (1<<FSHIFT)	/* 1.0 as fixed-point */
#define LOAD_FREQ (5*HZ+1)	/* 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;

"Vzorkovaný" výpočet průměrů zatížení je poněkud běžné chování; FreeBSD také obnovuje hodnotu každých pět sekund. Interval je obvykle považován za nepřesný, aby neshromažďovaly procesy, jejichž spuštění je naplánováno na určitý okamžik.

Příspěvek v seznamu adresátů Linuxu považuje jeho zaškrtnutí +1 za nedostatečné, aby se zabránilo artefaktům Moire z takové sbírky, a místo toho navrhuje interval 4,61 sekundy. Tato změna je běžná mezi jádry systému Android , i když přesný výraz předpokládá HZ 100.

Další příkazy výkonu systému

Mezi další příkazy pro hodnocení výkonu systému patří:

  • uptime - průměrná spolehlivost a zatížení systému
  • top - pro celkový pohled na systém
  • vmstat - vmstat hlásí informace o spustitelných nebo blokovaných procesech, paměti, stránkování, blokových I/O, depeších a CPU.
  • htop - interaktivní prohlížeč procesů
  • dstat, atop - pomáhá korelovat všechna existující data zdrojů pro procesy, paměť, stránkování, blokové I/O, pasti a aktivitu CPU.
  • iftop - interaktivní prohlížeč síťového provozu na rozhraní
  • nethogs - interaktivní prohlížeč síťového provozu pro každý proces
  • iotop - interaktivní prohlížeč I/O
  • iostat - pro ukládání statistik I/O
  • netstat - pro statistiku sítě
  • mpstat - pro statistiku CPU
  • tload - průměrný graf zatížení terminálu
  • xload - načíst průměrný graf pro X
  • /proc/loadavg - textový soubor obsahující průměr zatížení

Viz také

externí odkazy

  • Brendan Gregg (8. srpna 2017). „Průměrné zatížení Linuxu: Řešení záhady“ . Citováno 22. ledna 2018 .
  • Neil J. Gunther . „Průměr zatížení UNIX - část 1: Jak to funguje“ (PDF) . TeamQuest . Vyvolány 12 August 2009 .
  • Andre Lewis (31. července 2009). „Pochopení zatížení procesoru Linux - kdy byste si měli dělat starosti?“ . Vyvolány 21 July 2011 . Vysvětlení pomocí ilustrované analogie provozu.
  • Ray Walker (1. prosince 2006). "Zkoumání průměru zátěže" . Linuxový deník . Vyvolány 21 July 2011 .
  • Karsten Becker. „Sada nástrojů pro monitorování zatížení Linux OSS“ . LoadAvg.

Reference