Wat Is Swappiness op Linux? (Wijzigen)

0
318
subin-ch/Shutterstock.com

De Linux swappiness waarde heeft niets te maken met hoeveel RAM-geheugen wordt gebruikt voor het swappen van start. Dat is een wijd gemeld en algemeen wordt aangenomen dat het fout. We leggen uit wat het werkelijk is.

Busting Mythen Over Swapiness

Swapping is een techniek waarbij gegevens in het Random Access Memory (RAM) is geschreven om een speciale locatie op uw vaste schijf—een swap partitie of een swap file—RAM vrij te maken.

Linux heeft een instelling genaamd de swappiness waarde. Er is veel verwarring over wat deze instelling regelt. De meest voorkomende onjuiste beschrijving van swappiness is dat het stelt een drempel voor RAM-gebruik, en wanneer het bedrag van de gebruikte RAM hits die drempel, het verwisselen van start.

Dit is een misvatting die is herhaald zo vaak dat het is nu wijsheid ontvangen. Als (bijna) iedereen vertelt je dat precies hoe swappiness werkt, waarom zou je ons geloven als we zeggen dat het niet?

Eenvoudig. We gaan om het te bewijzen.

De RAM is verdeeld In Zones

Linux niet denken van je RAM-geheugen als één grote homogene zwembad van het geheugen. Zij is van mening dat moet worden verdeeld in een aantal verschillende regio ‘ s genoemd zones. De zones die op uw computer aanwezig zijn, is afhankelijk van of het een 32-bits of 64-bits. Hier is een vereenvoudigde beschrijving van de mogelijke zones op een x86 architectuur van de computer.

  • Direct Memory Access (DMA): Dit is de laag van 16 MB geheugen. De zone dankt zijn naam omdat het een lange tijd geleden, waren er computers die alleen kon doen (direct memory access) in dit gebied van het fysieke geheugen.
  • Direct Memory Access 32: Ondanks de naam (Direct Memory Access) 32 (DMA32) is een zone alleen in 64-bits Linux. Het is de laag 4 GB geheugen. Linux draait op computers met 32-bits kan alleen DMA deze hoeveelheid RAM-geheugen (tenzij ze zijn met behulp van de physical address extension (PAE) kernel), dat is hoe de zone zijn naam kreeg. Hoewel, op computers met 32-bits, wordt het genoemd HighMem.
  • Normaal: Op 64-bit computers, normaal geheugen is al het RAM-geheugen boven de 4 GB (ongeveer). Op 32-bits machines, is het RAM-geheugen van 16 MB en 896 MB.
  • HighMem: Deze bestaat alleen op 32-bit Linux-computers. Het is allemaal RAM boven 896 MB, inclusief RAM-geheugen boven de 4 GB op voldoende grote machines.

De PAGESIZE Waarde

RAM-geheugen is ingedeeld in pagina ‘ s, die zijn van een vaste grootte. Die grootte wordt bepaald door de kernel tijdens het opstarten door het opsporen van de architectuur van de computer. Meestal de pagina grootte op een Linux-computer is 4 Kbytes.

U kunt uw pagina grootte met behulp van de getconf opdracht:

getconf PAGESIZE

De Zones Zijn Gekoppeld aan Knooppunten

De Zones zijn verbonden knooppunten. Knooppunten zijn verbonden met een CPU (Central Processing Unit). De kernel zal proberen om het toewijzen van geheugen voor een proces dat wordt uitgevoerd op een CPU van het knooppunt verbonden met die van de CPU.

Het concept van de knooppunten van gebonden te zijn aan Cpu ‘ s kunt u gemengde geheugen typen geïnstalleerd te worden in gespecialiseerde multi-CPU-computers, met behulp van de Non-Uniform Memory Access-architectuur.

Dat is allemaal heel erg high-end. De gemiddelde Linux-computer heeft een enkele knoop, genaamd knooppunt nul. Alle zones die behoren tot het knooppunt. Om de knooppunten en de zones op uw computer, kijk dan in de /proc/buddyinfo bestand. We gebruiken minder te doen:

minder /proc/buddyinfo

Dit is de output van de 64-bits computer in dit artikel werd onderzocht op:

