ACPI, memory management a inicializace OS (chobotnicovity problem)

Roman Divacky rdivacky at freebsd.org
Sat Jan 5 11:41:13 CET 2008


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



More information about the Users-l mailing list