Forstå VM.swappiness

Forstå VM.swappiness
Linux -kjernen er et ganske komplekst programvare med en lang liste over komponenter som moduler, grensesnitt og konfigurasjonsfiler [1]. Disse komponentene kan konfigureres med spesifikke verdier for å oppnå en ønsket oppførsel eller driftsmåte for komponenten [2,3,4]. Deretter påvirker dette oppsettet direkte både oppførselen og ytelsen til Linux -systemet ditt som helhet.

De gjeldende verdiene til Linux -kjernen og dens komponenter blir gjort tilgjengelige ved hjelp av et spesielt grensesnitt - /Proc -katalogen [5]. Dette er et virtuelt filsystem der enkeltfilene er fylt med verdier i sanntid. Verdiene representerer den faktiske tilstanden Linux -kjernen er i. Du kan få tilgang til de enkelte filene i /Proc -katalogen ved hjelp av CAT -kommandoen som følger:

$ katt/proc/sys/nett/kjerne/somaxconn
128
$

En av disse kjerneparametrene kalles VM.swappiness. Den "kontrollerer den relative vekten som er gitt til å bytte ut av runtime -minnet, i motsetning til å slippe minnesider fra systemsidenes cache" [6]. Begynner med Linux Kernel utgivelser 2.6 Denne verdien ble introdusert. Det er lagret i filen/proc/sys/vm/swappiness .

Ved hjelp av bytte

Bruken av bytte [6] var en essensiell del av å bruke mindre UNIX -maskiner på begynnelsen av 1990 -tallet. Det er fremdeles nyttig (som å ha et ekstra dekk i kjøretøyet) når stygt minne lekkasjer forstyrrer arbeidet ditt. Maskinen vil avta, men i de fleste tilfeller vil fortsatt være brukbar for å fullføre den tildelte oppgaven. Gratis programvareutviklere har gjort store fremskritt for å redusere og eliminere programfeil, så før du endrer kjerneparametere, vurder å oppdatere til en nyere versjon av applikasjonen din og relaterte biblioteker først.

Hvis du kjører mange oppgaver, vil de inaktive oppgavene bli byttet ut til disken, og utnytte minnet bedre med dine aktive oppgaver. Videoredigering og annet stort minneforbrukende applikasjoner har ofte anbefalt mengder minne og diskplass. Hvis du har en eldre maskin som ikke kan ha en minneoppgradering, kan det være en god midlertidig løsning for deg (se [6] om hvordan du lærer mer om det) å gjøre mer bytte tilgjengelig).

Byttingen kan skje på en egen partisjon eller på en byttefil. Partisjonen er raskere og foretrukket av mange databaseapplikasjoner. Filetilnærmingen er mer fleksibel (se DPHYS-SWAPFILE-pakken i Debian GNU/Linux [7]). Å ha mer enn en fysisk enhet for bytte lar Linux -kjernen velge enheten som er raskest tilgjengelig (lavere latens).

vm.swappiness

Standardverdien til VM.Swappiness er 60 og representerer prosentandelen av det frie minnet før du aktiverer bytte. Jo lavere verdi, jo mindre bytte brukes og jo mer minnesidene holdes i fysisk minne.

Verdien på 60 er et kompromiss som fungerer bra for moderne stasjonære systemer. En mindre verdi er et anbefalt alternativ for et serversystem, i stedet. Som Red Hat Performance Tuning Manual påpeker [8], anbefales en mindre swappinessverdi for arbeidsmengder for database. For Oracle -databaser anbefaler for eksempel Red Hat en swappinessverdi på 10. Derimot, for MariaDB -databaser, anbefales det å sette swappiness til en verdi av 1 [9].

Endring av verdien påvirker direkte ytelsen til Linux -systemet. Disse verdiene er definert:

* 0: Swap er deaktivert
* 1: Minimumsbytte for å bytte uten å deaktivere det helt
* 10: Anbefalt verdi for å forbedre ytelsen når det finnes tilstrekkelig minne i et system
* 100: Aggressiv bytte

Som vist ovenfor hjelper CAT -kommandoen til å lese verdien. SYSCTL -kommandoen gir deg også det samme resultatet:

# SYSCTL VM.swappiness
vm.Swappiness = 60
#

Husk at SYSCTL -kommandoen bare er tilgjengelig for en administrativ bruker. For å angi verdien midlertidig angi verdien i /proc -filsystemet som følger:

# ekko 10>/proc/sys/vm/swappiness

Som et alternativ kan du bruke SYSCTL -kommandoen som følger:

# sysctl -w vm.Swappiness = 10

For å angi verdien permanent, åpne filen /etc /sysctl.Conf som administrativ bruker og legg til følgende linje:

vm.Swappiness = 10

Konklusjon

Flere og flere Linux -brukere kjører virtuelle maskiner. Hver og en har sin egen kjerne i tillegg til hypervisoren som faktisk kontrollerer maskinvaren. Virtuelle maskiner har virtuelle disker laget for dem, så det å endre innstillingen i den virtuelle maskinen vil ha ubestemmelige resultater. Eksperimenter først med å endre verdiene til hypervisorkjernen, da den faktisk kontrollerer maskinvaren i maskinen din.

For eldre maskiner som ikke lenger kan oppgraderes (allerede har maksimal støttet minne) kan du vurdere å plassere en liten solid state -disk i maskinen for å bruke den som en ekstra bytteapparat. Dette vil åpenbart bli et forbruksvarelig ettersom minneceller mislykkes fra mange skriver, men kan forlenge en maskinens levetid i et år eller mer for veldig lav pris. Den nedre latens og hurtigleser vil gi mye bedre ytelse enn å bytte til en vanlig disk, noe som gir mellomliggende resultater til RAM. Dette skal tillate deg å bruke noe lavere VM.swappinessverdier for optimal ytelse. Du må eksperimentere. SSD -enheter endrer seg raskt.

Hvis du har mer enn en bytteenhet, kan du vurdere å gjøre det til en RAID -enhet for å stripe data over de tilgjengelige enhetene.

Du kan gjøre endringer i swappiness uten å starte maskinen på nytt, en stor fordel i forhold til andre operativsystemer.

Prøv å inkludere bare tjenestene du trenger for din virksomhet. Dette vil redusere minnekravene, forbedre ytelsen og holde alt enklere.

En siste merknad: Du legger til belastning i bytteenhetene dine. Du vil overvåke temperaturen til dem. Et overopphetet system vil senke CPU -frekvensen og senke farten.

Anerkjennelser

Forfatteren vil takke en spesiell takk til Gerold Rupprecht og Zoleka Hatitongwe for deres kritiske kommentarer og kommentarer mens de utarbeider denne artikkelen.

Lenker og referanser

* [1] Linux Kernel Tutorial for nybegynnere, https: // linuxhint.com/Linux-Kernel-Tutorial-Beginners/

* [2] Derek Molloy: Writing a Linux Kernel Module - Del 1: Introduksjon, http: // Derekmolloy.IE/Writing-A-Linux-Kernel-Module-Part-1-Introduksjon/

* [3] Derek Molloy: Writing a Linux Kernel Module - Del 2: A Character Device, http: // Derekmolloy.IE/Writing-A-Linux-Kernel-Module-Part-2-A-Character-Device/

* [4] Derek Molloy: Writing a Linux Kernel Module - Del 3: Knapper og lysdioder, http: // Derekmolloy.IE/Kernel-GPIO-programmering-Buttons-and-Leds/

* [5] Frank Hofmann: Kommandoer for å administrere Linux -minne, https: // linuxhint.com/kommandoer-til-manage-linux-memory/

* [6] Frank Hofmann: Linux Kernel Memory Management: Swap Space, https: // Linuxhint.com/linux-memory-management-swap-space/

* [7] DPHYS-SWAPFILE-pakke for Debian GNU/Linux, https: // pakker.Debian.org/stretch/dphys-swapfile

* [8] Red Hat Performance Tuning Guide, https: // tilgang.Rød hatt.com/dokumentasjon/en-us/red_hat_enterprise_linux/6/html/performance_tuning_guide/s-memory-tunables

* [9] Konfigurere MariaDB, https: // MariaDB.com/kb/en/bibliotek/konfigurering av swappiness/