Node 0, zone DMA 1 1 1 0 2 1 1 0 1 1 3
Node 0, zone DMA32 2 67 58 19 8 3 3 1 1 1 17

Er is een enkel knooppunt nul. Deze computer heeft 2 GB RAM-geheugen, dus er is geen “Normale” zone. Er zijn slechts twee zones, DMA en DMA32.

Elke kolom vertegenwoordigt het aantal beschikbare pagina ‘ s van een bepaalde grootte. Bijvoorbeeld, voor de DMA32 zone, het lezen van de links:

  • 2: Er zijn 2 van 2^(0*PAGESIZE) stukken van het geheugen.
  • 67: Er zijn 67 van 2^(1*PAGE_SIZE) stukken van het geheugen.
  • 58: Er zijn 58 van 2^(2*PAGESIZE) stukken geheugen beschikbaar.
  • En zo verder, tot aan…
  • 17: Er zijn 17 van 2^(512*PAGESIZE) brokken.

Maar echt, de enige reden waarom we op zoek naar deze informatie is te zien op de relatie tussen de knooppunten en zones.

Bestand-Pagina ‘s en Anoniem Pagina’ s

Memory mapping gebruikt sets paginatabelvermeldingen om vast te leggen welke geheugen pagina ‘ s worden gebruikt, en voor wat.

Geheugen toewijzingen kunnen worden:

  • Back-up: back-up-toewijzingen bevatten gegevens die zijn te lezen uit een bestand. Het kan elk type bestand. Het is belangrijk om op te merken is dat als het systeem bevrijd deze geheugen en nodig voor het verkrijgen van die gegevens opnieuw kunnen worden gelezen van de file eenmaal meer. Maar, als de gegevens zijn gewijzigd in het geheugen, zullen deze wijzigingen moeten worden geschreven naar het bestand op de vaste schijf voordat u het geheugen kan worden vrijgemaakt. Als dat niet het geval, de wijzigingen verloren zou gaan.
  • Anoniem: Anoniem geheugen is een geheugen kaarten met geen bestand of apparaat back-ups maken. Deze pagina ‘s kan bevatten geheugen aangevraagd on-the-fly-by-programma’ s om gegevens op te slaan, of voor dingen zoals de stack en de heap. Omdat er geen bestand is achter dit soort gegevens, een speciale plaats moet worden gereserveerd voor de opslag van anonieme gegevens. Die plaats is de swap partitie of het swap-bestand. Anonieme data wordt geschreven om te wisselen voor anonieme pagina ‘ s worden bevrijd.
  • Apparaat ondersteund: Apparaten worden aangepakt door het blokkeren apparaat bestanden die kunnen worden behandeld als waren zij bestanden. Gegevens kunnen worden gelezen en geschreven naar hen. Een apparaat ondersteund geheugen kaart van gegevens van een apparaat is opgeslagen.
  • Gedeeld: Meerdere pagina ‘ s table entries kunt de kaart op dezelfde pagina van het RAM-geheugen. De toegang tot het geheugen locaties door middel van een van de toewijzingen zal dezelfde gegevens. Verschillende processen met elkaar kunnen communiceren op een heel efficiënte manier door het wijzigen van de gegevens in deze gezamenlijk bekeken locaties in het geheugen. Gedeelde beschrijfbare toewijzingen zijn een gemeenschappelijke middelen voor het bereiken van high-performance inter-proces communicatie.
  • De kopie op schrijven: de Kopie op schrijven is een luie toewijzing techniek. Indien een kopie van een resource al in het geheugen is verzocht, het verzoek is voldaan door het retourneren van een mapping naar de oorspronkelijke bron. Als één van de processen “delen” van de bron probeert te schrijven, moet de bron worden echt gerepliceerd in het geheugen, zodat de wijzigingen worden doorgevoerd om de nieuwe kopie. Dus het geheugen toewijzing vindt alleen plaats op de eerste schrijfopdracht.

Voor swappiness, hoeven we alleen maar ons bezighouden met de eerste twee in de lijst: bestand-pagina ‘s en anoniem pagina’ s.

Swappiness

Hier is de beschrijving van swappiness van het Linux documentatie op GitHub:

