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 <[email protected]>: > 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 _______________________________________________ http://ocw.cs.pub.ro/courses/so/info/lista-discutii
