关于O_DIRECT的那些事儿
2016-02-29 18:36
288 查看
很久之前落下的坑,一直没怎么记录-。-
一般地,如果在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
一般地,如果在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
相关文章推荐
- Java工程师成神之路~
- Up navigation with fragments using AppCompat
- Java解决高精度计算问题
- 奕新集团RAC 11g 生产库环境搭建(无图)
- php处理json数据(从服务器获取,post提交)
- IE6部分兼容问题
- hexo git配置问题笔记
- ps—人物夸张的漫画
- label添加删除线
- Oracle什么时候需要Commit
- excel表格中的数据变成json格式的方法
- Oracle 11g R2 RAC 卸载 grid
- 编写简单的shell脚本
- java设计模式(五)--建造者模式(Builder)
- AutoCompleteTestView输入单个字符不提示
- iOS-UITableView 右侧箭头+取消分割线+取消选中样式+自定义分割线(原生和自定义cell)
- 【斐波那契应用】HDOJ KK's Steel 5620
- assign copy retain weak strong 区别【读Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法】
- 人人都是产品经理
- excel 导入数值变成科学记数的解决办法.