sprava pameti / volna pamet
Dan Lukes
dan at obluda.cz
Thu Aug 10 00:29:38 CEST 2006
Miroslav Lachman napsal/wrote, On 08/09/06 23:26:
> Diky za naprosto vycerpavajici odpoved
Taky me docela vycerpala ;-)
> to proto, ze kdyz mam dva stroje, jeden s 512MB a druhy 1GB ram a pustim
> na nich stejny zatezovy test, ktery zapisuje na disk a zpetne cte a
> porovnava md5 velke soubory porad dokola, po chvili behu dojde veskera
> volna pamet
Co znamena "dojde volna pamet" ? Ze se 'free' snizi k nule ? To bych
tipoval, ze se jen free odstehovala do cache ...
Mimochodem, jestli chces zabranit jednotlivym procesum rust nade
vsechny meze, urcitou moznosti je ulimit ...
> Nicmene diky i za ten tip se swapoff a swapon, chapu-li to dobre, tak to
> zakaze pouziti swapu, cimz se vyprazdni a pak ho to zase povoli.
No ano, ale otazka je, jaky smysl neco takoveho ma, vyjma specialnich
testovacich situaci. Popravde receno, vcera jsem swapoff pouzil uplne
poprve v zivote. Ostatne, na 4.x nic takoveho neexistuje ...
> chapu dobre i dalsi informace o swapu, tak co se do nej jednou vlozi, to
> v nem vetsinou zustane na vzdycky (nebo aspon na hodne dlouho i kdyz se
> RAM znovu uvolni).
Ne. Co se do nej vlozi, to v nem zustane tak dlouho, dokud to neni
potreba zpet v hlavni pameti. Ale pravdu mas v tom, ze se to do pameti
ze swapu nepresouva jen proto, ze se pamet uvolnila - nemelo by to dobry
smysl - takova pamet se pouzije na cache.
> Cim si vsak nejsem jisty, je to, kdyz prijde novy pozadavek na
> swapovani, jestli se prepisuji nejake stranky, nebo se zase pridavaji k
> tem jiz existujicim - tim by teoreticky doslo po case k zaplneni swapu i
> kdyz by nikdy nebyl pozadavek na tolik pameti najednou... takze tak to
> asi fungovat nebude.
Skutecne ne. Kdyz je treba stranka fyzicke pameti, a minule pospanym
mechanismem se uz zadnou nalezt nepodari, no tak se proste nejaka
stranak z fyzicke pameti odstehuje do swapu, cimz se fyzicka pamet
uvolni a muze se zadateli poskytnout. To, jaka stranka bude do swapu
odsunuta je velmi slozita logika, ale to asi neni az tak podstatne.
Tim se skutecne velikost obsazeneho mista ve swapu zvetsi.
Nasledne to funguje tak, ze kdyz je treba pouzit takovou pamet, ktera
neni ve fyzicke pameti pritomna protoze je ve swapu, tak se ze swapu
vytahne a umisto do pameti - a to bud' na volne misto, je-li takove - a
neni-li takove, tak se nejprve nejaka jina stranka presune do swapu a
tim se misto ve fyzicke pameti uvolni.
A tim je take zrejmy mechanismus, jak s emuze obsazene misto ve swapu
zmensit - nejaky program pamet vratil a uz ji nepotrebuje. Tim ve
fyzicke pameti vzniklo volne misto, ktere skonci ve free strankach.
Pokdu se v teto chvili stane, ze je to pameti treba dostat stranku,
ktera je ve swapu - tak se tam proste da - do tohoto volneho mista.
Misto ni nebylo treba zadnou jinou stranku do swapu presunout - tim se
velikost zabraneho mista ve swapu zmensila.
Ale nastalo to jen proto, ze tu stranku ze swapu nekdo potreboval -
pokud proste nenastane situace, ve ktere je potreba, pak zustava ve
swapu nastalo ...
Jeste snad pro ujasneni, kdyby nekdo chtel pokusovat s alokaci a
uvolnovanim pameti - malloc/free (+madvise(,,MADV_FREE)) je high-level
memory management. Ten je samozrejme postaven nad memory managementem
OS, ale jeho logika je trochu komplikovanejsi. Zdaleka ne kazde free()
tak znamena, ze je nejaka pamet byla systemu skutecne vracena. Takze,
kdybyste si chteli hrat s necim takovym, tak vhodne funkce jsou brk()
pripadne sbrk() - ale zase pozor na to, ze ty dva systemy nelze
beztrestne mixivat - budete-li si hrat s timhle, pak zas nelze "jen tak"
pouzivat malloc().
Dan
--
Dan Lukes SISAL MFF UK
AKA: dan at obluda.cz, dan at freebsd.cz,dan at kolej.mff.cuni.cz
More information about the Users-l
mailing list