Craftcom > Windows > Windows Vista > Kernel > Procesy a thready
Verze pro tisk
Procesy a thready

CPU Cycle Counting

Všechny verze Windows NT obsahují časovač, který procesorový čas rozděluje na intervaly po 10 nebo 15 ms v závislosti na hardwaru. Při vypršení intervalu systém přeruší zpracování aktuálního threadu, aktualizuje statistiku využití procesoru jednotlivými thready a začne vykonávat jiný. Problém byl v tom, že systém může začít thread vykonávat těsně před vypršením intervalu ale do statistik zapíše, že byl thread zpracováván po celý interval. Další problém byl v tom, že thread sice mohl být přiřazen procesoru, ale místo něj se zpracovávaly softwarové nebo hardwarové přerušení.
Využití těcho statistik diagnostickými nástroji a dalším informativním softwarem je v pořádku, ale pokud na základě jeho informací rozhoduje scheduler (plánovač), vede tento postup k nespravedlivému přerozdělení procesorového času. Normálně může thread na klientských verzích Windows běžet více jak 2 cykly (6 pokud běží v popředí). Ve skutečnosti nemusí thread dostat žádný čas nebo naopak více než 6 cyklů (18 pokud běží v popředí) v závislosti na režimu a jiných aktivitách systému.
Obrázek 1 zobrazuje jeden z případů nespravedlivého přerozdělení. Oba thready mají stejnou prioritu a oba jsou připraveny ve stejný čas. Thread A běží do konce intervalu, plánovač předpokládá že byl zpracováván celý interval a přeruší jeho činnost. Dále byl ještě čas přidělený threadu A kratší o dobu zpracování přerušení. V dalším intervalu plánovač vybere ke zpracování thread B a ten běží celý interval.


Obrázek 1 - Nespravedlivé rozdělení procesorového času

Ve Windows Vista se plánovač řídí registrem čitače cyklů moderních procesorů a má tak přesnější informace o tom, kolik cyklů bylo threadu přiděleno a může přesněji přidělovat procesorový čas. Plánovač navíc nepočítá do doby zpracování čas, který si vyžádala obsluha přerušení. Na Obrázku 2 je znázorněna ta samá situace, ale v podání Windows Vista.


Obrázek 2 - Rozdělení procesorového času ve Windows Vista

Multimedia Class Scheduler Service

Další vylepšení ve Windows Vista se týká multimediálních aplikací. Obliba multimédií na PC stále stoupá a lidé chtějí bezproblémové přehrávání videa a audia. S nástupem videa ve vysokém rozlišení ale rostou nároky na výpočetní čas. Ovšem v čase přehrávání kladou požadavky i další aplikace běžící na pozadí, např. antivirus, služba indexování apod. To může vést k nepříjemnému "sekání". K vyřešení tohoto problému přichází s Windows Vista služba MMCS, která upravuje priority threadů multimediálních aplikací.
Typů multimediálních threadů je několik a každý z nich má nastavenou určitou prioritu. Jejich seznam je uložen v registru, konkrétně:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\Currentversion\Multimedia\SystemProfile\Tasks
Nastavení v jednotlivých klíčích určuje, jak moc bude thread preferovaný a to jak ze strany procesoru tak ze strany grafické karty. Vývojáři softwaru si tak mohou jednoduchou úpravou registru přidávat vlastní typy. MMCSS sám o sobě nezjistí, jaký thread přehrává multimediální obsah, proto je nutná podpora přehrávajícího softwaru (např. Windows Media Player 11), který pomocí nového API multimediální thready registruje a určuje jejich typ.


Obrázek 3 - Nastavení audio threadů pro MMCSS

MMCSS je implementován v knihovně %SystemRoot%\System32\Mmcss.dll, běží v procesu Service Host (Svchost.exe) a thread spravující priority sám běží s prioritou 27 (Windows mají priority v rozsahu 0-31). Tento thread zvyšuje priority registrovaných multimediálních threadů do rozsahu určeném hodnotou Scheduling Category. Ve Windows jsou priority 16 a vyšší v rozsahu zvaném Realtime a jsou vyšší než u ostatních běžících threadů (s výjimkou Memory Managera který běží s prioritami 28 a 29). Pouze administrátorské účty, jako Local System pod kterým je MMCSS spuštěn, má práva zvyšovat priority.
Pokud přehráváte hudbu, Windows Media Player zaregistruje Audio thread a pokud video tak Playback thread. MMCSS zvýší prioritu všem threadům které: zpracovávají stream (proud dat), běží v procesu který má okno v popředí a hodnotu BackgroundOnly mají v registru nastavenou na True.
Dále bylo nutné zabránit tomu, aby MMCSS zvyšoval priority tak, aby veškerý procesorový čas byl přidělen multimediálním threadům na úkor procesům běžícím na pozadí. MMCSS tak rezervuje část procesorového času pro tyto ůčely. Tato hodnota se dá měnit v registru:

HKLM\Software\Microsoft\Windows NT\Currentversion\Multimedia\SystemProfile\SystemResponsiveness
Jako výchozí hodnota je 20%; MMCSS tak monitoruje vytížení procesoru aby zajistil, že multimediální thready nebude procesor vykonávat déle jak 8 ms při 10 ms intervalu pokud budou ostatní thready vyžadovat CPU. Toho se dosáhne tak, že na ty 2 ms je snížena priorita multimediálních threadů na rozsah 1-7. Jak pracuje MMCSS je možné vidět na Technetu, Watching MMCSS Priority Boosting.

Mitch


© 2005 - 2011 Craft, craftcom.net
Všechna práva vyhrazena.
Šíření a kopírování textů, obrázků a jiných záznamů je bez předchozího souhlasu zakázáno.
Stránky vyhovují standardům: HTML 4.01 · CSS 2 · RSS 2
Čas zpracování: 187.654 ms