“Deze controle wordt gebruikt om te definiëren hoe agressief (sic) zal de kernel swap geheugen pagina’ s. Hogere waarden verhogen agressiviteit, lagere waarden verlagen van het bedrag van de swap. Een waarde van 0 geeft de kernel niet te starten swap tot het bedrag van de vrije en bestandsgebaseerde pagina ‘ s minder dan de high water mark in een zone.

De standaardwaarde is 60.”

Dat klinkt als swappiness draait swap omhoog of omlaag in intensiteit. Interessant is dat het de lidstaten die de instelling swappiness op nul niet uitschakelen wisselen. Het geeft de kernel niet om te wisselen totdat aan bepaalde voorwaarden is voldaan. Maar wisselen kan nog steeds optreden.

Laten we eens dieper graven. Hier is de definitie en de standaard waarde van vm_swappiness in de kernel broncode bestand vmscan.c:

/*
* Van 0 .. 100. Hogere betekent meer swappy.
*/
int vm_swappiness = 60;

De swappiness waarde kan variëren van 0 tot 100. Nogmaals, de reactie zeker klinkt als de swappiness waarde is van invloed op hoe veel het omwisselen vindt plaats, met een hoger cijfer leidt tot meer wisselen.

Verder op in de broncode van het bestand, kunnen we zien dat er een nieuwe variabele genaamd swappiness is toegewezen aan een waarde die wordt geretourneerd door de functie mem_cgroup_swappiness(). Wat meer traceren via de source code zal laten zien dat de waarde die wordt geretourneerd door deze functie is vm_swappiness. Dus nu, de variabele swappiness op gelijk welke waarde vm_swappiness was ingesteld.

int swappiness = mem_cgroup_swappiness(memcg);

En een beetje verder naar beneden in dezelfde broncode-bestand, zien we dit:

/*
* Met swappiness op 100, anoniem en bestand hebben dezelfde prioriteit.
* Deze scannen prioriteit is in wezen het omgekeerde van IO kosten.
*/
anon_prio = swappiness;
file_prio = 200 – anon_prio;

Dat is interessant. Twee verschillende waarden zijn afgeleid van swappiness. De anon_prio en file_prio variabelen houd deze waarden. Als een verhoogt, de andere af, en vice versa.

De Linux swappiness waarde eigenlijk stelt de verhouding tussen twee waarden.

De Gouden Ratio

Bestand-pagina ‘ s hold-gegevens die kunnen eenvoudig worden opgehaald als dat geheugen is vrijgemaakt. Linux kan gewoon lezen het bestand opnieuw. Zoals we hebben gezien, als het bestand gegevens is gewijzigd in het RAM-geheugen, moeten deze wijzigingen worden geschreven naar het bestand voordat het bestand kan worden vrijgemaakt. Maar, in beide richtingen, de pagina bestand in het RAM-geheugen opnieuw gevuld kan worden door het lezen van gegevens uit het bestand. Dus waarom zou het toevoegen van deze pagina ‘ s om de swap partitie of een wisselbestand? Als u die gegevens weer, je kan net zo goed lezen terug van het oorspronkelijke bestand in plaats van een redundante kopie in de swap-ruimte. Dus bestand pagina ‘ s worden niet opgeslagen in swap. Ze zijn “opgeslagen” in het oorspronkelijke bestand.

Met anonieme pagina ‘ s, is er geen onderliggende bestand in verband met de waarden in het geheugen. De waarden in deze pagina ‘ s zijn dynamisch gekomen. Je kunt niet zomaar lees ze terug in een bestand. De enige manier om anonieme geheugen pagina ‘ waarden kunnen worden hersteld, is de gegevens op te slaan ergens voordat het geheugen vrijmaken. En dat is wat de swap heeft. Anoniem pagina ‘ s die u gaat nodig hebben om te reference weer.

Maar merk op dat voor zowel bestands-pagina ‘s en voor anonieme pagina’ s, het opschonen van het geheugen kan een harde schijf schrijven. Als het bestand gegevens of de anonieme pagina data is veranderd sinds het voor het laatst werd geschreven naar het bestand of om te wisselen, een bestandssysteem schrijven is vereist. Voor het ophalen van de gegevens nodig van een bestandssysteem te lezen. Beide soorten pagina terugvorderen zijn kostbaar. Proberen te beperken harde schijf input en output door het minimaliseren van het wisselen van anonieme pagina ‘s vergroot alleen maar het bedrag van de vaste schijf van de input en de output die is vereist voor het hanteren van het bestand pagina’ s worden geschreven, en het lezen van bestanden.

