(toiminnot)

hwechtla-tl: Nettipäiväkirja 16.10.2014

Kierre.png

Mikä on WikiWiki?
nettipäiväkirja
koko wiki (etsi)
viime muutokset


Pieni awk-mainos mainitsi eri ohjelmointikielten muistinkulutuksesta. Kiinnostuin taas siitä, miten sitä voisi edes mitata. Tiesin vanhastaan, että se on vaikeaa, koska yksittäisen prosessin muistinkulutuksessa olennaisinta on, kuinka paljon lisää muistia sen käynnistäminen vaatii, mikä taas riippuu siitä, mitä prosesseja on valmiiksi käynnissä.

Netissä on niin uskomattoman paljon ihmettelyä muistinkulutuksen laskemisesta, että kunnollista tietoa on vaikea edes löytää. Tarkat tiedot muistialueiden käytöstä prosessikohtaisesti saa kuitenkin periaatteessa pmap-työkalulla. Mutta pmap ilmeisesti näyttää muistiosoitteet prosessin sisäisinä muistiosoitteina, jolloin on vaikeaa vertailla eri prosessien pmapeista, mitkä muistialueet ovat yhteisiä.

Yksi tapa laskea prosessien muistinkulutusta on lähteä siitä, että mikään muisti, jonka prosessi pystyy periaatteessa jakamaan muiden prosessien kanssa, ei ole prosessin omaa muistinkulutusta - jopa vaikka sillä hetkellä ei sattuisikaan olemaan mitään muuta prosessia, joka kyseisen muistin jakaa. Tällaisia muistialueita ovat jaetut kirjastot, joita käyttävät prosessit lukevat ne yhteisestä muistista, ohjelmakoodi, joka tulee jaetuksi, jos sama ohjelma käynnistetään useammaksi prosessiksi, ja muisti, jota fork()in jälkeen ei ole vielä kirjoitettu ja joka siksi on jaettua lapsen ja vanhemman välillä.

Mutta mistä tämän tiedon saa irti? On vaikeaa edes löytää tietoa, mitä pmap -d:n "writeable/private" tarkoittaa, ja ottaako se sitten huomioon, mikä muisti on copy-on-write-jaettua ja mikä ei.


kommentoi (viimeksi muutettu 16.10.2014 12:04)