[so] [Lab 11] Nelamurire io_submit blocant
Laura Vasilescu
laura.vasilescu at cs.pub.ro
Sun May 15 22:36:12 EEST 2016
Bună Călin,
Nu știu cum e exact implementat AIO-ul în kernel (I'll have a look
tomorrow morning), dar e posibil ca operațiile să ți se termine pentru
că ai deja fișierele în RAM. Flag-ul O_DIRECT dat la open obligă
citirile și scrierile să se facă direct din device și să facă bypass
la partea de caching a datelor.
Încearcă să rulezi următoarea comandă înainte de a rula experimentul:
echo 3 > /proc/sys/vm/drop_caches
(comanda îți golește cache-ul curent; din păcate nu se poate dezactiva
operația de caching, este un lucru pe care îl face sistemul de operare
no matter what)
Ideea e că sistemul de operare îți bufferează fișierele în RAM (poți
să rulezi comanda free și o să vezi ce porțiune din RAM-ul tău este
ocupată cu astfel de fișiere; field-ul 'cached').
Laura
2016-05-15 21:46 GMT+03:00 Călin Cruceru <so at cursuri.cs.pub.ro>:
> Salut,
>
> Am observat, lucrând pe mașina locală, că la exercițiul 5 din
> laboratorul 11[1], chiar și după ce am mărit considerabil lungimea
> bufferului, tot I/O-ul, care se presupune că este asincron, se termina
> după io_submit; citirea pe eventfd de mai apoi era neblocantă.
>
> Am investigat puțin și am dat de următorul thread[2]. Aplicând pașii
> pe care îi descrie și OP-ul într-un răspuns ulterior[3]:
>
> 1. pass in O_DIRECT to the open() call
> 2. align all reads to 16kiB boundaries -- aparent, mai recent merge și
> la 512 bytes[4]; am folosit __attribute__((aligned(512)))
> 3. allocate my buffer with valloc() to be page aligned -- de aceasta
> nu a mai fost nevoie, l-am declarat static, aliniat la 512 și toate
> scrierile (în cazul nostru) sunt de la început oricum
>
> și sugestia celui care îi răspunde (Jeff), legată de ftruncate[4], am
> reușit să obțin un comportament *puțin* schimbat: _aproape_ toate
> (deci nu _toate_!) AIO-urile s-au terminat după io_submit (mai exact
> 17/20 -- am mărit eu nr de fișiere, în schelet sunt 4); deci există
> speranțe că în alte circumsanțe (mai multe events, fișiere mai mari,
> etc) să se vadă mai bine faptul că este vorba de I/O asincron.
>
> Acum, nelămurirea mea este: poate sau nu să meargă AIO-ul pe Linux
> fără O_DIRECT (și condițiile pe care acesta le aduce) + prealocarea
> fișierului dacă e vorba de scrieri, în momentul de față? Jeff pare să
> spună că nu[6]. Dacă este așa, cred că ar trebui adaugat un
> comentariu în laborator despre asta.
>
> [1]: http://ocw.cs.pub.ro/courses/so/laboratoare/laborator-11#linux_aio
> [2]: http://comments.gmane.org/gmane.linux.kernel.aio.general/3024
> [3]: http://permalink.gmane.org/gmane.linux.kernel.aio.general/3026
> [4]: https://lwn.net/Articles/12032/
> [5]: http://permalink.gmane.org/gmane.linux.kernel.aio.general/3027
> [6]: http://permalink.gmane.org/gmane.linux.kernel.aio.general/3025
>
> Mersi,
> Călin
> _______________________________________________
> http://ocw.cs.pub.ro/courses/so/info/lista-discutii
More information about the so
mailing list