首先,使用
libaioPOSIX代替POSIX 做好工作
aio。
O_DIRECT的使用是否受到限制?
我不是100%确定这是真正的问题,但是 O_DIRECT
有一些要求(主要引用TLPI):
- 传输的数据缓冲区必须在内存边界上对齐,该内存边界是块大小的倍数(使用
posix_memalign
) - 开始数据传输的文件或设备偏移量必须是块大小的倍数
- 要传输的数据长度必须是块大小的倍数
乍一看,我可以看到您没有采取进一步的措施来对齐中的内存
allocate_2D_matrix。
如果我不使用O_DIRECT打开文件,则一切正常,但它超出了进行异步写入的目的。
碰巧并非如此。在没有异步I / O的情况下,它可以很好地工作
O_DIRECT(例如,考虑大幅减少的系统调用数量)。



