DMA:Direct Memory Access。
目的:不使用操作系统缓冲,使得磁盘IO(或者DMA)直接将数据存入用户空间的buffer。避免内核缓冲的内存消耗与CPU拷贝(数据从内核空间到用户空间的拷贝)的消耗。
技术解释:
DirectIO使用场景:DirectIO要读取大文件,因为每次都要初始化DMA;如果是读取小文件,初始化DMA花费的时间比系统读小文件的时间还长,所以小文件使用directIO没有优势。对于大文件也只是在只读一次,并且后续没有其他应用再次读取此文件的时候,才能有优势,如果后续还有其他应用需要使用,这个时候DirectIO也没有优势。
direct实际上有几方面的优势,不使用系统缓存一方面,另一方面是使用dma直接由dma控制从内存输入到用户空间的buffer中不经过cpu做mov操作,不消耗cpu。
参看网页:
http://topic.youkuaiyun.com/u/20080806/10/cdb1faa1-0146-4e96-8b12-26ba60acdbb5.html
http://blog.youkuaiyun.com/nmzrl/article/details/1554772
代码例子:
DirectIO方式读写文件,只需在打开文件时选上O_DIRECT选项就行,但必须在所有的include前加上#define _GNU_SOURCE,另外以DirectIO方式读写时,开辟的Buffer必须是系统每页大小的整数倍而且必须移页大小为标准对齐,例如linux2.6下每页是4096byt(函数getpagesize()),申请的buffer大小只能是4096的整数倍
例子:
(test.c)
#de
目的:不使用操作系统缓冲,使得磁盘IO(或者DMA)直接将数据存入用户空间的buffer。避免内核缓冲的内存消耗与CPU拷贝(数据从内核空间到用户空间的拷贝)的消耗。
技术解释:
DirectIO使用场景:DirectIO要读取大文件,因为每次都要初始化DMA;如果是读取小文件,初始化DMA花费的时间比系统读小文件的时间还长,所以小文件使用directIO没有优势。对于大文件也只是在只读一次,并且后续没有其他应用再次读取此文件的时候,才能有优势,如果后续还有其他应用需要使用,这个时候DirectIO也没有优势。
direct实际上有几方面的优势,不使用系统缓存一方面,另一方面是使用dma直接由dma控制从内存输入到用户空间的buffer中不经过cpu做mov操作,不消耗cpu。
参看网页:
http://topic.youkuaiyun.com/u/20080806/10/cdb1faa1-0146-4e96-8b12-26ba60acdbb5.html
http://blog.youkuaiyun.com/nmzrl/article/details/1554772
代码例子:
DirectIO方式读写文件,只需在打开文件时选上O_DIRECT选项就行,但必须在所有的include前加上#define _GNU_SOURCE,另外以DirectIO方式读写时,开辟的Buffer必须是系统每页大小的整数倍而且必须移页大小为标准对齐,例如linux2.6下每页是4096byt(函数getpagesize()),申请的buffer大小只能是4096的整数倍
例子:
(test.c)
#de

本文深入探讨了DirectIO方式读写文件的技术原理,总结了网络上的相关讲解,并结合作者的个人理解,提供了独特的见解。文章旨在帮助读者理解DirectIO在提高文件I/O效率方面的作用及其使用场景。
最低0.47元/天 解锁文章
871

被折叠的 条评论
为什么被折叠?



