论坛首页 综合技术论坛

File Mapping析疑

浏览 12617 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-01-19  
Arath 写道
自己做了一个测试
http://www.iteye.com/topic/48412

file mapping不能将读写隔离吧;)




老兄,你的第三种方法只是一次性的把文件从内存读进来,一次性的写进去吧。Write: 4166
Test3:
Access: 922
Write: 4887

access的差不多,write差20%,你觉得还是在同一级别上?(我甚至觉得access用缺页中断应该还慢些,因为一次性读入的话可能效率会更高,分多次缺页中断可能速度会慢些,我怀疑可能是内存COPY的时间把这个时间搞淡了。

BTW:你把FileOperation3,FileOperation1调个次序执行,没准时间会不一样的。
0 请登录后投票
   发表时间:2007-01-19  
而且你看看你前面的发言:为什么filemap推荐使用,因为他的cache好,但你似乎又想证明,不用filemap,你自己写cache也可以。
0 请登录后投票
   发表时间:2007-01-19  
至于读写隔离,我不知道这是啥意思?跟题目又有啥关系。
实际操作中file mapping在数据commit上我个人认为除了我说的节省调用和COPY的时间,其他并没有做太多的优化。至少我印像中没有看过类似的资料来证实这一点。
关于这些,我想那本nt的文件系统的书里面的cache管理器里面可能会提到。
writefile跟fwrite不一样的地方就是fwrite内部有cache,但writefile(或者是linux下的write)也并不是立即写硬盘,这个要看操作系统的实现。
关于这些可以说很多。有空多研讨研讨也不错。
0 请登录后投票
   发表时间:2007-01-19  
差距是一定有的.
对于这个差距,作为未知的一面,我猜测应该是操作系统内部对file mapping的文件读写与普通的文件读写API有差距,这一点可以从windows的GDI API和DirectX的差距可以推想,GDI API和DirectX其底层是一样的.
另一个方面就是有关Cache的算法,测试程序没有任何优化的算法,所以性能上有差距这一点是肯定的.
我不是说不用file mapping,而只是说明大文件操作非file mapping不能胜任的说法至少是不完全的. 同时也是要说明file mapping所带来的性能提升主要还是在cache的机制.
最后有关将两个测试颠倒,这一点测试的误差不大,因为文件操作越大,那么硬件和操作系统的cache机制就会影响越小,实际也是如此.
0 请登录后投票
   发表时间:2007-01-19  
七猫 写道
至于读写隔离,我不知道这是啥意思?跟题目又有啥关系。
实际操作中file mapping在数据commit上我个人认为除了我说的节省调用和COPY的时间,其他并没有做太多的优化。至少我印像中没有看过类似的资料来证实这一点。
关于这些,我想那本nt的文件系统的书里面的cache管理器里面可能会提到。
writefile跟fwrite不一样的地方就是fwrite内部有cache,但writefile(或者是linux下的write)也并不是立即写硬盘,这个要看操作系统的实现。
关于这些可以说很多。有空多研讨研讨也不错。


我指的读写隔离意思是你不能将file mapping只看作文件的映射,而将读写操作隔离开考虑,他们应该是一个整体构成file mapping对文件的操作.
上面我回了一个,其实组要还在于操作系统对不同函数的实现方法和所实现的功能所在的层位,差距是无可避免的.
这里你倒是提醒了我,write file的机制实际上异步的,如果file mapping采用非异步的方式去写,那样的话速度应该会快很多,当然这也是猜测.
也许要拿windows的源码来看看会比较了解
0 请登录后投票
   发表时间:2007-01-19  
非异步方式写?在WIN下可能吗?win内核应该是全异步操作的。(这是跟linux最大的不同吧)

这块比较复杂,在有本讲WIN操作系统的书里有提到,WriteFile和FileMap的写调用的接口应该都是一样的,他们的写都是交给IO管理器去做的。
至于文件系统什么时候去写,这个是比较复杂的算法。
你真的想看原码的话,可以看nt4的ntfs驱动原码和ntos里的mm目录,cache目录,io目录。
0 请登录后投票
   发表时间:2007-01-19  
//file mapping所带来的性能提升主要还是在cache的机制?

你的证明在哪里呢?我印像中filemapping并没有比ReadFile,WriteFile更多的cache.
0 请登录后投票
   发表时间:2007-01-19  
windows系统有一个实现就是将所有的IO操作都统一为stream的形式,所以一套file的函数既可以用来访问文件还可以用来操作控制台、管道、串口等设备,封装的这么统一势必造成性能的下降,其中很多应该都需要增加新的异步操作,如果file mapping只针对文件操作,那么异步操作少了,经过的途径短了,应该会快很多.
我所提的cache不是你所指的读写cache, 实际就相当于将所需要访问的数据多读一些到内存,这样访问不就提高了?
拿MSDN中的一段描述吧:
File mapping allows a process to access files more quickly and easily by using a pointer to a file view. Using a pointer improves efficiency because the file resides on disk, but the file view resides in memory. File mapping allows the process to use both random input and output (I/O) and sequential I/O. It also allows the process to efficiently work with a large data file, such as a database, without having to map the whole file into memory. When the process needs data from a portion of the file other than what is in the current file view, it can unmap the current file view, then create a new file view.

0 请登录后投票
   发表时间:2007-01-19  
跟你沟通真是难啊。
0 请登录后投票
   发表时间:2007-01-19  
喔?哈哈,可能说得不够清楚,多交流就好
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics