免费注册 查看新帖 |

Chinaunix

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

[FreeBSD] 如何提高程序的性能? [复制链接]

论坛徽章:
0
41 [报告]
发表于 2008-05-07 14:29 |只看该作者
原帖由 gvim 于 2008-5-6 17:25 发表

[quote]
%   cumulative   self              self     total           
time   seconds   seconds    calls  ms/call  ms/call  name   
26.7       0.79     0.79     5003     0.16     0.16  __sys_munmap [7]
24.8       1.52     0.73  2520003     0.00     0.00  memset [8]
16.6       2.01     0.49   175001     0.00     0.00  arena_run_alloc [10]
15.1       2.46     0.45        0  100.00%           .mcount (6
  8.9       2.73     0.26     5000     0.05     0.06  draw [13]
  3.9       2.84     0.12  2510001     0.00     0.00  arena_malloc [9]
  1.5       2.88     0.04        0    3.11%           calloc [1]



费时在memset。
freebsd 的memset在/usr/src/lib/libc/string/memset.S
linux的memset在glibc/string/memset.c
我没有看出freebsd的memset比较linux的效率差在哪里。

第二个耗时的:arena_run_alloc  ... [/quote]


我的是FreeBSD6.2 i386

  %   cumulative   self              self     total           
time   seconds   seconds    calls  ms/call  ms/call  name   
43.7       7.30     7.30    30002     0.24     0.24  memset [4]
25.1      11.48     4.19                             .mcount (56)
13.7      13.77     2.29  1205016     0.00     0.00  brk [11]
  9.4      15.33     1.56     5000     0.31     2.21  draw [3]
  3.4      15.90     0.57    10001     0.06     0.06  _open [17]
  1.9      16.22     0.32  2520002     0.00     0.00  imalloc <cycle 1> [18]
  0.8      16.36     0.14  2514999     0.00     0.00  ifree <cycle 1> [19]
  0.8      16.49     0.13  5020001     0.00     0.00  pubrealloc [7]
  0.4      16.56     0.08        1    75.08  1540.54  malloc [13]
  0.3      16.61     0.05  1265002     0.00     0.00  malloc_pages <cycle 1> [10]
  0.2      16.64     0.03    10005     0.00     0.16  __vfprintf [12]
  0.1      16.67     0.02    10001     0.00     0.00  close [21]
  0.1      16.68     0.02                             free [16]


可以看出费时在memset。

编译的时候同时加上 -lc 和 -lc_p就可以看到这些函数了。

[ 本帖最后由 doctorjxd 于 2008-5-7 14:31 编辑 ]

论坛徽章:
0
42 [报告]
发表于 2008-05-07 16:48 |只看该作者
24.8       1.52     0.73  2520003     0.00     0.00  memset [8]


43.7       7.30     7.30    30002     0.24     0.24  memset [4]

差别在这里?

为什么调用次数会差这么多?

为什么6.2里面的memset 需要0.24 这么多呢?

[ 本帖最后由 im2web 于 2008-5-7 16:50 编辑 ]

论坛徽章:
0
43 [报告]
发表于 2008-05-07 16:50 |只看该作者
编译的时候同时加上 -lc 和 -lc_p就可以看到这些函数了。

加了就通不过 linux centos

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
44 [报告]
发表于 2008-05-07 17:12 |只看该作者
原帖由 im2web 于 2008-5-7 16:48 发表
24.8       1.52     0.73  2520003     0.00     0.00  memset [8]


43.7       7.30     7.30    30002     0.24     0.24  memset [4]

差别在这里?

为什么调用次数会差这么多?

为什么6.2里面 ...


问题不在memset实现上。
http://www.freebsd.org/cgi/cvswe ... ENG_7_0&tr2=1.9

diff看来,7.0和6.2的memset.c代码逻辑没有任何改变。

memset也没有使用系统调用。还不清楚为什么7.0里面为什么是0.0而6.2里面是0.24,也不清楚为何7.0里面调用2520003次而6.2里面调用30002次。
是否7.0和6.2的gd包有差异?

[ 本帖最后由 gvim 于 2008-5-7 17:16 编辑 ]

论坛徽章:
0
45 [报告]
发表于 2008-05-07 17:32 |只看该作者
是否7.0和6.2的gd包有差异?

那么将6.2的gd库升级到最新的版本,速度就应该有质的飞跃?


难道memset 是6.2 的gd 库自己又实现了一次,结果在bsd 上面的版本实现非常的烂?

论坛徽章:
0
46 [报告]
发表于 2008-05-07 17:57 |只看该作者
原帖由 gvim 于 2008-5-7 17:12 发表

问题不在memset实现上 ...

是否7.0和6.2的gd包有差异?


我的FreeBSD6.2的gd包是 gd-2.0.33_4,1       A graphics library for fast creation of images

论坛徽章:
0
47 [报告]
发表于 2008-05-07 19:57 |只看该作者
我是个初学者,但我觉得这种测试并不能说明那个系统先进!因为真正的先进系统是在有很多任务同时处理时,哪个系统稳定并快速,比如同样的硬件环境下,两种系统都同时运行上千个进程,谁能更好的调节这些进程,不发生冲突或出问题,谁才是最先进的系统,就像元帅和将军一样,真正的强者是那些有超强的组织能力的人,而不是只能打的人!

论坛徽章:
0
48 [报告]
发表于 2008-05-07 20:56 |只看该作者
不如你升级一下gd库, 看看是否有惊喜

论坛徽章:
0
49 [报告]
发表于 2008-05-08 12:39 |只看该作者
原帖由 四水哥 于 2008-5-7 19:57 发表
我是个初学者,但我觉得这种测试并不能说明那个系统先进!因为真正的先进系统是在有很多任务同时处理时,哪个系统稳定并快速,比如同样的硬件环境下,两种系统都同时运行上千个进程,谁能更好的调节这些进程,不 ...


如果看不懂别人在讨论什么,那么选择沉默是比较明智的:wink:

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
50 [报告]
发表于 2008-05-08 13:34 |只看该作者
原帖由 im2web 于 2008-5-7 20:56 发表
不如你升级一下gd库, 看看是否有惊喜


确定了,是7.0和6.x之间libc库的改进导致性能改善。

方法:
1) 6.x编译
2) copy to 7.0 (直接运行会报libc.so.6和libm.so.4没有找到)
3) 在7.0下安装compat6x包
4) mv /usr/local/lib/compat/libc.so.6 /usr/local/lib/compat/libc.so.6.bk
5) cd /lib && ln -s libc.so.7 libc.so.6
6) ./a.out


以上操作之后,7.0上时间为30
跳过步骤4,5,运行时间仍然100之上

看出来, libm没有较大影响。
7.0和6.x的libc直接导致运行时间差异。libm数学运算时间没有什么变化,大部分时间消耗在libc本身。

以上只是现象,具体的改进,还有待分析。

[ 本帖最后由 gvim 于 2008-5-8 13:35 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP