免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
21 [报告]
发表于 2006-09-06 08:36 |只看该作者
如果忽略缓存(因为对2中情况都有,可以认为基本相同),LZ的两个mmap拷贝文件,数据要移动3次,
cp两次。所以才有LZ的mmap程序慢许多的情况。

论坛徽章:
0
22 [报告]
发表于 2006-09-06 09:07 |只看该作者
是不是你内存不够?
我认为应该看 user+sys 时间,real 时间受内存限制,受缓存影响,受系统其他任务影响。
cp 使用的 sys 时间是 mmap 的 3 倍(系统调用使用的时间)。
我测试 mmap 不慢, AMD 3000+, 512M, FC5 , 140多M的文件:
[root@vc dio]# ls -l a
-rw-r--r-- 1 root root 147767160 Sep  6 08:53 a

[root@vc dio]# time ./mcp a 1

real    0m1.230s
user    0m0.332s
sys     0m0.340s
[root@vc dio]# time ./mcp a 2

real    0m5.171s
user    0m0.236s
sys     0m0.408s
[root@vc dio]# time ./mcp a 3

real    0m3.230s
user    0m0.320s
sys     0m0.308s
[root@vc dio]# time cp a 4

real    0m2.825s
user    0m0.044s
sys     0m1.008s
[root@vc dio]# time cp a 5

real    0m4.364s
user    0m0.016s
sys     0m1.088s
[root@vc dio]# time cp a 6

real    0m1.563s
user    0m0.016s
sys     0m1.036s

[[i] 本帖最后由 connet 于 2006-9-6 09:09 编辑 [/i]]

论坛徽章:
0
23 [报告]
发表于 2006-09-06 09:15 |只看该作者
原帖由 思一克 于 2006-9-6 08:36 发表
如果忽略缓存(因为对2中情况都有,可以认为基本相同),LZ的两个mmap拷贝文件,数据要移动3次,
cp两次。所以才有LZ的mmap程序慢许多的情况。

这不是一定的。不同的系统肯定有差异。
我特地关闭了我系统(NetBSD AMD-3.0)的SOFTDEP,重新测试了一下:

assiss % /usr/bin/time ./mmap xgl-demo1.xvid.avi a #第一次系统会把文件读入缓存
        1.20 real         0.13 user         0.13 sys
assiss % /usr/bin/time ./mmap xgl-demo1.xvid.avi a #下面的时间明显减少
        0.25 real         0.08 user         0.15 sys
assiss % /usr/bin/time ./mmap xgl-demo1.xvid.avi a
        0.26 real         0.09 user         0.14 sys
assiss % /usr/bin/time cp xgl-demo1.xvid.avi a         #cp花费的时间约是mmap的3倍
        0.80 real         0.00 user         0.29 sys
assiss % /usr/bin/time cp xgl-demo1.xvid.avi a
        0.80 real         0.00 user         0.31 sys
assiss % /usr/bin/time cp xgl-demo1.xvid.avi a
        0.78 real         0.00 user         0.31 sys
assiss % ll xgl-demo1.xvid.avi
-rw-r--r--  1 assiss  wheel  60738974 Feb  1  2006 xgl-demo1.xvid.avi

论坛徽章:
0
24 [报告]
发表于 2006-09-06 09:22 |只看该作者
to assiss,

你说的完全可能,mmap实现不同。继续测试。

LZ的程序用mmap拷贝文件,我认为不可能比cp快(数量级一样或更慢)。

论坛徽章:
0
25 [报告]
发表于 2006-09-06 17:05 |只看该作者

系统调用用的太多了

同学,你用mmap的程序中系统调用用的太多了,系统在用户态和内核态迁移的时候,开销还是不小的。而在用read/write的实现中只用了2个,当然显得mmap效率效率会低。

而且,在系统退出内核态的时候会查看有没有更高有限级的进程,有会出现进程抢占,在你mmap实现的执行时,sys+user << real说明了这一点,进程切换的机会增加。

论坛徽章:
0
26 [报告]
发表于 2006-09-06 17:32 |只看该作者
原帖由 BitFun 于 2006-9-6 17:05 发表
同学,你用mmap的程序中系统调用用的太多了,系统在用户态和内核态迁移的时候,开销还是不小的。而在用read/write的实现中只用了2个,当然显得mmap效率效率会低。

而且,在系统退出内核态的时候会查看有没有更 ...

那怎么解释我的系统里mmap速度比cp快,且mmap的real时间是cp的1/3左右?

论坛徽章:
0
27 [报告]
发表于 2006-09-06 22:40 |只看该作者

回复 26楼 assiss 的帖子

我所指的是针对linux平台,其他类UNIX的系统调用实现不尽相同,其实,他们只是系统调用等接口符合POSIX规范而已,具有平台差异性。如果讨论的话,建议在统一平台下比较,这样更有可比性。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP