[pso] __bio_kmap_atomic

Razvan Deaconescu razvan.deaconescu at cs.pub.ro
Mon May 3 22:16:30 EEST 2010


On Mon, 2010-05-03 at 19:51 +0300, Lucian Cojocar wrote:
> On 05/03/2010 07:46 PM, Razvan Deaconescu wrote:
> >> Aş vrea să mapez permanent pagini fizice (cu kmap) pentru că:
> >> - maparea îmi trebuie pe toată durata de viaţă a modului (motive de
> >> performanţă)
> >> - maparea e relativ mare (2MB) şi e accesată des
> >> - maparea se face din context proces
> >>
> >> Sunt valide motivele date?
> > 
> > Nu imi dau seama de ce ai avea nevoie de mapare pe intreaga durata a
> > modulului cat timp bio-urile sunt schimbate de subsistemul I/O ...
> > well ... ca sosetele. Ce fel de mapare iti ocupa 2MB?
> > 
> Aş fi vrut să menţin sumele de control în memorie; să reduc numărul de
> operaţii I/O (mai ales că se fac în locuri diferite pe disc).

Nu imi este usor sa ma gandesc la consecintele unei astfel de
decizii :-) Ai, intr-adevar, avantajul ca daca sunt multe operatii de
citire, ai deja CRC-urile in memorie.

Pe de alta parte, exista deja buffer cache si tu, prin mentinerea lor in
memorie, duplici rolul acestuia. In plus, alocarea 2 MB de RAM nu e
tocmai un lucru recomandat intr-un modul de kernel. Plus ca nu scaleaza;
la un disc de 100GB nu stiu ce ar mai fi de tinut in memorie.

Nevertheless, o astfel de implementare este valida, dar sa nu te
complici mai mult decat este nevoie. Poate o solutie in acest sens ar fi
utilizarea vmalloc si apoi folosirea paginilor fizice deja alocate
folosind vmalloc (struct page-urile aferente) pentru a crea bio-urile
pentru CRC. Vei putea folosi, probabil, chiar si __bio_kmap_atomic si
__bio_kunmap (vei avea mapate virtual paginile fizice cu
__bio_kmap_atomic si vmalloc).

Razvan



More information about the pso mailing list