免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: jeffwang8001
打印 上一主题 下一主题

关于mmap效率的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-09-04 17:12 |只看该作者
我认为做cp这样的操作,用mmap, 再memcpy 不可能比read, write快。
mmap本身是很费劲的操作,而且你程序中的数据移动次数又不少于cp(假定是用read write)

论坛徽章:
0
12 [报告]
发表于 2006-09-04 17:21 |只看该作者
书上很多时候是想当然的和是误导人的

论坛徽章:
0
13 [报告]
发表于 2006-09-04 17:24 |只看该作者
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>

#define BUFFSIZE 8192

int main(int argc, char* argv[])
{
    int n;
    int fdin, fdout;
    char buf[BUFFSIZE];

       
    if( (fdin = open(argv[1], O_RDONLY)) < 0 ) {
           printf("cannot open %s for read\n", argv[1]);
           exit(-1);
        }

    if( (fdout = open(argv[2], O_RDWR|O_CREAT|O_TRUNC, S_IRUSR|
                                    S_IWUSR|S_IRGRP|S_IROTH)) < 0 ) {
        printf("cannot open %s for write\n", argv[2]);
         exit(-1);
      }

    while(( n = read(fdin, buf, BUFFSIZE)) > 0 ) {
        if( write(fdout, buf, n) != n ) {
            exit(-1);
        }
    }

    exit(0);
}

说得没错,用这个程序
time ./test libx.a a.a

real    0m2.75s
user    0m0.01s
sys     0m0.44s

结果和cp差不多

论坛徽章:
0
14 [报告]
发表于 2006-09-04 17:28 |只看该作者
用2个MMAP
数据移动次数多,加上mmap本身开销,一定比cp慢。
书上用东北人的俏皮话,就是“上坟不烧纸,唬他爹呢”

论坛徽章:
0
15 [报告]
发表于 2006-09-04 17:28 |只看该作者
呵呵,再请教一下
mmap一般在什么时候用呢?
是对文件频繁操作的时候吗,这时候把文件映射到内存中是不是效率会高一些

论坛徽章:
0
16 [报告]
发表于 2006-09-04 17:29 |只看该作者
对文件非常多次RANDOM读写,用mmap好。

论坛徽章:
0
17 [报告]
发表于 2006-09-04 17:33 |只看该作者
呵呵,懂了
谢谢

论坛徽章:
0
18 [报告]
发表于 2006-09-04 17:34 |只看该作者
可以用gprof分析一下性能
看看耗时操作到底在那里

论坛徽章:
0
19 [报告]
发表于 2006-09-05 23:13 |只看该作者
这个结论早了点. mmap 不一定比直接read/write慢. 但有几个因素要考率. 测试的时候要注意.
(1) 前面有人说了, 系统文件缓存
(2) NFS 或其它文件服务器的负载情况.
(3) mmap 的实现在各平台上的差异. HP-UX 的shared memory比较慢.

下面是我的测试数据. file_size=155MB

HP-UX B.11.23 IA64
           cp        mmap/MAP_SHARED  mmap/MAP_PRIVATE
real     3.44s   2m8.57s                    6.47s
user    0.01s   0.17s                         0.16s
sys      0.51s   2.75s                         1.26s

Linux 2.4.21 AMD64
           cp        mmap/MAP_SHARED  mmap/MAP_PRIVATE
real     7.94    6.80                           same
user    0.00    0.15
sys      0.55    0.49

AIX5.3 PPC
           cp        mmap/MAP_SHARED  mmap/MAP_PRIVATE
real     3.77s   26.65s                       3.48s
user    0.02s   0.28s                         0.22s
sys      1.25s   1.45s                         1.44s

Solaris5.8 sparc
           cp        mmap/MAP_SHARED  mmap/MAP_PRIVATE
real     3.79s   9.62s                         4.97s              
user    0.00s   0.42s                         0.28s
sys      1.44s   0.63s                         1.26s

论坛徽章:
0
20 [报告]
发表于 2006-09-06 01:08 |只看该作者
其实效率的差别可以忽略,但是用mmap能避免跟文件操作打交道,简化算法,这才是关键
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP