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
