GNU/Linux >> Znalost Linux >  >> Cent OS

Co jsou špinavé stránky v Linuxu

Otázka :Co jsou špinavé stránky a jaký je jejich účel?

Kdykoli proces aplikace/databáze potřebuje přidat virtuální stránku do fyzické paměti, ale nezůstanou žádné volné fyzické stránky, OS musí vymazat zbývající staré stránky.

Nyní, pokud stará stránka nebyla vůbec napsána, pak tuto není třeba ukládat, lze ji jednoduše obnovit z datového souboru. Pokud však již byla stará stránka upravena, musí být někde uchována, aby aplikace/databáze mohla být později znovu použita – tomu se říká špinavá stránka.

OS ukládá takové špinavé stránky do odkládacích souborů (takže je lze odstranit z fyzické paměti, aby bylo možné uložit další „novou“ stránku do fyzické paměti) Pokud bude z mezipaměti stránek do oblasti špinavých stránek odstraněno velké množství dat – může to způsobit značné IO úzké místo, pokud je skutečné odkládací zařízení umístěno na místním disku ( sda ) a navíc způsobí další problémy, pokud místní disk používá i místní kořenový ( OS ) disk.

Mezipaměť stránek v Linuxu je pouze disková mezipaměť, která přináší OS další výkon, což pomáhá s intenzivním vysokým čtením/zápisem na soubory.

Jako „sub“ produkt mezipaměti stránky je špinavá stránka – což bylo vysvětleno ve výše uvedeném příkladu. Špinavé stránky lze také pozorovat, kdykoli bude aplikace zapisovat do souboru nebo vytvářet soubor – k prvnímu zápisu dojde v oblasti mezipaměti stránek – proto vytvoření souboru, jehož 10MB soubor může být opravdu rychlý:

# dd if=/dev/zero of=testfile.txt bs=1M count=100
10+0 records in
10+0 records out
10485760 bytes (100 MB) copied, 0,1121043 s, 866 MB/s

Je to proto, že tento soubor je vytvořen v oblasti paměti, nikoli na skutečném disku – doba odezvy je tedy opravdu rychlá. V operačním systému bude taková věc uvedena v /proc/meminfo a více v 'Dirty:

Před provedením výše uvedeného příkazu – poznamenejte si řádek /proc/meminfo a ‚Dirty‘:

# more /proc/meminfo | grep -i dirty
Dirty: 96 kB

Po provedení příkazu:

# more /proc/meminfo | grep -i dirty
Dirty: 102516 kB

OS nebo aplikace/databáze bude pravidelně inicializovat synchronizaci, která zapíše skutečný soubor testfile.txt na disk:

# more /proc/meminfo | grep -i dirty
Dirty: 76 kB

Nyní například Oracle Database neumožňuje provádět takové zápisy do oblasti paměti, jako kdyby došlo k selhání OS nebo selhání SAN LUn – data budou kompromitována. To je důvod, proč Oracle Database vyžaduje, aby data byla „synchronizována“, a proto musí být všechny zápisy potvrzeny backendem, jako je disk/lun, než bude databáze generovat další požadavky na zápis.

Normálně databáze/aplikace periodicky zahazují mezipaměť, a proto se nečisté stránky zapisují na disk po malých kouscích. V některých případech může velikost špinavých stránek narůstat, protože aplikace/databáze možná správně nenakonfigurovaly mechanismus mezipaměti stránek.

Nečisté stránky tak mohou zapisovat do odkládacích souborů ( Swap area ), ale také do speciální oblasti na disku ( LUN/file-system ). Pokud například vytvoříme více než 100 MB odkládací soubor, který bude později znovu použit z odkládacího souboru, můžeme způsobit zbytečné IO problémy na odkládacím zařízení. Podnikové systémy ukládají odkládací soubory a odkládací oblast na OS pod SSD (Solid State Drive) nebo vyhrazenou LUN, takže výkon místního disku nebude ovlivněn (jak je normálně odkládací oblast vytvořena na místním disku)

V některých případech může aplikace/databáze mít interně problémy a nečisté stránky budou zapsány jako odkládací soubory, ale nebudou nikdy znovu použity, což způsobí nárůst odkládací oblasti a zbytečné IO na místním disku a povede k velkému využití swapu pod OS.

Chcete-li zjistit, v jaké fázi se OS pokusí uložit špinavé stránky zpět na diskovou vrstvu, podívejte se na oficiální dokumentaci jádra týkající se virtuální paměti zde a vyhledejte nastavení jako:

vm.dirty_background_ratio
vm.dirty_ratio
vm.swappiness

a

dirty_background_ratio
dirty_ratio
dirty_background_bytes
dirty_expire_centisecs

Výše uvedená nastavení je třeba vyladit podle požadavků na databázi/aplikaci, protože OS pro ně nemá žádné „nejlepší postupy“ – jsou vyladěny podle zatížení/konfigurace DB/APP.

Kdykoli bude aplikace/databáze vyžadovat, aby byly stránky paměti volné ve fyzické paměti – OS má tendenci uchovávat vše v mezipaměti stránek – OS proto bude muset některé stránky znovu alokovat a označit je jako nečisté. Tento proces funguje dobře, pokud je konec aplikace/databáze správně vyladěn a škálován – jinak to způsobí skutečně agresivní swappiness – protože OS bude muset zapsat všechny špinavé stránky zpět na odkládací disk – to lze ovládat pomocí nastavení vm.swappiness.

Pokud bude aplikace/databáze provádět souhlasné swapování, může to způsobit vážné IO zápisy na odkládací zařízení a vést k vážnému zablokování systému – vždy se ujistěte, že aplikace/databáze jsou správně nakonfigurovány z hlediska správy paměti.

Jak bylo vysvětleno, ne všechny stránky budou označeny jako špinavé – většinou nepoužité stránky budou spíše vyřazeny než označeny jako špinavé (vše závisí na tom, zda stránky, které již jsou přiděleny, byly změněny nebo ne)

Pro ověření, které PID používají swap area – lze použít níže uvedený příkaz:

for file in /proc/*/status
do 
    awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file
done | sort -k 2 -n -r

Uvolnění „spotřebovaného“ odkládacího prostoru je opravdu omezené, normálně, pokud PID skončí správně nebo se jednoduše vypne, swapovací prostor bude znovu nárokován, ale zabití PID nebo pokud skončí abnormálně jako segfault může stále zanechat odkládací prostor spotřebovaný. Další možností je restart, protože provádění příkazů swapoff a swapon může způsobit vážné problémy nebo dokonce vést k panice systému.


Cent OS
  1. Zkontrolujte, jaké hardwarové sloty jsou k dispozici pro Linux?

  2. Jaké jsou různé typy shellů v Linuxu?

  3. Co jsou uživatelé SELinuxu a jak mapovat uživatele Linuxu na uživatele SELinuxu

  1. UNIX / Linux:Co je to Shell? Jaké jsou různé Shelly?

  2. Jaké jsou typy DNS Nameserverů v Linuxu

  3. Co jsou řídké soubory v Linuxu

  1. Co jsou výstupní kódy Bash v Linuxu

  2. Co je JingOS Linux?

  3. Jaké jsou nevýhody linuxových front zpráv?