Swappiness-parametri kontrolloi tapaa, jolla linuxin ydin eli kernel vaihtaa (swap) prosesseja fyysisestä muistista swap-välimuistiin. Koska levymuisti on huimasti RAM-muistia hitaampaa, voi vaihtaminen aiheuttaa järjestelmän ja sovellusten hitaampia vasteaikoja, jos niiden prosesseja siirretään aggressiivisesti pois keskusmuistista.
Swappiness-parametri voi sisältää arvon 0:sta 100:aan.
Swappiness = 0 määrää ytimen välttämään prosessien vaihtamasta pois fyysisestä muistista niin pitkään kuin mahdollista.
Swappiness = 100 käskee ydintä vaihtamaan aggressiivisesti prosesseja fyysisestä muistista SWAP-välimuistiin.
Oletuksena swappiness-parametrin arvo on 60. Sen pienentäminen voi tyypillisessä työpöytäkäytössä parantaa laitteiston suorituskykyä. Palvelimessa arvon pienentäminen ei todennäköisesti tuota parempaa suorituskykyä.
Linux käsittelee muistia sivuina (page), joka on vakiokokoinen viipale muistia. Ydin määrittelee sivun koon linuxin käynnistyessä, ja tyypillisesti se on 4 kilobittiä.
Muistia käsitellään noodina (node), joka koostui zoneista eli vyöhykkeistä. Normaalissa 64-bittisessä työasemassa on yksi noodi, johon eri muistivyöhykkeet liitetään. Muisti mäpätään sivuviittauksina joita voidaan pitää keskusmuistissa tai levymuistissa.
Swappiness -arvon näkee komennolla
cat /proc/sys/vm/swappiness
Arvon voi muuttaa väliaikaisesti komentamalla
sudo sysctl vm.swappiness=10
Arvo palautuu takaisin oletusarvoon (60), kun koneen käynnistää uudelleen. Pysyväksi muutoksen saa mm. Ubuntussa tallentamalla vm.swappiness -arvon tiedostoon /etc/sysctl.conf
Kun swappiness-arvoa muutetaan, siitä johdetaan kaksi ytimen muuttujaa: anon_prio ja file_prio.
Anon_prio saa swappiness-ympäristömuuttujan sisältämän arvon ja file_prio = 200 - anon_prio.
Toisin sanoen, Linux swappiness asettaa näiden kahden muuttujan välisen suhteen.
Keskusmuistissa on varattuna tiedostosivuja (file page) ja nimettömiä-sivuja (anonymous page), joissa erilaisia tietoja säilytetään. Tiedostosivuja käytetään helposti uudelleen haettavan tiedon säilyttämiseen. Se voidaan uhrata ja myöhemmin sama tieto voidaan käydä lukemassa tiedostosta. Nimettömät sivut on varattu tiedolle, jota ei ole tiedostossa, jolloin tietoa ei voida tarvittaessa uudelleen noutaa. Sitä pidetään muistissa, kunnes tietoa ei enää tarvita.
Jos swappiness-arvo on 100, sekä anon_prio että file_prio ovat yhtä suuria, 100. Tällöin keskusmuistin sekä tiedostosivuja että nimettömiä sivuja pyritään vapauttamaan yhtä paljon. Swappiness-arvoa muuttamalla näiden muistialueiden vapauttamisen suhdetta muutetaan.
Tiedostosivujen tietoa luetaan niiden sisältämistä tiedostoista ja nimettömien sivujen tietoa talletetaan ja luetaan swap-muistista. Kun levyasema tekee muistinhallinnan pyytämiä töitä, käsitellään joko tiedostoja tai SWAP-muistia.
Näin ollen, jos swappiness-arvoksi määritellään 0, linux ydin suosii levyoperaatioissa tiedostojen lukemista swapin käytön sijaan. Swapin käytön vähentyessä, muiden tiedostojen levynkäyttö lisääntyy.
Tavallisen työpöytäkäyttäjän kannalta linuxin asettama oletusarvo on hyvä. Ydin tekee paljon työtä muistin käyttämiseksi parhaalla tavalla. Se käyttää vapaana olevaa muistia levyoperaatioiden välimuistina ja osaa säätää tätä välimuistia isommaksi tai pienemmäksi, kun keskusmuistia tarvitaan lisää tai sitä vapautuu. Free-komento kertoo, paljonko keskusmuistia ydin näkee ja paljoko siitä on käytetty tiedoille ja paljonko välimuistiksi. Lopuksi se kertoo, paljonko koneeseen on määritelty swap-välimuistia:
free
total used free shared buff/cache available
Mem: 3912816 309980 2827220 4952 775616 3347024
Swap: 3253244 0 3253244
Esimerkissäni on 64-bittinen Ubuntu-palvelin, jossa on 4 gigaa keskusmuistia, josta on käytetty 300 megatavua sovellusten tiedoille ja 757 megatavua välimuistille. Swapia asennusohjelma on varannut 3,1 gigaa, mutta siitä ei ole yhtään käytössä. Kone on ollut pari päivää päivityksen jälkeen käytössä ja swappiness-parametrin arvo on 60 (oletus).
Tietokantapalvelimessa tietokantaohjelmiston valmistaja on tutkinut erilaisia optimointeja ja voi antaa suosituksen, millaista swappiness-arvoa kannattaa käyttää. Yleensä erilaiset välimuistit ja muistinhallinta-algoritmit on viritetty tätä mietittyä erityiskäyttöä varten.
Swap voidaan jakaa useammalle levylle omiin osioihinsa tai tiedostoon. Linux-ydin osaa balansoida usean swap-osion välillä, samalla tavalla kuin raid-levypakassa. Eri swap-säiliöillä voi olla eri prioriteetti, jonka avulla kontrolloidaan, missä järjestyksessä niitä suositaan. Prioriteetin näkee komennolla
cat /proc/swaps
Lähteenä tässä artikkelissa on käytetty linkin Howtogeekin artikkelia
Swappiness in Linux has nothing to do with how much RAM is used before swapping starts. We tell you what it really is.
www.howtogeek.com
ja Ubuntun swap FAQ-ohjetta: