Divne chovani mallocu

Jan Kasprzak kas na informatics.muni.cz
Úterý Listopad 2 22:47:04 CET 1999


Cejka Rudolf wrote:
: Martin Macok <macok na kocour.ms.mff.cuni.cz> wrote:
: >> Neni to trochu divne chovani? Kdyz nemuzu pamet naalokovat, tak se z
: >> toho vetsinou muzu nejak vzpamatovat, ale kdyz program najednou dostane
: >> signal, ze pamet, do ktere zrovna pristoupil, uz nedostane, tak s tim uz
: >> asi tezko neco nadela??
: 
: > Na druhou stranu to brutalne urychli praci s pameti, take je obvykle, ze
: 
: Proc? Co kdyz je naopak rychlejsi jednorazove namapovat stranky
: pameti, nez pri prvnim pristupu na kazdou stranku extra vyvolavat
: akci pro jeji namapovani?
:
	Neni. Pokud se kvuli alokaci pameti musi jina stranka odstrankovat
na disk, je jedno, jestli se ztrati nejaky minimalni cas vyvolanim page
fault handleru, nebo jestli se proste alokuje pamet predem. Naopak velmi
casto je rychlejsi alokovat pamet az v okamziku potreby. Zejmena pod Linuxem,
kde mame kswapd, ktery zajistuje asynchronni swapovani a uvolnovani pameti
jeste driv, nez pamet dojde. Cili: namapuje se par stranek, ktere jsou
zrovna k dispozici, program pokracuje dal. Jakmile je trochu mene volne
pameti, vzbudi se kswapd, a zacne neketre stranky odsouvat na disk. Hlavni
program stale vesele pokracuje dal a alokuje dalsi pamet. OTOH:
Spustim hlavni program, ktery udela malloc(10M). Tolik pameti nemam, proto
zablokuji hlavni program, odswapuji 10M a pak pokracuji dal. Muzete hadat
trikrat, ktery z techto dvou pristupu je efektivnejsi.

: > programy zadaji o dost vetsi pamet, nez pak vyuziji, dale se takto
: 
: Nevim, proc by se mel operacni system zamerovat na spatne napsane
: programy, ktere si alokuji pamet a pak ji nepouziji (tj. neprovedou ani
: jeji inicializaci). Kdyz uz program neco alokuje, tak to urcite nekdy
: pouzije, i kdyz treba jen k jednomu zapisu cehokoli. Leda ze by chtel
: vyuzivat der podobne jako u souboru - jenze ani v pameti a ani v souboru
: se nejedna o prenositelnou zalezitost a jeji vyuzivani bude zcela
: urcite pusobit nekde problemy (stejne jako problemy s prenosem der
: v souborech).
:
	Program, ktery naalokuje pamet, kterou pak nevyuzije, nemusi byt
jeste spatne napsanym programem. Napriklad programy ve Fortranu obvykle
obsahuji velke staticky definovane matice, ktere se vyuziji jen castecne.
Vtip je prave v tom, ze program inicializuje jen to, co potrebuje. Pristup
k neinicializovane pameti je samozrejme chybou, nicmene za chybu bych
nepovazoval to, ze si program naalokuje vic, nez vyuzije.

: > alokovana pamet jednoduseji (rychleji) mapuje, swapuje .. =>
: 
: Tomu vubec nerozumim. Proc se jednoduseji (rychleji) mapuje?
: A hlavne - z ceho usuzujete, se ze rychleji swapuje? Prave
: pri swapovani se nejvice projevi divokost mapovani pametovych
: stranek + jejich swapovani. A kdyz dojde Linuxu pamet i se swapem, to
: je pak skutecne jedinecny zazitek pro vytrvale.
:
	echo 1 >/proc/sys/vm/overcommit_memory, pokud vam to vadi.
Ostatne neco podobneho maji i jine UNIXy (treba virtual swap na IRIXu).
Kazdemu systemu, pokud dojde pamet, je to zazitek pro vytrvale.
Vtip je v tom, ze ve skutecnosti Linuxu pamet nedojde, jen se dostane do
stavu, kdy pro vetsi mnozstvi pameti je ochoten napriklad zahazovat stranky
z textu programu nebo sdilene mapovane soubory. Takze dojde k rapidnimu
zpomaleni systemu, _aniz by ve skutecnosti dosla pamet_.

: > neni to divne chovani
: 
: Tak tim bych si skutecne nebyl vubec jist.
: 
	Takto opravdu funguje VM u vetsiny UNIXu, ktere znam. Bez tohoto
VM systemu by nemohlo byt rozumne asynchronni swapovani, demand paging
a podobne. OTOH nic vam nebrani napsat si malloc tak, aby na kazde 4KB
pameti, ktere ziska pres sbrk() nebo anonymni mmap(), udelal jeden zapis
do pameti. Pak skutecne bude vedet, ze co dostal, to uz mu nikdo nevezme.

-Yenya

-- 
\ Jan "Yenya" Kasprzak <kas at fi.muni.cz>       http://www.fi.muni.cz/~kas/
\\ PGP: finger kas at aisa.fi.muni.cz   0D99A7FB206605D7 8B35FCDE05B18A5E //
\\\             Czech Linux Homepage:  http://www.linux.cz/              ///
/// I'd much prefer a sane architecture that doesn't continually try to  \\\
//  reinvent the bad idea of memory windows.   -Linus on Xeon 36-bit MM   \\


Další informace o konferenci Linux