关于O_DIRECT的那些事儿

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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

 

以上是关于关于O_DIRECT的那些事儿的主要内容,如果未能解决你的问题,请参考以下文章

关于那些常见的坑爹的小bug(会持续更新)

Django中Form组件拾遗(比较坑爹的地方+易忽略的点)

那些坑爹的python面试题

游戏人生,我的lua之旅:那些坑爹的CCBReaderLoad

坑爹的微信授权配置

TK1023: 坑爹的黑店