[so2] [Tema 3] setare logical block size
Georgiana Diana
geodiana93 at gmail.com
Fri Apr 22 15:28:01 EEST 2016
2016-04-22 11:56 GMT+03:00 Razvan Deaconescu via so2 <so2 at cursuri.cs.pub.ro>
:
> Georgiana Diana <geodiana93 at gmail.com> writes:
> > 2016-04-17 19:32 GMT+03:00 Oana Stroie via so2 <so2 at cursuri.cs.pub.ro>:
> >> On 17 Apr 2016 19:30, "Razvan Deaconescu via so2" <
> so2 at cursuri.cs.pub.ro> wrote:
> >>> Oana Stroie via so2 <so2 at cursuri.cs.pub.ro> writes:
> >>> > Buna ziua,
> >>> >
> >>> > Am dificultati la setarea dimensiunii sectorului
> >>> > dispozitivului. Desi setez conform laboratorului, exemplu:
> >>> >
> >>> > blk_queue_make_request(dev->queue, process_bio);
> >>> > blk_queue_logical_block_size(dev->queue, KERNEL_SECTOR_SIZE);
> >>> >
> >>> > Atunci cand primesc o cerere, la parcurgerea unui bio pe sergemente
> si
> >>> > afisari ale campurilor observ ca dimensiunea sectorului este
> considerata
> >>> > 4096.
> >>> >
> >>> > Spre exemplu la testul 10 (unde este scris un sector) bvec->bv_len
> are
> >>> > valoarea 4096 (si bio_cur_bytes(bio)).
> >>> >
> >>> > Ce gresesc? Nu gasesc informatii ajutatoare pe internet,
> >>>
> >>> Hello, Oana.
> >>>
> >>> Scuze de răspunsul tardiv.
> >>>
> >>> Nu înțeleg problema. Așa se întâmplă; block IO layer-ul citește
> >>> informații la nivel de bloc/pagină. Dacă îi spui să scrie/citească un
> >>> sector va citi 8 sectoare (8 * 512 octeți = 4096 = o pagină/un bloc).
> Nu
> >>> este nici un fel de problemă.
> >>
> >> Buna,
> >>
> >> Am inteles si rezolvat intre timp.
> >> Mersi de raspuns:)
> >
> > Din cate inteleg din ce scrie mai sus, un bio va scrie/citi mereu 8
> > sectoare pe discul fizic.
>
> Nu mereu. _De obicei_ (adică _nu_ obligatoriu mereu, dar foarte probabil)
> cererile venite din _user space_ (_nu_ kernel space) vor fi translatate
> în bio-uri care ocupă un bloc, adică 8 sectoare.
>
> În kernel space, la fel, în general bio-urile le vei crea cu multiplu de
> pagini (folosind, de exemplu bio_alloc) rezultând în 8 sectoare.
>
> > In 8 sectoare, se pot retine maxim/eficient 1000 de CRC-uri aferente a
> > 1000 de sectoare de date. Deci fiecare request bio de scriere va
> > suprascrie mereu CRC-urile a 1000 de sectoare de date ?
>
> Practic da, operațiile de scriere vor suprascrie atât de multe
> CRC-uri. Dacă vrei să modici _un_ CRC vei face un bio de citire a unei
> întregi pagini, adică 8 sectoare, adică în jur de 1000 de bio-uri. Vei
> modifica doar CRC-uril necesare și vei resubmite bio-ul ca un bio de
> scriere.
>
> > Pe de alta parte, daca cel putin 8 sectoare de date sunt mereu
> > citite/scrise, ar avea sens sa retin doar 8 CRC-uri per sector din
> > zona CRC. Dar pentru un bio care opereaza in zona CRC, asta ar insemna
> > ca mereu va scrie si in alte 7 sectoare adiacente ? Adica ar afecta
> > alte 56 de CRC-uri ?
>
> Da, vei afecta mai multe CRC-uri. Citești zona cu CRC-ul/CRC-urile pe
> care vrei să le modifici, suprascrii în memorie CRC-ul/CRC-urile
> necesare și faci un bio de write. Într-adevăr, bio-ul de write va ajunge
> să suprascrie foarte multe CRC-uri pe disc, dar multe vor fi suprascrise
> cu aceeași valoare, că nu ai cum altfel: le citești și le scrii tot pe
> acelea la loc ca să modifici doar o mică parte din CRC-uri.
>
> > Setarea campului bio_vec->bv_len la KERNEL_SECTOR_SIZE are vreun efect
> > ?
>
> Nu lucra cu bio_vec-uri, lucrează doar cu bio.
>
Okay, am inteles, multumesc mult :)
>
> Răzvan
> _______________________________________________
> http://ocw.cs.pub.ro/courses/so2/resurse/lista-discutii
--
*Georgiana Diana Ciocirdel*
Polytechnic University of Bucharest,
Computer Science
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so2/attachments/20160422/8d4d3e4b/attachment.html>
More information about the so2
mailing list