我目前正准备为我在嵌入式环境中使用快速设备(125 MB / s)进行通信而编写的内核模块编写aio支持。首先,我想看一些关于如何处理这个问题的例子,所以我在3.13内核中运行了grep -ri aio_write .
。
然而,经过进一步检查,我注意到大多数,如果不是所有 fs驱动程序实际同步执行aio_write
和aio_read
。它们最多使用向量输入来节省缓冲区分配。
我能找到的唯一一个实际支持异步aio的驱动程序是小工具USB驱动程序,drivers/usb/gadget/inode.c
libaio
,librt
足够吗?我已经注意到固定多个用户页面并将它们DMA到我的外围设备实际上慢而不仅仅copy_from_user
它们到PAGE_SIZE
kmalloc
'缓冲并循环几次。
我担心我可能会花费大量时间和精力进行aio,因为它实际上比我简单的read
/ write
复制用户缓冲区和DMA的方法更慢同步并阻塞,直到DMA完成。
我很感激一些有经验的用户对此的见解,以帮助我评估aio。