Aktualizace: 24.10.2008
Autor: Michal "Mitch" Pavlík
I/O Completion and Cancellation
Ve Windows Vista naleznete i změny v I/O systému, které zvyšují výkon především serverových aplikací. Tyto aplikace obyčejně
používají synchronizační objekt completion port k tomu, aby počkali, než se obslouží asynchronní I/O požadavek.
Když byl I/O požadavek obsloužen ve starších systémech, thread který ho vyvolal by provedl dokončovací práce. K tomu
bylo ovšem zapotřebí, aby systém přešel na proces jemuž patří thread, který požadavek vyvolal. Došlo tak k přerušení
prováděného kódu.
Ve Windows Vista nemusí nutně dokončovací práce provádět thread který byl autorem požadavku, ale jeden z threadů, který
čeká na completion port, aby mohl pokračovat v práci. Tato relativně malá změna zamezí zbytečnému plánování a přepínání
procesů a zvýší tak výkon aplikací a systému. Server navíc může obdržet výsledky více I/O operací v jednom požadavku
a to odstraní zbytečné přechody do kernel-mode vrstvy.
Změnu kterou ale pocítí uživatel více, je model rušení synchronních I/O operací. Pokud jste se někdy z Windows NT 5.x pokoušeli
dostat příkazem net view na off-line počítač, museli jste čekat než vyprší timeout. Aplikace nemá jinou možnost než
čekat na timeout, protože nebyla možnost jí sdělit, že I/O operace selhala.
Ve Windows Vista může být většina I/O operací zrušena (včetně otevření souboru kterou požívají Explorer a Net View).
Aplikace musí být ale upraveny aby se uživatele zeptaly, zda chtějí operaci zrušit. Většina aplikací které jsou
součástí systému tuto podporu mají. Například dialogy na otevření nebo uložení souboru, které používá naprostá většina
okenních aplikací, nyní umožňují zrušit operaci, když se snaží zobrazit obsah adresáře. U konzolových aplikací, jako
například příkaz Net umožňuje zrušit I/O operaci stisknutím známé zkratky Ctrl+C.
Můžete si to ověřit tak, že otevřete příkazovou řádku a na píšete:
Dalším typem I/O operací, které mohou způsobit problémy jsou ty, u kterých ovladač nemůže jednoznačně určit, zda by je měl zrušit. Proces čekající na odpověď pak visí v paměti, nereaguje a nelze ho ukončit. Systém nemůže proces korektně ukončit, dokud nebudou všechny I/O požadavky dokončeny nebo zrušeny. Ve Windows Vista ovladač obdrží zprávu o ukončení procesu a problém s neukončitelnými aplikacemi je vyřešen.
I/O Priority
Windows již dlouho podporují prioritizaci procesů, ale teprve Windows Vista přichází i s modelem prioritizace I/O.
Bez tohoto modelu mohou aplikace nebo služby běžící na pozadí (antivir, indexace souborů nebo defragmentace) narušovat
odezvu aplikací běžících v popředí. Například když uživatel chce spoustit aplikaci nebo otevřít dokument, zatímco
jiný proces klade požadavky na disk. V tomto případě dochází k čekání, než bude obsloužen požadavek aplikace / služby
běžící na pozadí a to může vést třeba k nekontinuálnímu přehrávání multimédií.
Windows Vista uvádí dva nové typy I/O prioritizace, které mají pomoct upřednostnit aplikace běžící v popředí. Jsou to
prioritizace jednotlivých I/O operací a rezervace šířky pásma. I/O systém zná 5 priorit, ale zatím se využívají pouze 4:
I/O priorita | Použití |
Critical | Memory manager |
High | - |
Normal | Výchozí priorita |
Low | Výchozí priorita úlohy |
Very low | Práce na pozadí |
Výchozí priorita je Normal s výjimkou Memory Manager-a, který má prioritu Critical, aby mohl v případě nedostatku paměti
zapisovat data na disk. Windows Task Scheduler nastavuje úlohám (s normální vlastní prioritou) I/O prioritu Low a
aplikace běžící na pozadí mají I/O prioritu Very low. Všechny operace jako Windows Defender nebo indexace běžící na pozadí
tak mají I/O prioritu Very low. Dálší informace o prioritizaci I/O naleznete v originálním článku na
TechNetu.
Rezervace pásma využijí zejména multimediální aplikace, protože spolu s MMCSS pomůže zajistit plynulé přehrávání. Aplikace
nejprve od I/O systému zjistí, zda zařízení může dodávat data požadovanou rychlostí a pokud ano, tak si aplikace nechá
rezervovat pásmo s definovanou rychlostí posílání požadavků o určité velikosti. I/O systém v tomto případě nebude obsluhovat
jiné požadavky, které by rezervované pásmo omezovaly.
Poslední změna v I/O systému, která zde bude popsána, se týká velikosti I/O operací. Ve starších verzích Windows NT byly
Memory Manager a I/O systém limitováni množstvím dat, které mohly být zpracovány jedním I/O požadavkem, konkrétně 64 KB.
Aplikace ale obvykle posílají větší požadavky. Ty jsou rozděleny na několik menších o maximální velikosti 64 KB. Každá
I/O operace si vyžádá přechod do kernel-mode a přenos na zařízení. Windows Vista již žádné limity na velikost I/O operací
nemá a těží z toho několik upravených komponent běžících v user-mode. Například Explorer nebo příkaz Copy využívají operace
o velikosti 1MB.
Mitch