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