mmap做映像和直接进行IO的效率比较

来源:互联网 发布:零售行业数据分析 书 编辑:程序博客网 时间:2024/04/27 13:22
不能简单说哪个效率高,无论哪种方法,无非都是OS帮你在内存cache了,然后再某时刻fl
ush到内存。mmap能非常方便的简化对文件的操作,而且效率可能会比直接读写文件高。

引了几段话:
“这个问题较复杂,不能简单地说用mmap比block buffer快。
它们之间的主要区别在于使用mmap时是系统来管理buffer。
若是用户管理buffer,当你使用的buffer太大,使得系统内存紧张而造成淘汰,则将造成整
机性能的极大下降;而若使用的buffer太小,又体现不出用buffer的好处。因此,系统比
用户更能找到使用buffer合适的量。

使用mmap的另一个好处是可以避免不必要的拷贝,方便编程。考虑这样的例子:将一个正
文文件的所有内容反排(即abcd变成dcba),用缓冲及mmap的方法分别实现对比看看。可
以参考<windows核心编程>,讲得很清楚。 ”

“这种方式未见得比绕过缓冲直接DMA的方式快,当对大文件读写且是连续大块读写时,应
该是直接IO更快。 ”

“并且使用mmap会使解决问题的思路发生比较大的变化,整个系统可能会简单清晰一些。D
MA是快,但不可移植,因此mmap比read/write快是一种通常的说法。 ”

“mmap与read/write两条路线对文件的访问比较
无论是通过mmap方式或read/write方式访问文件在内核中都必须经过两个缓存:一个是用a
ddress_space来组织的以页为基础的缓存;一个是以buffer来组织的缓存,但实际上这两
个缓存只是同一个缓冲池里内容的不同组织方式。当需要从文件读写内容时,都经过 add
ress_space_operation中提供的函数也就是说路径是一致的。
如果是用read/write方式,用户须向内核指定要读多少,内核再把得到的内容从内核缓冲
池拷向用户空间;写也须要有一个大致如此的过程。mmap的优势在于通过把文件的某一块
内容映射到用户空间上,用户可以直接向内核缓冲池读写这一块内容,这样一来就少了内
核与用户空间的来回拷贝所以通常更快。但 mmap方式只适用于更新、读写一块固定大小的
文件区域而不能做像诸如不断的写内容进入文件导到文件增长这类的事。
原创粉丝点击