On Fri, Jan 04, 2008 at 08:29:36PM +0100, Dan Lukes wrote: > Roman Divacky napsal/wrote, On 01/04/08 18:06: > >> ze stale plati, ze pamet sezere kernelova alokace = kmeminit(). > > > co presne v tom kmeminit() "zere" pamet? ja tam vidim akorat ze to vytvori > > mapu pro kernel a pak vytvori nejake uma zony. to by nemelo zabrat prilis > > pameti.. > > kmeminit() vola kratce po svem zacatku > kmem_map = kmem_suballoc(...) > > V mem pripade se jedna o pamet velikost 320MB > Nevim, kudy se presne ubiraji cesty kodu, ale mam tisky uvnitr > vm_pageq_remove_nowakeup > > Mirne odbocim - fyzicke stranky jsou organizovany v cele rade front. > Treba PQ_FREE nebo PQ_CACHE. V dobe, kdy pamet shani ACPI jsou uz uplne > vsechny zajimave stranky umistene v PQ_NONE coz je takova zvlastni > specialni "fronta", protoze to znamena "v zadne fronte" > > A tak tedy zpatky - mam tisky uvnitr vm_pageq_remove_nowakeup(), coz je > jedna ze dvou rutin, ktera vyjima stranky z jinych front a umistuje je > "nikam". > > No a behem shora zminene subalokace se mi do PQ_NONE prestehuje > kompletni fyzicka pamet toho rozsahu, ktery pak zajima ACPI. > > Kudy se presne berou cesty programu mezi kmem_suballoc a > vm_pageq_remove_nowakeup vysledovano nemam. Uvnitr > vm_pageq_remove_nowakeup se neda zavolat ani panic(). Tedy - da - ale > core-dump nevznikne, takze se na backtrace podivat neda. O moznosti > aktivovat DDB ani nemluvim. asi si nerozumime...
to kmem_suballoc pouze vytvori mapu. nevim, jestli mas o tomhle nejake znalosti ale ja se chci taky semtam pochlubit ze neco vim a tak to vysvetlim :) kazdy proces (a kernel v tomto ohledu je v podstate uplne normalni proces) ma vm_space, tj. "pamet", pro nas je dulezite ze ta pamet je organizovana v "mape" ktera ma ruzne "entries". rekneme napriklad ze proces ma 1. entry - kod, od adresy 1 do 10, 2. entry data od adresy 30 do 50 a 3. entry treba mmapovany soubor od adresy 62 do 83. zaznamy o techle entries jsou organizovany v te mape. kazda entry ma ruzna nastaveni (prava pristupu atp.) a ta mapa je proste zpusob jak mit uchovane informace o tech entries. no.. a to kmem_suballoc proste vytvori tu mapu pro kernel (ktera je specialni, pac kernel neni zase az tak uplne normalni proces). neni to o tom ze by se alokovala nejaka pamet nebo tak (resp. nejaka pamet se samozrejme alokuje pac ta mapa nema byt kde jinde nez v pameti). nevim co dela vm_pageq_remove_nowakeup (v 8ce uz ta funkce neni) ale rekl bych ze to akorat alokuje par bajtu pro tu mapu. urcite ne 320M > >> Po delsi dobe ladeni se ukazalo, ze s prioritama spousteni je to trochu > >> slozitejsi. > ... > >> To znamena, ze si s prioritou acpi_alloc_wakeup_handler() muzu hejbat > >> jak chci - stejne se mi brzo nespusti (alespon dokud bude ACPI > >> loadovatelny modul - a to bude, protoze zakompilovat ho nelze). > > > > ta analyza vypada dobre > > To by po peti dnech mela. Klidne to ale muzeme odlozit jako problem, > ktery je prilis velky na to, aby byl soucasti jineho problemu. > preload_linker pouziva malloc() takze pred kmeminit() bezet nemuze. > Takze i kdybych se ho pokusil v prioritach posunout vys, nedostane se > tak vysoko jak je potreba. Tam nejvys co ho dokazu posunout uz je pozde. > > To by se linker, nebo alespon tahle jeho cast, musela prepsat a to neni > uplne trivialni vec. no ja jsem to taky nemyslel tak ze bys to mel vyresit :) spis to prepsat do anglictiny a poslat nekam at to nezapadne > >> je tu nekdo, kdo ma nastudovano jak v jadre FreeBSD funguje memory > >> management na urovni rozhrani fyzicke a > >> virtualni pameti ? > > >> ma nekdo nastudovan dobre dynamicky jadrovy linker > > > jsem si pomerne jisty ze nikdo kdo cte tuhle konferenci tyhle znalosti nema > > :) > > To od tebe nebylo hezke. Bud' vuci zdejsim pritomnym, nebo vuci > konferenci jako takove ... ;-| to si nemyslim. tohle neni konference "kernel hackers" ale ceska fbsd konference. nemyslim si ze jsou tady odbornici na kernel, stejne jako tady nejsou odbornici na dojeni horskych koz (doufam ;) ) > Ja jsem ale nemyslel, ze to tu vyresim, ja jen sonduju, jestli je tu > nekdo, s kym by se o necem takovem dalo promluvit. fakt mi neni jasne proc to sondujes zrovna tady :) > > mne jen napada zkusit posunout zacatek te kernel mapy, treba nad 1MB nebo > > tak. > > to definuje VM_MIN_KERNEL_ADDRESS > > Pokud jde o neciste triky, tak s tim zadny problem neni - to ja si > proste tu pamet staticky vyhradim hned po jeji inicializaci a v acpi > kodu uz ji alokovat nebudu - pouziju tu predalokovanou. ja osobne bych "to spravne reseni" nechal najit nekym kdo o ACPI/FBSD vi prvni posledni - nate lawson. hodne stesti -- FreeBSD mailing list ([email protected]) http://www.freebsd.cz/listserv/listinfo/users-l
