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