关于O_DIRECT的那些事儿

很久之前落下的坑,一直没怎么记录-。-

一般地,如果在Linux内核中读写一个文件,其IO流程都需要经过Kernel内的page cache层次,如果程序员若想要使用自己开发的缓存系统,那么就可以在打开这个文件的时候,对该文件加以O_DIRECT的标志位,这样一来就可以让程序对该文件的IO直接在磁盘上进行,从而避开了Kernel的page cache,进而对IO流程里的块数据进行拦截,让其流入到自己开发的缓存系统内。

比较坑爹的地方:

将IO数据写到自己的cache的时候,cache所分配的内存的大小和首地址必须是块对齐的,毕竟是直接和磁盘打交道,数据都是一块一块的,地址映射什么的都没了。如果用普通的malloc的方法去分配就无法做到了,否则会出现数据无法正确写入到磁盘的囧状,

可以用valloc 或者memalign来分配空间对其的内存,其中valloc分配的是页对齐的内存。

引用:

http://man7.org/linux/man-pages/man2/open.2.html

原文地址:https://www.cnblogs.com/jusonalien/p/5228564.html