ACPI, memory management a inicializace OS (chobotnicovity problem)

Dan Lukes dan at obluda.cz
Fri Jan 4 20:29:36 CET 2008


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.

>> 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.


>> 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 ... ;-|

	Ja jsem ale nemyslel, ze to tu vyresim, ja jen sonduju, jestli je tu 
nekdo, s kym by se o necem takovem dalo promluvit.

> 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.

	To problem neni. Ale z toho nebude mit nic nikdo jiny. Kdezto rozumne 
reseni by se dalo submitnout treba by se, tak za dva tri roky, objevilo 
i v "oficialnim" kodu.

						Dan




More information about the Users-l mailing list