Zoals je kunt zien op de laatste codefragment, er zijn twee variabelen. Een zogenaamde file_prio voor “bestand prioriteit”, en een zogenaamde anon_prio voor “anonieme prioriteit”.

  • De anon_prio variabele is ingesteld op de Linux swappiness waarde.
  • De file_prio waarde is ingesteld op 200 minus de anon_prio waarde.

Deze variabelen waarden bevatten die werken in tandem. Als ze beide zijn ingesteld op 100, ze zijn gelijk. Voor alle andere waarden, anon_prio zal dalen van 100 naar 0, en file_prio zal verhogen van 100 naar 200. De twee waarden in te voeren in een ingewikkeld algoritme dat bepaalt of de Linux kernel draait met een voorkeur voor het terugwinnen (vrijgemaakt) bestand pagina ‘s of anoniem pagina’ s.

U kunt denken aan file_prio als het systeem de bereidheid om het bestand pagina ‘s en anon_prio als het systeem bereidheid tot het gratis anonieme pagina’ s. Wat deze waarden niet moet doen is een soort van trigger of de drempel voor als swap zal worden gebruikt. Dat is besloten elders.

Maar, wanneer het geheugen moet worden vrijgelaten, zijn deze twee variabelen en de verhouding tussen hen—in aanmerking worden genomen door de drooglegging en swap algoritmes om te bepalen welke pagina types zijn bij voorkeur in aanmerking voor vrijmaken. En die bepaalt of de bijbehorende activiteit van de vaste schijf wordt de verwerking van bestanden voor file ‘s of swap ruimte voor anonieme pagina’ s.

Wanneer Wordt De Swap Daadwerkelijk Snijden In?

We hebben vastgesteld dat de Linux swappiness waarde stelt een voorkeur voor het type geheugen pagina ‘ s worden gescand op potentiële drooglegging. Dat is prima, maar iets moet beslissen wanneer swap is gaan snijden in.

Elk geheugen zone heeft een high water mark en een laag waterpeil. Deze zijn systeem van de afgeleide waarden. Ze zijn percentages van de RAM in elke zone. Het zijn deze waarden die worden gebruikt als swap trigger drempels.

Om te controleren wat uw hoog en laag water-tekens zijn, kijk dan in de /proc/zoneinfo bestand met het volgende commando:

minder /proc/zoneinfo

Elk van de zones zal een set memory waarden gemeten in pagina ‘ s. Hier zijn de waarden voor de DMA32 zone op de testmachine. Het lage water mark is 13966 pagina ‘s, en de high water mark is 16759 pagina’ s:

  • In de normale bedrijfsomstandigheden, bij vrij geheugen in een zone beneden de zone van de lage water mark, de swap-algoritme begint met het scannen van geheugen-pagina ‘ s op zoek naar geheugen dat kan terugvorderen, rekening houdend met de relatieve waarden van anon_prio en file_prio.
  • Als de Linux swappiness waarde is ingesteld op nul, swap treedt op wanneer de totale waarde van de file ‘s en vrije pagina’ s zijn minder dan de high water mark.

Zo kunt u zien dat u niet gebruik maken van de Linux swappiness waarde te beïnvloeden swap gedrag met betrekking tot de RAM-gebruik. Het werkt gewoon niet zo.

Wat Moet Swapiness Worden Ingesteld?

Dit is afhankelijk van de hardware -, werkdruk, type harde schijf is, en of uw computer is een computer of een server. Het is duidelijk, dit gaat niet om een one size fits all type instelling.

En je moet in gedachten houden dat de swap niet alleen gebruikt als een mechanisme RAM vrij te maken wanneer u te weinig ruimte in het geheugen. Swap is een belangrijk onderdeel van een goed functionerend systeem, en zonder dit, gezond beheer van het geheugen, wordt het zeer moeilijk voor Linux te bereiken.

Het veranderen van de Linux swappiness waarde heeft een onmiddellijk effect; je hoeft niet opnieuw op te starten. Zo kunt u kleine aanpassingen en het monitoren van de effecten. Ideaal, zou u dit doen over een periode van dagen, met verschillende soorten activiteiten op uw computer, om te proberen te vinden die het dichtst bij een ideale omgeving die je kunt.

