[OT] Procesory intel (do PC)

Jaroslav Lukesh lukesh na seznam.cz
Čtvrtek Březen 15 09:12:03 CET 2012


Ještě se vrátím k tématu, neboť podle níže uvedeného nechápu, proč když mám 
puštěný top, který se přehrabuje jen v paměti, při takovém vysokém čísle 
čekání na IO (30-70), občerství stránku třeba jen jednou za půl minuty, 
místo jednou za 3 vteřiny? Je to tím, že ostatní IO operace jsou zdrženy 
těmi diskovými? Podotýkám, že občas se stane - ne vždy, že po takovém delším 
čekání na refresh topu se najednou ukáže "animace" tak 5-10fps stránek z 
topu.


----- Původní zpráva ----- 
Od: "Pavel Troller" <patrol na sinus.cz>


Zdravím,
  ano, přesně tak. Pokud úloha čeká na jakékoliv I/O (disk, klávesnici,
vykreslení graf. prvku pomocí GPU atd.), prostě OS pustí ty, co běžet mohou.
Čili běží-li nějaký "žrout CPU" s minimálním I/O, dostane maximum výkonu
v okamžicích, kdy ostatní úlohy musí čekat. Kdyby tam takový "žrout" nebyl,
dostane CPU Idle task, který je využije k fyzickému usnutí a snížení
spotřeby. Tehdy bude nenulový iowait. Pokud budou CPU využity i tehdy, kdy
nějaké úlohy čekají na I/O, bude iowait 0.
  Zdraví Pavel

> Ano, teplota cpu je nízká, prostě čeká. Takže kdybych tam měl nějaký
> zatěžovací program, který vůbec nepotřebuje disk a ramky mu stačí pár
> desítek bajtů, v pohodě by při takovém čekání na disk 70% (jen jedno cpu) 
> a
> vytížení ostatními aplikacemi 30% (tedy idle=0), si vzal těch 70% výkonu,
> co stráví cpu čekáním na disk? Takže čekání na disk bude v tomto případě
> 0%, 70% si vezme zatěžovací program a 30% aplikace, které čekají na data z
> disku?
>
> ----- Původní zpráva ----- Od: "Pavel Troller" <patrol na sinus.cz>
>
>
> Zdravím,
>
>> No mám to hlavně vypozorováno - na linuxu ale týká se to úplně stejně i
>> woken, taky se extrémně zpomalí když se moc hrabe na disk.
>
> To samozřejmě ano. Ale není to proto, že by CPU čekaly na disk - v takovém
> případě si CPU spokojeně pochrupávají v idle tasku :-). Uživatelsky se to
> ale může jevit, že na ten disk čekají.
>
>>
>> Když pustím top při vytíženém disku, tak (jen jeden) cpu čeká třeba z 70%
>> (stav wait), zbytek 30% něco dělá a idle je zhruba nula. Jakmile 
>> přestanou
>> diskové operace, je idle (třeba) 20%. Pokud to samé jede na dvojjádru, 
>> tak
>> máme k dispozici 200%, takže top ukazuje idle v tomto případě 200-80-70
>> (tj. 50%) a systém má svižné odezvy. S dvoujádrem mám ale zkušenosti jen
>> ve
>> virtualizovaném stroji.
>
> Aha, vy myslíte stav iowait. Nu, název toho stavu je poněkud matoucí. 
> Tento
> stav neznamená, že cpu aktuálně na něco čeká, ale, cituji definici,
> "... The actual definition of %iowait is the percentage of the time that 
> the
> system was idle and at least one process was waiting for disk IO to 
> finish".
> Čili, měří to situaci, kdyby systém mohl něco dělat, kdyby měl rychlejší
> disky. Nicméně, ano, z uživatelského hlediska se může zdát, že ty CPU
> skutečně
> čekají - ovšem programátorsky je v tom, jistě netřeba vysvětlovat, velký
> rozdíl :-).
>
>>
>> podotýkám, že při wait 70% se s takovým systémem prakticky nedá dělat a i
>> ten top hodí stránku jednou za čtvrt minuty. Většinou se toto děje když
>> swapuje.
>>
>
> Zcela logické. Pokud se swapuje, diskové buffery a fronty se zaplní 
> takovou
> šňůrou požadavků, že prakticky každá úloha, která občas musí hrábnout na
> disk
> pro běžná data, třeba minutu čeká, než se na ni dostane. Pokud navíc jí 
> byla
> zabavena RAM, musí čekat i na to, až ji dostane zpátky :-). Ale pokud 
> byste
> měřil teplotu/spotřebu CPU, bude překvapivě nízká a tyto budou většinu 
> času
> trávit v nejhlubším možném spánku :-).
>
> Zdraví Pavel
>
>
>>
>> ----- Původní zpráva ----- Od: "Pavel Troller" <patrol na sinus.cz>
>>
>>
>> Zdravím,
>>  chtěl jsem se zeptat, zda níže popisované chování je skutečně
>> implementováno
>> v nějakém OS, nebo zda to je jen určité zjednodušení a přiblížení 
>> laickému
>> čtenáři. Dle svých znalostí mnou používaných OS (preemptivní Unixového
>> typu)
>> tomu tak totiž není.
>>  V obecném víceúlohovém OS preemptivního typu jsou v zásadě možné 4 stavy
>> úloh: běžící, připravená, čekající a pozastavená.
>>  V takovém OS může teoreticky běžet (tj. být ve stavu "Běžící") tolik
>> úloh,
>> kolik má OS k dispozici logických CPU.
>>  Uloha, která nemůže běžet, např. proto, že čeká na disk, je ve stavu
>> "čekající" a nezabírá ŽÁDNÉ prostředky CPU. Rozhodně neplatí, že by 
>> "jádro
>> čekalo", až disk dodá data. Je to uděláno tak, že na disk čeká hardware -
>> řadič disku - a jakmile disk dodá data, řadič je přijme, uloží do bufferu
>> (zcela automaticky pomocí DMA) a vygeneruje přerušení do CPU, to přeruší
>> právě prováděnou úlohu, vyvolá obsluhu disku v jádru OS a pokud na data z
>> disku
>> skutečně čekala nějaká úloha, jádro (modul plánovače - scheduleru) ji
>> přesune
>> z haldy úloh (heap - úlohy jsou tam bez nějakého řazení) čekajících do
>> fronty
>> úloh (řazené dle aktuální dynamické priority) připravených. Pokud to OS
>> umí
>> a priorita úlohy je dostatečně vysoká, provede se tzv. dynamický
>> asynchronní
>> rescheduling, kdy tato úloha dostane CPU a rozeběhne se, zatímco dříve
>> běžící
>> úloha je odstavena zpravidla na konec fronty úloh připravených.
>>  Pokud je tedy co dělat - tzn. nejméně tolik připravených - běhu 
>> schopných
>> -
>> úloh, kolik je logických CPU, budou všechny dostupné logické CPU naplno
>> zaměstnány během těchto úloh. Je-li běhu schopných úloh méně, jsou 
>> některé
>> logické CPU "zaměstnány" tzv. klidovou úlohou - "idle task", která je
>> zřízena
>> v jádře OS proto, aby plánovač byl regulární - měl vždy po ruce úlohu i v
>> případě, že nic na systému nepožaduje běh. Tento idle task obvykle na HW
>> úrovni vykoná instrukci HLT, což procesor uvede (ve spolupráci s ACPI
>> subsystémem) do nějakého úsporného režimu spotřeby energie.



Další informace o konferenci Hw-list