当使用POSIX异步I/O时,使用O_DIRECT和AIO_RAW有什么不同吗?或者我应该/我可以同时使用两者吗?我们正在开发一台NoSQL数据库服务器,并正在研究如何提高POSIX系统上异步I/O的效率。
开放(2)
O_DIRECT试图将I/O对此文件的缓存影响降到最低。一般来说,这会降低性能,但在特殊情况下很有用,例如应用程序自己进行缓存时。文件I/O直接对用户空间缓冲区进行/来自用户空间缓冲区。
aiocb(5)
在对原始设备分区执行异步I/O时,您可以在结构成员中设置aio_flags AIO_RAW标志位。设置AIO_RAW标志位时,异步I/O可能会更高效。
发布于 2018-02-13 17:48:38
提问者从未具体说明他们所支持的操作系统(一个链接到Linux手册页,另一个链接到上海合作组织),因此很难在没有猜测的情况下回答这个问题。
在编写本报告时,Linux不支持AIO_RAW,因为glibc的struct aiocb没有aio_flags成员(002fO.html ),内核中的AIO (不是POSIX)不支持AIO_RAW值。所以:
使用O_DIRECT和AIO_RAW有什么不同吗?或者我应该/我可以同时使用两者吗?
是的,因为并不是所有支持POSIX的操作系统(例如Linux)都允许您设置AIO_RAW,而且在某些情况下您肯定不能同时使用这两种操作系统。此外,在某些操作系统(如Linux )上,O_DIRECT可以在文件系统和设备上工作,而AIO_RAW只用于“原始设备”。从dt源代码来看,看起来AIO_RAW只支持HP和source,因此它在其他OSes中的应用可能有限。
https://stackoverflow.com/questions/15998294
复制相似问题