Memory thrashing
Memory thrashing je v informatice označení situace, kdy je v počítači správa operační paměti ve stavu neustálého stránkování paměti (nesprávně swapování) na pevný disk a zpět, což vede ke zpomalení činnosti počítače nebo až k jeho neschopnosti obsloužit běžné procesy. Memory trashing může pokračovat donekonečna, dokud není příčina problému vyřešena nebo odstraněna.
Popis a příčina
[editovat | editovat zdroj]Současný software (ať už operační systém nebo aplikační software) potřebuje čím dál více operační paměti. Paměť RAM je poměrně drahá, zatímco místo na pevném disku je v poměru k ceně RAM výrazně nižší. Nabízí se tedy rozšířit paměť RAM na úkor místa na pevném disku a zajistit, aby právě nepoužívané části paměti byly odsunuty na pevný disk a v paměti RAM byla umístěna jen data nebo programy, které jsou právě zpracovávány. Mechanismus rozšíření paměti o pevné místo na disku využívá správu virtuální paměti, která je obsluhována pomocí jednotky správy paměti v procesoru (MMU) a řízena správcem paměti (memory manager) v jádře operačního systému. Virtuální paměť je řešena buď segmentací paměti nebo stránkováním paměti (modernější a účinnější metoda).
Úkolem memory manageru (MM) je vybrat nepoužívané stránky v paměti RAM a ty odsunout (nakopírovat) na pevný disk. V případě, že je taková stránka paměti později potřeba, je nutné nejprve uvolnit místo v paměti RAM (tj. odsunou jinou stránku na disk) a do uvolněného místa nakopírovat stránku která byla odložena na pevném disku. Této situaci se říká výpadek stránky (page fault). Pokud dojde při výměně stránek k situaci, že jsou dokola z paměti RAM na pevný disk vytlačovány stránky, které jsou v následující chvíli potřeba a proto jsou obratem zaváděny z disku zpět do RAM, nastává situace označovaná jako memory trashing.
Cílem tvůrců jádra systému (konkrétně memory manageru) je memory trashingu předcházet, což však není triviální záležitost. Za běžných okolností dochází v systému k malému množství výpadků stránek, protože RAM je zcela zaplněna a je v ní je téměř vše, co je při aktuální činnosti počítače potřeba (tj. optimální stav maximálního využití všech dostupných prostředků). V okamžiku, kdy uživatel například spustí další program, je potřeba nárazově paměť uvolnit (a vytlačit nejméně používané stránky na pevný disk), avšak ne vždy jsou na první pokus vybrány stránky, které nebudou vzápětí potřeba. To vede k tzv. swapové bouři (swap storm), která je v nejlepším možném případě velmi intenzivní, ale velmi krátká, protože záhy dojde k nalezení nového rovnovážného stavu. Memory trashing vzniká v okamžiku, kdy ideální stav nelze delší dobu nalézt.
Možné řešení
[editovat | editovat zdroj]Pro vyřešení problému z důvodu nadměrného stránkování uživatel může dělat:
- Změna algoritmu nalezení kandidáta stránky, která bude odsunuta na pevný disk
- Zvýšení velikosti operační paměti RAM počítače
- Snížení počtu spuštěných programů v systému
- Výměna programů, které mají vysoké požadavky na paměť, za programy s nižšími požadavky
- Přiřazení priorit procesům v systému (nízká, normální, vysoká)
Další případy
[editovat | editovat zdroj]Pojem thrashing se používá i v jiných situacích v rámci práce s pamětí, ne jenom pro stránkování. Pokud je k menšímu množství rychlého úložiště, určené k zrychlení přístupu k většímu, ale pomalejšímu úložišti, přistupováno takových způsobem, že dojde ke ztrátě všech výhod rychlého úložiště. Příkladem toho stavu je cache thrashing, kde je k hlavní paměti přistupováno tak, že mnoho částí hlavní paměti soupeří o stejné záznamy v cache, což vede k velkému zvýšení latence čtení z cache paměti. Toto je nejvíce problematické pro cache, které mají malou asociativitu. Podobné tomuto je i TLB thrashing, kde translation lookaside buffer je přetížen více dotazy než dokáže efektivně zpracovat.