Swap

Linux.fista
Versio hetkellä 15. marraskuuta 2007 kello 18.46 – tehnyt Maakuth (keskustelu | muokkaukset) (typo)
Siirry navigaatioon Siirry hakuun

Swap eli heittovaihto (joka tosin nykyisin on lähes aina sivutusta) tarkoittaa keskusmuistissa olevan datan siirtämistä muistitilan loppuessa massamuistilla (yleensä kiintolevyllä) sijaitsevalle swap-alueelle.

Sivutukselle ja heittovaihdolle "vastakkainen" toimenpide on massamuistilla sijaitsevien, usein tarvittavien tiedostojen kopioiminen keskusmuistiin niiden lukemisen nopeuttamiseksi. Tällä on osaltaan suuri merkitys järjestelmän suorituskyvylle.

Linuxissa swap-alue sijoitetaan yleensä erilliselle kiintolevyosiolle, jolla on oma, swap-käyttöön optimoitu tiedostojärjestelmänsä. Tavalliselle osiolle sijoitettuun swap-tiedostoon verrattuna tällä saavutetaan tietty nopeusetu (joka tosin on nykyisin melko marginaalinen).

Komennolla

cat /proc/swaps

näkee kaikki järjestelmässä käytössä olevat swap-alueet tietoineen.

Swapin käyttöönotto

Useimpien jakeluiden asennusohjelmat luovat swap-osion joko täysin automaattisesti tai ainakin mahdollistavat sellaisen luomisen muutamalla näppäimenpainalluksella. Tällöin myös lisätään fstab-asetustiedostoon rivi, joka liittää ja ottaa käyttöön swap-osion aina järjestelmän käynnistyessä.

Jos samalla koneella on useampi Linux-järjestelmä, voivat ne käyttää samaa swap-osiota. Myöhemmin asennetun järjestelmän asennusohjelman pitäisi automaattisesti tunnistaa ja ottaa käyttöön koneelta jo löytyvä swap-osio. Mikäli näin ei tapahdu, voidaan käyttöönottoon tarvittava rivi lisätä manuaalisesti fstabiin. Myös toisen järjestelmän osiolta löytyvää swap-tiedostoa voi käyttää useamman järjestelmän kesken. Tämä edellyttää kuitenkin käytännössä aina manuaalista käyttöönottoa.

Käyttöönotto käsin

Swap-osio tai -tiedosto voidaan luoda myös käsin. Swap-osio tehdään luomalla ensin vapaavalintaisella osiointiohjelmalla sopiva osio. Monet osiointiohjelmat tarjoavat erillistä toimintoa swap-osion luomiseen, jolloin osiolle luodaan valmiiksi oikea tiedostojärjestelmä. Jos tällaista vaihtoehtoa ei ole tarjolla, voidaan luoda tyhjä (alustamaton) osio ja tehdä sille jälkikäteen swap-tiedostojärjestelmä komennolla mkswap levyosion_laitetiedosto, esimerkiksi

mkswap /dev/sda4

Tämän jälkeen tulee lisätä fstabiin sopiva rivi swap-osion käyttöönottamiseksi järjestelmän käynnistyessä. Ylläolevassa tapauksessa oikea rivi olisi

/dev/sda4        swap        swap         defaults  0 0

Swap-osio voidaan ottaa käyttöön myös manuaalisesti komennolla swapon sekä poistaa käytöstä komennolla swapoff.

Swap-tiedoston käyttöönottoa on neuvottu erillisessä artikkelissa Swap-tiedoston luominen.

Swapin koko

Swap-osion tai -tiedoston oikeasta koosta on lähes yhtä monta mielipidettä kuin on Linux-käyttäjiä. Eräiden mielestä swap-tilaa pitäisi olla 2x keskusmuistin verran, toisten mielestä 1,5x ja jotkut taas kannattavat keskusmuisti + 10% -sääntöä. Kolmansien mielestä keskusmuistia + swap-tilaa pitäisi olla aina vähintään 1 Gt.

Tosiasia kuitenkin on, että swapin tarve vähenee keskusmuistitilan kasvaessa. Esimerkiksi 256 Mt -keskusmuistilla varustetulle koneelle kolminkertainenkaan swapin määrä ei varmasti ole liioittelua. 1 Gt -keskusmuistilla sen sijaan saattaa hyvin riittää 256 Mt, eikä 2 Gt muistilla varustetulla koneella välttämättä tarvita swapia lainkaan.

