Pokud jste uživatelem nebo nadšencem Linuxu po značnou dobu, pak by pro vás termín swap nebo odkládací paměť neměl být novinkou. Ale bohužel, mnoho uživatelů Linuxu má tendenci zaměňovat koncept swap paměti se swappiness. Nejběžnější mylná představa je, že hodnota swapiness označuje maximální použitelnou RAM před zahájením skutečného procesu výměny.
Abychom prolomili tuto široce rozšířenou mylnou představu, musíme prolomit definici swapování i swapování.
Vykoupení swappinessu z běžných mylných představ
Od swapovosti je pojat pojem swapování. Aby se swapování uskutečnilo, musí mít RAM (paměť s náhodným přístupem) nějaká systémová data. Když jsou tato data odepsána na vyhrazené místo na pevném disku, jako je odkládací soubor nebo odkládací oddíl, uvolní se systémová RAM o nějaké potřebné místo. Toto uvolnění systémové RAM představuje definici swapování.
Váš operační systém Linux obsahuje nastavení konfigurace hodnoty swappiness. Existence této hodnoty nadále vyvolává mnoho mylných představ o zamýšlené funkčnosti systému. Nejběžnější je jeho spojení s prahem využití paměti RAM. Z definice swapování je swappiness mylně chápán jako maximální hodnota úložiště RAM, která spouští začátek swapování.
Rozdělené zóny RAM
Abychom našli jasnost z mylné představy swappiness, o které jsme diskutovali dříve, musíme začít tam, kde tato mylná představa začala. Nejprve se musíme podívat na paměť RAM (Random Access Memory). Naše interpretace paměti RAM se velmi liší od vnímání operačního systému Linux. RAM vidíme jako jedinou homogenní paměťovou entitu, zatímco Linux ji interpretuje jako rozdělené paměťové zóny nebo oblasti.
Dostupnost těchto zón na vašem počítači závisí na architektuře používaného počítače. Může to být například stroj s 32bitovou architekturou nebo stroj s 64bitovou architekturou. Chcete-li lépe porozumět tomuto konceptu rozdělených zón, zvažte následující rozdělení a popis počítačových zón architektury x86.
- Přímý přístup do paměti (DMA) :Zde je kapacita přidělitelné paměti nebo zóny pouze 16 MB. Jeho název souvisí s jeho implementací. Dřívější počítače mohly komunikovat s fyzickou pamětí počítače pouze prostřednictvím přístupu přímého přístupu do paměti.
- Přímý přístup do paměti 32 (DM A 32) :Bez ohledu na toto přiřazené pojmenování je DMA32 paměťová zóna použitelná pouze pro 64bitovou architekturu Linuxu. Zde přidělitelná paměťová oblast nebo kapacita zóny nepřesahuje 4 GB. Proto může 32bitový linuxový stroj dosáhnout pouze 4 GB RAM DMA. Jedinou výjimkou z tohoto případu je situace, kdy se uživatel Linuxu rozhodne použít jádro PAE (Physical Address Extension).
- Normální :Podíl paměti RAM počítače nad 4 GB, odhadem, na 64bitové architektuře počítače splňuje metrickou definici a požadavky běžné paměti. Na druhou stranu 32bitová počítačová architektura definuje normální paměť mezi 16 MB a 896 MB.
- Vysoká M em :Tato paměťová zóna je patrná pouze na 32bitové architektuře počítače se systémem Linux. Je definována jako kapacita RAM přesahující 896 MB pro malé stroje a přesahující 4 GB pro velké stroje nebo stroje s výkonnými hardwarovými funkcemi a specifikacemi.
Hodnoty RAM a PAGESIZE
Alokace paměti RAM počítače se určuje po stránkách. Tato alokace stránek je nakonfigurována na pevné velikosti. Systémové jádro je určující pro tyto alokace s pevnou velikostí. K alokaci stránky dochází při spouštění systému, když jádro detekuje architekturu vašeho počítače. Na takovém počítači se systémem Linux je typická velikost stránky asi 4 kB.
Chcete-li určit velikost stránky vašeho počítače se systémem Linux, můžete použít příkaz „getconf“, jak je ukázáno níže:
$ getconf PAGESIZE
Spuštěním výše uvedeného příkazu na vašem terminálu byste měli získat výstup jako:
4096
Přílohy zón a uzlů
Diskutované paměťové zóny mají přímou vazbu na systémové uzly. CPU nebo centrální procesorová jednotka jsou přímo spojeny s těmito uzly. Toto přidružení uzlu k CPU, na které se jádro systému odkazuje při alokaci paměti, potřebuje proces naplánovaný ke spuštění stejným CPU.
Tyto vrstvy uzlů k CPU jsou nezbytné pro instalaci smíšených typů paměti. Specializované počítače s více CPU jsou primárním cílem těchto instalací paměti. Tento postup je úspěšný pouze v případě, že se používá architektura Non-Uniform Memory Access.
S takovými špičkovými požadavky se počítač se systémem Linux v průměru spojí s jedním konkrétním uzlem. Termín OS pro to je uzel nula. Tento uzel vlastní všechny dostupné paměťové zóny. K těmto uzlům a zónám lze také přistupovat z vašeho operačního systému Linux. Nejprve budete potřebovat přístup k souboru „/proc/buddyinfo“. K dosažení tohoto cíle můžete použít následující příkaz.
$ less /proc/buddyinfo
Výstup vašeho terminálu by měl být podobný následujícímu snímku obrazovky.
Jak můžete vidět, z mého konce se zabývám třemi zónami:DMA, DMA32 a normálními zónami.
Interpretace dat těchto zón je přímočará. Například, pokud půjdeme se zónou DMA32, můžeme odhalit některé kritické informace. Pohybem zleva doprava můžeme odhalit následující:
4846: Dostupné části paměti lze interpretovat jako 4846 z 2^(0*PAGESIZE)
3946: Dostupné části paměti lze interpretovat jako 3946 z 2^(1*PAGESIZE)
2490: Dostupné části paměti lze interpretovat jako 2490 z 2^(2*PAGESIZE)
…
0: Dostupné části paměti lze interpretovat jako 0 z 2^(512*PAGESIZE)
Výše uvedené informace objasňují, jak spolu uzly a zóny souvisí.
Stránky souborů vs. anonymní stránky
Záznamy v tabulce stránek poskytují funkci mapování paměti s potřebnými prostředky pro záznam využití konkrétních stránek paměti. Z tohoto důvodu existuje mapování paměti v následujících funkčních fázích:
Zálohovaný soubor: U tohoto typu mapování pocházejí data, která zde existují, ze souboru. Mapování neomezuje jeho funkčnost na konkrétní typy souborů. Jakýkoli typ souboru je použitelný, pokud z něj mapovací funkce dokáže číst data. Flexibilita této systémové funkce spočívá v tom, že systémově uvolněnou paměť lze snadno znovu získat a její data znovu použít, pokud soubor obsahující data zůstane čitelný.
Pokud náhodou dojde ke změnám dat v paměti, soubor na pevném disku bude muset změny dat zaznamenat. Mělo by k tomu dojít, než se používaná paměť opět uvolní. Pokud se toto opatření nepodaří provést, soubor na pevném disku nezaznamená změny dat, ke kterým došlo v paměti.
Anonymní: Tento typ techniky mapování paměti nemá funkci zálohování zařízení nebo souborů. Požadavky na paměť dostupné na těchto stránkách lze popsat jako „on-the-fly“ a jsou iniciovány programy, které naléhavě potřebují uchovávat data. Takové požadavky na paměť jsou také účinné při práci s paměťovými zásobníky a haldami.
Protože tyto datové typy nejsou spojeny se soubory, jejich anonymní povaha potřebuje něco, co by okamžitě fungovalo jako spolehlivé úložiště. V tomto případě je vytvořen odkládací oddíl nebo odkládací soubor pro uložení těchto dat programu. Data se nejprve přesunou na swap, než budou uvolněny anonymní stránky, které tato data uchovávaly.
Zálohované zařízení: Soubory blokových zařízení se používají k adresování systémových zařízení. Systém považuje soubory zařízení za normální systémové soubory. Zde je možné data číst i zapisovat. Data úložiště zařízení usnadňují a spouští mapování paměti zálohované zařízením.
Sdíleno: Jedna stránka RAM může pojmout nebo může být mapována s více položkami tabulky stránek. Kterékoli z těchto mapování lze použít pro přístup k dostupným paměťovým místům. Bez ohledu na trasu mapování bude výsledné zobrazení dat vždy stejné. Protože paměťová místa jsou zde společně sledována, je meziprocesová komunikace efektivnější prostřednictvím výměny dat. Meziprocesová komunikace je také vysoce výkonná díky sdíleným zapisovatelným mapováním.
Kopírovat při zápisu: Tato alokační technika je poněkud líně orientovaná. Pokud dojde k požadavku na zdroj a požadovaný zdroj již existuje v paměti, je původní zdroj namapován tak, aby byl tento požadavek splněn. Prostředek může být také sdílen několika dalšími procesy.
V takových případech se může proces pokusit o zápis do tohoto zdroje. Pokud má být tato operace zápisu úspěšná, měla by v paměti existovat replika tohoto prostředku. Kopie nebo replika zdroje se nyní přizpůsobí provedeným změnám. Stručně řečeno, je to tento první příkaz zápisu, který iniciuje a provádí alokaci paměti.
Z těchto pěti diskutovaných přístupů k mapování paměti se swappiness zabývá stránkami zálohovanými soubory a rutinami mapování paměti anonymních stránek. Jsou to tedy první dvě diskutované techniky mapování paměti.
Pochopení swappiness
Na základě toho, co jsme dosud probrali a diskutovali, lze nyní definici swappiness snadno pochopit.
Jednoduše řečeno, swappiness je systémový kontrolní mechanismus, který podrobně popisuje intenzitu agrese systémového jádra při odkládání paměťových stránek. Hodnota swappiness se používá k identifikaci této úrovně agrese jádra systému. Zvýšená agresivita jádra je indikována vyššími hodnotami swapy, zatímco s nižšími hodnotami se swapová částka snižuje.
Když je jeho hodnota 0, jádro nemá autentizaci pro zahájení swapování. Místo toho se jádro před zahájením odkládání odkazuje na stránky zálohované soubory a volné stránky. Při porovnávání swapování se swapováním je tedy swappiness odpovědný za intenzivní měření swapu nahoru a dolů. Je zajímavé, že hodnota swappiness nastavená na nulu nebrání uskutečnění swapování. Místo toho pouze zastaví swapování, protože jádro systému čeká na nějaké podmínky pro swapování, aby byly životaschopné.
Github poskytuje přesvědčivější popis zdrojového kódu a hodnoty spojené s implementací swappiness. Podle definice je jeho výchozí hodnota reprezentována následující deklarací a inicializací proměnné.
Int vm_swappiness = 60;
Rozsahy hodnot swappiness jsou mezi 0 a 100. Výše uvedený odkaz na Github ukazuje na zdrojový kód pro jeho implementaci.
Ideální hodnota swappiness
Ideální hodnotu swappiness pro systém Linux určuje několik faktorů. Zahrnují typ pevného disku vašeho počítače, hardware, pracovní zátěž a to, zda je navržen tak, aby fungoval jako server nebo stolní počítač.
Musíte také poznamenat, že primární úlohou swapu není spustit mechanismus uvolňování paměti pro RAM počítače, když dochází dostupné místo v paměti. Existence swapu je standardně indikátorem zdravého fungování systému. Jeho absence by znamenala, že váš systém Linux musí dodržovat šílené rutiny správy paměti.
Účinek implementace nové nebo vlastní hodnoty swappiness na operačním systému Linux je okamžitý. Odmítá nutnost restartování systému. Toto okno je proto příležitostí k úpravě a sledování účinků nové hodnoty swappiness. Tyto úpravy hodnot a monitorování systému by měly probíhat po dobu dnů a týdnů, dokud nedosáhnete čísla, které neovlivní výkon a stav vašeho operačního systému Linux.
Při úpravě hodnoty swappiness zvažte následující ukazatele:
- Za prvé, implementace 0 jako nastavené hodnoty swapiness nezakáže funkci swapu. Místo toho se aktivita systémového pevného disku změní z přidružené k odkládacímu zařízení na přidružené k souboru.
- Pokud pracujete se stárnoucími nebo starými pevnými disky počítače, doporučujeme snížit hodnotu související s výměnou systému Linux. Minimalizuje to účinky odkládacího oddílu a také zabrání anonymní reklamaci stránek. Snížení počtu odchodů v systému souborů se zvýší. Se zvýšením jednoho nastavení, které způsobí snížení druhého, bude váš systém Linux zdravější a výkonnější s jednou efektivní metodou správy paměti namísto průměrného výkonu dvěma metodami.
- Databázové servery a další jednoúčelové servery by měly mít pokyny pro software od svých dodavatelů. Dodávají se se spolehlivou správou paměti a účelově navrženými mechanismy mezipaměti souborů. Poskytovatelé tohoto softwaru jsou povinni navrhnout doporučenou hodnotu výměny Linuxu na základě pracovní zátěže a specifikací počítače.
- Jste-li průměrným uživatelem stolního počítače Linuxu, je vhodné držet se již nastavené hodnoty swappiness, zvláště pokud používáte poměrně nový hardware.
Práce s přizpůsobenou hodnotou swappiness na vašem počítači se systémem Linux
Hodnotu swappiness Linuxu můžete změnit na vlastní hodnotu dle vlastního výběru. Nejprve musíte znát aktuálně nastavenou hodnotu. Dá vám představu o tom, jak moc si přejete snížit nebo zvýšit hodnotu swappiness nastavené systémem. Aktuálně nastavenou hodnotu na vašem počítači se systémem Linux můžete zkontrolovat pomocí následujícího příkazu.
$ cat /proc/sys/vm/swappiness
Měli byste získat hodnotu jako 60, protože je to výchozí nastavení systému.
„sysctl“ je užitečné, když potřebujete změnit tuto hodnotu swappiness na novou hodnotu. Můžeme jej například změnit na 50 pomocí následujícího příkazu.
$ sudo sysctl vm.swappiness=50
Váš linuxový systém tuto nově nastavenou hodnotu okamžitě převezme bez nutnosti jakéhokoli restartu. Restartování počítače obnoví tuto hodnotu na výchozí 60. Použití výše uvedeného příkazu je dočasné z jednoho hlavního důvodu. Umožňuje uživatelům Linuxu experimentovat s hodnotami swappiness, které mají na mysli, než se rozhodnou pro pevnou, kterou hodlají používat trvale.
Pokud chcete, aby hodnota swappiness byla trvalá i po úspěšném restartu systému, budete potřebovat zahrnout jeho nastavenou hodnotu do konfiguračního souboru systému „/etc/sysctl.conf“. Pro demonstraci zvažte následující implementaci tohoto diskutovaného případu prostřednictvím nano editoru. Samozřejmě můžete použít libovolný editor podporovaný Linuxem.
$ sudo nano /etc/sysctl.conf
Když se tento konfigurační soubor otevře na vašem terminálovém rozhraní, přejděte na jeho konec a přidejte řádek deklarace proměnné obsahující vaši hodnotu swappiness. Zvažte následující implementaci.
vm.swappiness=50
Uložte tento soubor a můžete jít. Váš příští restart systému použije tuto novou nastavenou hodnotu swappiness.
Poznámka na závěr
Složitost správy paměti z něj dělá ideální roli pro systémové jádro, protože by to průměrného uživatele Linuxu příliš trápilo. Vzhledem k tomu, že swappiness je spojena se správou paměti, můžete se přeceňovat nebo si myslet, že používáte příliš mnoho paměti RAM. Na druhou stranu Linux považuje volnou RAM za ideální pro systémové role, jako je ukládání do mezipaměti disku. V tomto případě bude hodnota „volné“ paměti uměle nižší a hodnota „použité“ paměti uměle vyšší.
Prakticky je tato úměrnost hodnot volné a využité paměti na jedno použití. Důvod? Volnou paměť RAM, která se přiřadí jako disková mezipaměť, lze získat v jakékoli instanci systému. Je to proto, že jádro systému jej označí jako dostupný i opakovaně použitelný paměťový prostor.