Dit zijn een paar punten om te overwegen:

  • Het proberen te “uitschakelen ” swap” door het instellen van de Linux swappiness waarde op nul gewoon verschuift de swap-geassocieerde activiteit van de vaste schijf naar het bestand-geassocieerde activiteit van de vaste schijf.
  • Als u aging, mechanische harde schijven, je zou kunnen proberen om de Linux swappiness waarde om vooroordelen weg van anonieme pagina inpoldering en het verminderen van de swap partitie churn. Natuurlijk, als u één van de instelling, de andere instelling verhoogt. Het verminderen van swap churn is waarschijnlijk om de bestand systeem churn. Maar uw computer kan worden gelukkiger ten gunste van de ene methode boven de andere. Echt, de enige manier om zeker te weten is om te proberen en te zien.
  • Voor een single-purpose-servers, zoals database-servers, kunt u begeleiding krijgen van de leveranciers van de database software. Heel vaak zijn deze applicaties hebben hun eigen doel ontworpen bestand en cache geheugen management routines die je zou beter zijn om op te rekenen. De software-aanbieders kunnen wijzen op een Linux swappiness waarde volgens de machine specificaties en de werklast.
  • Voor de gemiddelde desktop gebruiker met redelijk recente hardware? Het laten zoals het is.

Het Instellen van de Linux Swappiness Waarde

Voordat u uw swappiness waarde, moet je weten wat de huidige waarde is. Als u wilt beperken het een beetje de vraag is een beetje minder dan wat? U kunt te weten komen met het commando:

cat /proc/sys/vm/swappiness

Voor het configureren van de swappiness waarde, de sysctl gebruiken die commando:

sudo sysctl-vm.swappiness=45

De nieuwe waarde wordt gebruikt direct, zonder opnieuw opstarten is vereist.

In feite, als u herstart, zal de swappiness waarde weer terug naar de standaard waarde van 60. Wanneer u klaar bent met experimenteren en hebben besloten op de nieuwe waarde die u wilt gebruiken, kunt u het blijvend na een systeem herstart door het toe te voegen aan het /etc/sysctl.conf bestand. U kunt gebruik maken van welke editor u de voorkeur geeft. Gebruik de volgende opdracht om het bestand te bewerken met de nano editor:

sudo nano /etc/sysctl.conf

Wanneer nano wordt geopend, gaat u naar de onderkant van het bestand en voeg deze regel toe. We gebruiken 35 de permanente swappiness waarde. Dient u vervanging van de waarde die u wilt gebruiken.

vm.swappiness=35

Uw wijzigingen op te slaan en af te sluiten nano, druk op “Ctrl+O”, druk op “Enter”, en druk op “Ctrl+Z.”

Geheugen Beheer is Complex

Geheugen beheer is ingewikkeld. En dat is waarom, voor de gemiddelde gebruiker, is het meestal beter om het te laten tot de kernel.

Het is gemakkelijk om te denken dat je met meer RAM-geheugen dan je bent. Hulpprogramma ‘ s zoals top en kan de verkeerde indruk wekken. Linux zal gebruik maken van de gratis hoeveelheid RAM voor een verscheidenheid van hun eigen doeleinden, zoals disk-caching. Dit kunstmatig verhoogt de “gebruikte” memory afbeelding en vermindert de “gratis” memory figuur. In feite, het RAM-geheugen gebruikt als cache is gemarkeerd als zowel “gebruikt” en “beschikbaar” omdat het kan worden teruggevorderd op elk moment, heel snel.

Voor de niet-ingewijden dat eruit zou kunnen zien swap niet werkt, of dat de swappiness waarde dient te worden vervangen.

Zoals altijd, de duivel zit in het detail. Of, in dit geval, de daemon. De kernel swap daemon.

LEES VERDER

  • “Die iPhones Hebben Portret Modus?
  • “Zal Windows 10 installeren op Mijn Computer?
  • “Waar Kunt U Het Streamen Van Uw Favoriete Kerst-Specials
  • “Het Afdrukken van Foto’ s in Windows 10
  • “Het Bijhouden van de Voorraden met Google spreadsheets