Ahogy a Mozilla fejlesztők egyre jobban ráfekszenek a mobil eszközökre való fejlesztésre, úgy kap egyre nagyobb hangsúlyt a memóriakérdés és a gazdaságos memóriafelhasználás. Blizzard szerint Vladimir Vukićević (vlad) és Stuart Parmenter (a RAMBack add-on szerzője) nekiálltak kivizsgálni az (memória)allocator viselkedését néhány egyszerű teszt alatt.
Az első teszteredmények azt mutatták, hogy a Mozilla önmagában nem szivárogtat el olyan sok memóriát mint amit neki tulajdonítanak, sokkal inkább keményen gyötri az allocator-t, memóriatöredezettség lép fel és ez az, ami a memóriaszivárgási érzetet kelt. A fejlesztők úgy tűnik, hogy rászívódtak a problémára. DTrace-szel és elszántsággal felfegyverkezve próbálják kiküszöbölni a káros memóriafragmentációt.
A Stuart Parmenter további infókat ígér hamarosan.
A dologról részletesen, pontosan, képekkel illusztrálva itt lehet olvasni.
- A hozzászóláshoz be kell jelentkezni
- 4320 megtekintés
Hozzászólások
Helyes... :)
- A hozzászóláshoz be kell jelentkezni
Én is örülök. :)
Egyébként bocs a láma kérdésért, lehet, hogy csak vaksi vagyok, de múltkor egy órát keresgéltem hiába... szal nem tudja valaki, hogy hol lehet belenézni a Firefox fejlesztői doksijaiba vagy forrásába? Kerestem volna valamit... Kösz.
- A hozzászóláshoz be kell jelentkezni
Beírod a google-nek, hogy "firefox source code", és ez az első találat:
http://developer.mozilla.org/en/docs/Download_Mozilla_Source_Code
- A hozzászóláshoz be kell jelentkezni
nekem a fő bajom a firefox-szal hogy baromi lassú :(
bár mintha otthon (Slackware 12) egész gyors lenne, de a notin (Ubuntu Gutsy) iszonyatosan tekeri a procit már egy-két prohardver oldallal is, az opera 20-30 füllel is sokkal gyorsabb
- A hozzászóláshoz be kell jelentkezni
Szerintem nem olyan sok az a memória. Most nézem:
firefox 29.7MB
nautilus 14.4MB
gnome-panel 8.1MB
mixer-applet 4.4MB!
Amúgy én nem DTrace-szel meg elszántsággal fegyverkeznék föl, hanem libgc-vel.
--
CCC3
- A hozzászóláshoz be kell jelentkezni
taskmgr.exe 4 400 K
firefox.exe 99 940 K
uTorrent.exe 18 782 K
explorer.exe 22 172 K
Szóval sok.
- A hozzászóláshoz be kell jelentkezni
A cache-ek ürítése előtt, vagy után? Nem mindegy.
--
trey @ gépház
- A hozzászóláshoz be kell jelentkezni
Akárhányszor ránézek, mindig 80 és 110M között van, szóval gyakorlatilag mindegy. Amúgy cache-t ürít magától, vagy ki kell kényszeríteni?
- A hozzászóláshoz be kell jelentkezni
A tesztek alatt minden egyes mérés előtt kényszerítették, hogy ürítse a cache-eket.
--
trey @ gépház
- A hozzászóláshoz be kell jelentkezni
Safari.app (3.0-leopard): 11Mb
---
pontscho / fresh!mindworkz
- A hozzászóláshoz be kell jelentkezni
Xorg 91,6Mb
firefox 90,0Mb
totem 31,5Mb
evolution 30,0Mb
nautilus 24,2Mb
gnome-panel 24,3Mb
Cache ürítés után. Azért kicsit hümmögtem a gnome-panel 24Mb-ján is...
---
;-(
- A hozzászóláshoz be kell jelentkezni
Klasszikus malloc szar, nem gc kell helyette hanem normali malloc.
Valoszinuleg nem felszabaditatlan blokkrol lehet szo azt egy kurva valgrind is megtalalja.
Valami amire meg van "referencia" de nem hasznaljak.
- A hozzászóláshoz be kell jelentkezni
A blogot elolvastad-e már?
- A hozzászóláshoz be kell jelentkezni
nem. De akkor most.
- A hozzászóláshoz be kell jelentkezni
Ha a commenteket is nézed , akkor kijön, hogy fregmentáció nem elég OK, FF tulfoglalásához.
Ha, amit fehérnek látok tényleg fehér (üres, belapozott lap), akkor ez még nem olyan gáz.
- A hozzászóláshoz be kell jelentkezni
#include <malloc.h>
int main()
{
int a;
void *p[65536];
p[0]=malloc(4096);
getchar();
for (a=1;a<65536;a++)
{
p[a]=malloc(4096);
p[a-1]=realloc(p[a-1],1);
}// 4096+a a lefoglalt memoria, topot sasolni, a*4096 megy el valójában.
getchar();
for (a=0;a<65536;a++)
{
free(p[a]);
}
getchar();
return 0;
}
Igy kell fregmentalni. (0.1% alatt van a hasznos memoria)
Elsore jo taktikanak tunhet amit reallocal művel az ember, tul foglalja memet aztan szugsegesre kicsinyiti ,valojaban nem mindig olyan jo dolog az.
Az is jó ötletnek tűnik, hogy a realloc ne mozgasa át a memoriat (copy megsporolása), ha nem szükséges (kisebb területre váltáskor nem teszi).
Aki ezeket nem tudja..
szerk:
az biztos c++-ban máskép kodól, mint c -ben :)
- A hozzászóláshoz be kell jelentkezni
Van C++-ban realloc?
- A hozzászóláshoz be kell jelentkezni
Miért ne lenne ?
Kapd szét vectort abba valószinüleg van.
Sőt némely string implementációban is lehet... stb.
Simán hivhatja bármi..
- A hozzászóláshoz be kell jelentkezni
tanút
(hogy klasszikust idézzek)
- A hozzászóláshoz be kell jelentkezni
__verbose_terminate_handler :) hivja fugvenyt az libstd++ -ben(objdumped). Ha ez a lenyeg.
Sot, ha stdlib.h includolod akkor is tudod hivan :)
Fregmantalni sok fel keppen lehet.
- A hozzászóláshoz be kell jelentkezni
Mi köze a __verbose_terminate_handler-nek a realloc-hoz?
- A hozzászóláshoz be kell jelentkezni
hívja.
De, ha megnyugtat a vektor nem tudja csokenteni a capacitasat.
- A hozzászóláshoz be kell jelentkezni
omg, akkor megpróbálom szájbarágósan:
Van a realloc()-nak olyan C++ megfelelője, mint ahogy a malloc()-nak a new és a free()-nek a delete?
- A hozzászóláshoz be kell jelentkezni
Igen, ugye Javaban ezt ugy csinaljak, hogy a nyelv tipus konstrukcioi lehetoseget biztositanak arra, hogy a komplett memoriat az applikacio alatt defragmentald, igy ott ez a problema nem jon elo... C++-ban ezt nem tudod megcsinalni a direkt pointerek miatt, igy en a legjobb megoldasnak valamifele hierarchikus memoria managert tudnek elkepzelni, pl hogy van egy globalis manager, ami mondjuk fel megakat osztogat, van ezek alatt mondjuk egy tabpage-hez tartozo memoria manager (tabpagenekent), ami a globalistol ker, es a sajat elemeinek osztogat sokkal kisebb felbontasban, es igy tovabb, igeny szerint. Az se art, ha egy lokalis manager inkrementalisan adja ki a foglalasokat, igy lesznek olyan pontok, ahol egyszerre sok memoriat lehet visszaadni.
- A hozzászóláshoz be kell jelentkezni
Linux kernelben egesz jo strategiak vannak.
Leginkabb lassu, az a baj mallocal.
Egy kurva egyszeru strategia free lapok log_2(size) szerint listazva (64 lista) mar oriasit dobhat a sebessegen, es nem a nagy szabad blokkokbol csinal kicsit, ha ep olyan sorendbe van. (nem ez legjobb, de legkevesebb vizet zavar)
Nem ártana még, hogy valahogy freenél megnézze nem e szomszédos egy mások szabad blokkal és akkor egyesülne. Gyakori, hogy az egymás után allokált dolkokat egymás után free-zik tehát legutóbbi három felszabaditást megnézve, is jó eséllyel lesz illeszkedés.
ps:
glibc -ben pöttyet értelmesebb malloc, van mint rémlett, már vagy 2.3 óta :)
- A hozzászóláshoz be kell jelentkezni
A kernelnek meg van az az elonye, hogy komplett lapokat kell osztogatnia, amelyek a processzor memoria virtualizacios kepessegei miatt szinte fuggetlen sorrendben lehetnek. Ha jol emlekszem egy komplett processz virtual address space szinte barmilyen fizikai sorrendu lapokat tartalmazhat, es altalaban tartalmaz is. (Ha nem mondok igazat javitsatok ki.) A process linaris adsress spacet kezelni mer kemenyebb dio.
Szerintem itt nem a sebesseg a problema, hanem a fragmentacio. Azt pedig a memoria manager logikai strukturalasaval, illetve a memoria foglalasok idobeli figyelembevetelel (inkrementalis foglalas) lehetne a legjobban kezelni.
A te algoritmusod mi csinal abban az esetben, ha mondjuk egyenletes elszlasu meretu memoria teruleteket kernek tole 16byte-tol 2048 byteig, es egyenletes elszolassal szabaditjak fel?
- A hozzászóláshoz be kell jelentkezni
Ha előbb lefogalod az összest aztán felszabadítod az összest akkor semmi érdekeset :)
A jelenlegi:
http://gee.cs.oswego.edu/dl/html/malloc.html
http://www.malloc.de/en/
(Most el, bye)
- A hozzászóláshoz be kell jelentkezni
Flame on
Nem ide tartozik, de a Vissza gombbal visszajutok oda ahol voltam, pl.: az oldal közepére, vagy még mindig az oldal elejére dob. Kurva idegesítő állandóan visszagörgetni oda, ahol voltam. Ezért nem használom, meg a memóriaszarságai miatt, és tetű lassú is.
Opera fényévekkel jobb.
Flame off
- A hozzászóláshoz be kell jelentkezni
"Nem ide tartozik, de a Vissza gombbal visszajutok oda ahol voltam"
Ha ezt a hup-ra alapozod, akkor ajánlom, hogy próbáld meg újra. Ugyanis trey kiszedte a kódból a cache-re vonatkozó beállítást, ami bezavart ff-nak.
- A hozzászóláshoz be kell jelentkezni
Nem a Hup-ra, hanem bármelyik másik oldalra.
- A hozzászóláshoz be kell jelentkezni
Nekem működik. HUP-on is. És örülök neki.
- A hozzászóláshoz be kell jelentkezni
Ugyanoda visz, ahol voltál. Ha becsukott tabot nyitsz meg újra, akkor is. (Firefox v2.0.9)
- A hozzászóláshoz be kell jelentkezni
Nemtom hogy a memoriahasznalattol-e, de inkabb nem, de idonkent a FF rohadtul be tud lassulni a nagyobb oldalaktol.
Egyszeruen reprodukalhato, tesztelheto itt:
http://hup.hu/node/46959
A lap aljan (de fent is) rohadt lassu a scrollozas (mind1 hogy egergombbal vagy billentyuzettel). Btw, most nezem, hogy az oldalso gorgetosavval viszont egesz gyors. Hmm.
Ja meg Safari-val ugyanez az oldal tok gyors mindegy mivel gorgetem.
OSX 10.5 amugy. (btw FF meg lassabbnak tunik meg 10.4-en volt)
A'rpi
- A hozzászóláshoz be kell jelentkezni
Seamonkey, Frugalware: a görgetés végig ugyan olyan gyors (megszokott sebességű) marad, nem lassul be.
- A hozzászóláshoz be kell jelentkezni
+1, FF, Gentoo - tesztelve
--
http://kac.duf.hu/~balage/blog
- A hozzászóláshoz be kell jelentkezni
Fedora 7, KDE, nálam is ugyanolyan gyors egérrel, az oldals görgetősávval kicsit lassabb, de szerintem normális.
Csaba
- A hozzászóláshoz be kell jelentkezni
hmm, akkor csak az OSX szar :) vagy az FF OSX-es portja...
erdekes hogy pl. ezen az oldaon gyors az is, de a linkelt sok kommentes oldalon viszont rohadt lassu (kb 1fps-el mozog)
A'rpi
- A hozzászóláshoz be kell jelentkezni
na, solved. a smooth scrolling opciot kellett _ki_kapcsolni a FF-ban. mindenesetre erdekes elkepzelesuk van a smooth-rol :)
A'rpi
- A hozzászóláshoz be kell jelentkezni
Jah, nálam az mindig off, mert nem tetszik. :)
Bekapcsolt finomgörgetéssel sem vészes.
- A hozzászóláshoz be kell jelentkezni
A beépített smooth scrolling fos, egy fokkal jobb a smooth wheel bővítmény. Bár igazán hosszú oldalaknál amíg a teljes oldalt be nem tölti, ez is akadozva teker.
- A hozzászóláshoz be kell jelentkezni
Nemtudom, hogy MacOS alatt a Bon Echo milyen FF félét takar, de állítólag az jobb, gyorsabb.
--
http://kac.duf.hu/~balage/blog
- A hozzászóláshoz be kell jelentkezni
A Bon Echo a 2.0 fejlesztői verzióinak a kódneve volt.
It doesn't matter if you like my song as long as you can hear me sing
- A hozzászóláshoz be kell jelentkezni
Talán a Caminora gondolhat.
- A hozzászóláshoz be kell jelentkezni
Az meg nem Firefox, de +1 :-)
It doesn't matter if you like my song as long as you can hear me sing
- A hozzászóláshoz be kell jelentkezni
Nem én használom, csak hallottam és közben szereztem linket is.
--
http://kac.duf.hu/~balage/blog
- A hozzászóláshoz be kell jelentkezni
Basszuskulcs.
malloc() mmap()/munmap() al jatsza memoria foglalast.
g++ (vector::)new() meg brk()?
Nem lehetseges, hogy ebbol kifolyolag memoria tunik el ? unmappolt lap -t egy brk() ujra berant ahol azt hiszi, hogy data resz vegere foglalt csak?
szerk:
Nem mindig brk()-t hasznal, majd megnezem mikor, de nekem ez vesszelyes uzemnek tunik.
- A hozzászóláshoz be kell jelentkezni