RamDisk/SMBIOS kerdes

VF vf at elte.hu
Sat Jan 8 18:10:41 CET 2005


Thus spake AwoL <awol at tvn.hu>:

> Hello VF,

Hi!

> a /maxmem helyett a /burnmemory - t javasoljak hasznalni... ez is erdekes...
> Viszont van egy Address Windowing Extensions(AWE) ami a 4G koruli memoriak hasznalatat teszi lehetove
> a leiras szerint... Talan ez mar eleg ta'mpont hogy elindulj... bar erdekesnek talalom hogy
> a /maxmem definialasanal nem nagyon reszletezi hogy a rendszer ezt visszafele hogy kezeli...
> Bar ez is amolyan M$ dolog :))

Ugy nez ki, megoldodott a problema. (Koszonhetoen az Osronline NTDEV
lista lelkes es szakerto tagjainak) Tanulsagul leirom a megoldast:
Az volt a lenyeg, hogy kellett nekem 1 giga, vagy annal nagyobb DMA
buffer. Erre a celra mik vannak windoz alatt?
Az AWE (AllocateUserPhysicalPages stb..) jo lenne, de nem lehet letiltani a
cache-t, sot flusholni sem. A fizikai cim megallapitasa is igen erdekes
lenne. Elmeletileg valamilyen formaban benne van a kitoltott tablazatban,
csak nincs dokumentalva. Ezert nem nyert.
A GetScatterGatherList es hasonlok is kiestek, mert az Mdl struktura csak
64M meretu lehet maximum. Van az AllocateCommonBuffer, azt irjak ezzel
takarekosan kell banni, a bootolas utan lehet hogy mar csak 1 lapos
foglalasok lesznek sikeresek stb...
Vagy MmAllocateContiguousMemorySpecifyCache, ez elvileg csak a nonpaged
poolbol tudna foglalni, ami max 256 mega, de az MSDN-en reszletezett
specialis korulmenyek kozott win2k alatt 460megat, XP alatt tobb mint egy
gigat is le tud foglalni. Ezt en nem tapasztaltam, soha, meg tobb
reszletben sem tudott 1G-t foglalni, 700..900 mega korul megallt.
Aztan kiderult, hogy az AllocateCommonBuffer valojaban ugyanerre a
fuggvenyre epul, es ugyanazok kene hogy legyenek a limitjei. Ugy is van,
ezzel is sikerult tobbszaz megat lefoglalni. De nem eleget :(
Ekkor jottek az otletek, hogy dugjuk el a windoz elol a memoriat, es ha
meg tudjuk azt keresni (ehhez kellenek az SMBIOS tablak es a kerdesben
szereplo fuggveny), akkor utana az MmMapIoSpace csont nelkul be tudja
mappelni, kis reszletekben, hogy ne zavarjuk meg a windoz lelket.
Ugyanis az is kiderult, hogy nem a memoria elfogyas a problema, hanem a
kernel virtualis cimterulet fogy el.
Ez nem lett volna valami elegans megoldas, valamint szornyu bonyolult
lett volna megvalositani. A tuti otlet az MmAllocatePagesForMdl hasznalata.
Ez lefoglalja a lapokat, de egyaltalan nem mappeli be sehova.
A fuggveny villamgyors, 1G lefoglalasa egy masodpercen belul megvan egy
1800MHz procis gepen. Termeszetesen az Mdl tovabbra is max 64 mega lehet,
ezert tobbszor kell meghivni. Viszont 'kezzel' lehet linkelni a lapokat,
nem fuggunk a windoztol, mely csak 1 Mdl-t linkel egyszerre, tehat annak
maximalis merete korlatozza.
Utana az MmMapLockedPagesSpecifyCache segitsegevel kis reszletekbem
bemappelheto, a fizikai cim lekerdezheto az MmGetPhysicalAddress-sel, stb...
Meg en sem hiszem el teljesen hogy jol mukodik, tesztelgetem.
Megdobbento a foglalas sebessege, ugyanis eddig a kb 800 megat kb 10 perc
alatt tudta lefoglalni a windoz! Most egy pillanat, alig lehet eszrevenni.
Szoval annyira nem szar, csak tudni kene programozni :)

>  AwoL                            mailto:awol at tvn.hu

-- 
Valenta Ferenc <vf at elte.hu>   Visit me at http://ludens.elte.h u/~vf/
*** This advertising space is for sale ***




More information about the Elektro mailing list