Usein kysyttyjä kysymyksiä ytimestä

Linux.fista
Versio hetkellä 13. lokakuuta 2011 kello 10.07 – tehnyt Jem (keskustelu | muokkaukset) (Lisätty tarinaa ongelman taustasta.)
Siirry navigaatioon Siirry hakuun

Miksi gigatavun muistista jää osa käyttämättä?

Prosessin muistiavaruus on jaettu kahteen osaan, joista yksi osa on varattu vain ytimen käyttöön. 32-bittisiä osoitteita käyttävässä koneessa osoiteavaruuden koko on 4 gigatavua (4 GiB), joista perinteisesti ylin 1 GiB on ollut varattuna ytimelle ja loput 3 GiB prosessissa suoritettavan sovelluksen käytössä. Ytimelle varatussa osassa on kuvattuna koko fyysinen RAM-muisti. Tämä ei ollut ongelma niin kauan kuin tietokoneiden muistin koko oli korkeintaan tuo 1 GiB, mutta muistin määrän kasvaessa on tullut tarve kasvattaa ytimelle varatun osuuden kokoa (tai keksiä jokin toinen ratkaisu ongelmalle).

Tarkempi kuvaus ongelman syistä ja ratkaisuista löytyy mm. artikkelista High Memory in the Linux Kernel. Ytimen versiosta 2.6.16 alkaen on mahdollista käyttää ratkaisua, jossa muutetaan kernelin muistinjakoa, jolloin ei tarvitse vielä turvautua highmem-tukeen, joka tuo oman overheadinsä. Vanhemmille ytimille tarvittava patch löytyy mm. Con Kolivasin seteistä. Muisti voidaan jakaa neljällä eri tavalla:

 * 3G/1G - vanha tapa, jossa muistia käytetään n. 896 MiB.
 * 3G/1G - Jako koneille, joissa on tasan 1 GiB muistia.
 * 2G/2G - Jako koneille, joissa on tasan 2 GiB muistia.
 * 1G/3G - Jako koneille, joissa on tasan 3 GiB muistia.

Haittapuoli esimerkiksi 2G/2G jaosta on se, että user space virtuaalimuistiavaruus (prosessin maksimikoko) on enää 2 GiB entisen reilun 3GiB:n sijasta. Tämä estää esimerkiksi winen toiminnan ja saattaa haitata prosesseja, jotka käyttävät matalan tason muistinhallintaa. Useimpia tämä ei kuitenkaan haittaa.

Jos koneessa on enemmän kuin 2 GiB muistia ja 64-bittinen prosessori, on suositeltavaa käyttää 64-bittistä versiota Linuxista, jossa yllä kuvattuja ongelmia ei ole.

Miksi muistia on niin vähän vapaana?

"top näyttää, että muistia ei ole vapaana kuin muutamia megatavuja - mistä on kyse?" Muistista on eniten hyötyä, kun sitä käytetään. Ydin käyttää prosesseilta varaamatta jääneen vapaan muistin välimuistiksi, eli pitää siellä tiedostoja joita se on hiljattain tiedostojärjestelmämedialta lukenut. Välimuistiksi käytetty muisti on nopeasti vapautettavissa prosesseille, jos niiden muistintarve kasvaa. Niin kauan kun muistia ei tarvita, se kannattaa käyttää välimuistiksi jolloin se nopeuttaa järjestelmän toimintaa, aina kun samoja tiedostoja tarvitaan uudestaan. Kannattaakin siis tarkkailla ennemmin top-listauksen cached- kuin free-kenttää kun miettii paljonko muistia on vapaana.

Muutospaketit (engl. patchset)

Yleisimpiä muutospaketteja ovat mm.

  • mm (Andrew Mortonin kokeellinen patchset, tässä testataan paljon asioita)
  • ac (Alan Coxin patchset, RedHat tuntuu käyttävän näitä osina paketointiaan)
  • xx-git (tarkoittaa että paketti on git paketoinnista)
  • xx-pre (prerelease-versio)
  • xx-rc (release candicate versio)

Nämä yleisimmät muutospaketit löydät suoraan kernel.org:ista. Vanilla on peruskerneli, eli tarkoittaa kernel.orgin virallista versiota. Korjauspaketeilla pyritään korjaamaan tai säätämään jotain kernelin ominaisuutta, esimerkiksi laitetukea tai vasteaikaa. Isommat patchsetit yleensä lisäävät paljon ominaisuuksia.

Korjauspaketti asennetaan komennolla

patch -pN < polku patch-tiedostoon

N on poistettavien polkujen lukumäärä, yleensä vaihtelee 0-1 välillä. Tämän jälkeen ydin pitää vielä kääntää uusiksi.

Miten vältät yleisimmät ongelmat käynnistyksen yhteydessä

Parametri acpi=off voi auttaa bugisen ACPI-toteutuksen kiertämiseen.

Parametria init=/bin/sh voi käyttää salasanan vaihtoon.

Parametrillä vga=xxx voidaan määritellä framebuffer tilan resoluutio.

Kuinka ydin käännetään?

Ytimen kääntäminen on ohjeistettuna tässä wikissä.