Kaikki riippuu tosin koneen käyttötarkoituksesta. Surffailuun ja kevyeen tekstinkäsittelyyn saattaa hyvin riittää 256 Mt keskusmuistia + 300 Mt swap-tilaa, kun taas raskaaseen kuvan- ja videonkäsittelyyn käytettävällä koneella 2 Gt + 2 Gt:kään ei välttämättä ole liikaa.

Yleisesti ottaen swap-tilaa kannattaa mieluummin varata hiukan liikaa kuin liian vähän. Jos sekä keskusmuisti että swap-tila pääsevät loppumaan, saattaa kone nimittäin seota pahemman kerran.

Vapaan keskusmuistin ja swap-tilan määrän megatavuina näkee komennolla

free -m

Komennon tulosteessa on eroteltu ohjelmien käytössä oleva sekä kiintolevyvälimuistina käytettävä keskusmuistitila. Kaavio keskusmuistin kulutuksesta löytyy myös KDE:n ja GNOMEn järjestelmänvalvontatyökaluista.

Swapin käytön optimoiminen

Koska keskusmuistia käytetään sekä ajettavien ohjelmien varastoimiseen että usein tarvittavien tiedostojen välimuistina (kiintolevyvälimuisti), joutuu ydin tekemään jatkuvaa painottelua näiden kahden käyttötarkoituksen välillä. Käytännössä on päätettävä, milloin harvoin käytetty ohjelmakoodi kannattaa siirtää swapiin antaamaan tilaa usein kiintolevyltä haetulle tiedostolle. Normaalitapauksessa keskusmuistissa ei juuri ole tyhjää tilaa, vaan käytännössä kaikki on joko ohjelmien dataa tai kiintolevyvälimuistia.

Herkkyyttä ajettavien ohjelmien swapiin siirtämiseen säädellään tiedoston /proc/sys/vm/swappiness avulla. Asetus voi olla välillä 0-100. 0 tarkoittaa, että ohjelmien dataa ei koskaan siirretä kiintolevyvälimuistin tieltä swapiin (swap otetaan käyttöön vain silloin, kun keskusmuisti täyttyy ohjelmadatasta). 100 taas tarkoittaa, että todennäköisyys ohjelmadatan syrjäyttämiselle kiintolevyvälimuistin tieltä on hyvin suuri.

Oletusasetuksena toimii useimmissa jakeluissa 60, mikä on hyvä palvelinkäytössä, mutta työpöytäkäyttöön yleensä turhan korkea. Työpöytäkäytössä hyvä arvo on tyypillisesti välillä 20-30. Jotkut käyttävät jopa arvoa 10 tai 0. Paras arvo riippuu käytettävien ohjelmien tyypistä ja siihen pääsee käytännössä vain itse kokeilemalla.

Nykyisen swappiness-arvon näkee komennolla

cat /proc/sys/vm/swappiness

Arvon säätäminen esimerkiksi 20:een onnistuisi komennolla

echo 20 > /proc/sys/vm/swappiness

Tämä edellyttää luonnollisesti pääkäyttäjän oikeuksia.

Pysyvä asetus voidaan määritellä lisäämällä /etc/sysctl.conf-asetustiedostoon rivi

vm.swappiness = 20

Sysctl.confiin määritellyt asetukset tulevat oletuksena käyttöön seuraavan uudelleenkäynnistyksen jälkeen. Asetusten käyttöönotto suoraan onnistuu komennolla

sysctl -p

Swap-alueiden prioriteetti

Jos käytössä on lukuisia swap-alueita, voi niille asettaa keskinäisen prioriteetin riippuen esimerkiksi käytettävän massamuistin nopeudesta. Prioriteetti voi olla joko korkea tai matala. Oletusprioriteetti on aina matala (-1). Jos prioriteetti määritellään erikseen (kokonaisluku väliltä 0-32767) tulee siitä automaattisesti korkea. Korkea prioriteetti voidaan asettaa swapon-komennon valitsimella -p, esimerkiksi

swapon -p 2048 /swapfile

Pysyvä asetus määritellään fstabin neljännessä sarakkeessa paramerillä pri, esimerkiksi

/dev/sda4        swap        swap         defaults,pri=20485   0 0

Katso myös