关于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的那些事儿的主要内容,如果未能解决你的问题,请参考以下文章
Django中Form组件拾遗(比较坑爹的地方+易忽略的点)