博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

飞翔,嵌入式linux

linux嵌入式系统必将大行于天下。专注于linux嵌入式系统的搭建,专注于高效稳定软件的开发,专注底层程序调试技术。
  feixiang.cublog.cn

关于作者
姓名:飞翔
Email:loughsky@sina.com
职业:IT
年龄:32
位置:北京
个性介绍:专注在嵌入式操作系统,以及高效程序调试
|| << >> ||
我的分类


嵌入式linux内存和性能优化
一直在做嵌入式Linux系统的内存和性能优化,试着把自己这一年多来的知识和经验系统化,总结出来。初步出来个东西,还在不断更新中。

1.    序    6
2.    内存    7
2.1.    系统当前可用内存    8
2.2.    进程的内存使用    9
2.2.1.    虚拟内存与物理内存    10
2.2.2.    /proc/{pid}    11
2.2.3.    内存回收    17
2.3.    进程    19
2.3.1.    堆段    20
2.3.1.1.    小块内存分配    23
2.3.1.2.    大块内存分配    26
2.3.1.3.    内存释放    27
2.3.1.4.    内存空洞    29
2.3.1.5.    堆内存管理器参数总结    32
2.3.1.6.    内存的跟踪    32
2.3.1.7.    堆内存优化    34
2.3.2.    栈    34
2.3.2.1.    栈上申请内存    35
2.3.2.2.    栈的扩展    37
2.3.2.3.    栈的释放    38
2.3.2.4.    栈内存的优化    39
2.3.3.    环境变量及参数    39
2.3.3.1.    环境变量的存储    40
2.3.3.2.    新增环境变量    41
2.3.3.3.    修改环境变量    43
2.3.3.4.    释放环境变量    44
2.3.3.5.    环境变量内存优化    45
2.3.4.    ELF文件    45
2.3.4.1.    常用工具    46
2.3.4.2.    ELF文件    48
2.3.4.3.    程序瘦身    57
2.3.4.4.    程序的运行    60
2.3.5.    数据段    61
2.3.5.1.    .bss 与 .data的区别    61
2.3.5.2.    变量所在内存区域    65
2.3.5.3.    关于数据段的优化    70
2.3.6.    代码段    74
2.3.7.    使用Thumb指令    75
2.3.7.1.    Thumb指令的编译    76
2.3.7.2.    ARM程序和Thumb程序混合使用    77
2.4.    动态库    80
2.4.1.    数据段    81
2.4.1.1.    共享库中的bss    81
2.4.1.2.    共享库数据段对进程数据段的影响    84
2.4.2.    代码段    87
2.4.2.1.    符号解析    87
2.4.2.2.    关于代码段共享    90
2.4.2.3.    导出函数对代码段的影响    90
2.4.2.4.    删除多余的导出符号    91
2.4.3.    动态库的优化    91
2.4.3.1.    减少bss节的数据    91
2.4.3.2.    无用的动态库    91
2.4.3.3.    动态库的合并    92
2.4.3.4.    仅被依赖一次的动态库    93
2.4.3.5.    使用dlopen来控制动态库的生存周期    93
2.5.    线程    96
2.5.1.    设置进程栈空间    99
2.5.2.    设置线程栈空间    100
2.5.3.    减少线程的数量    101
2.6.    共享内存    101
2.7.    内存调试    103
2.7.1.    mtrace    103
2.7.2.    malloc and free 钩子函数    104
2.7.3.    栈的回溯    126
2.7.4.    化整为零法    129
2.7.5.    dmalloc    130
2.7.6.    valgrind    132
2.8.    嵌入式系统    139
2.8.1.    tmpfs分区    140
2.8.2.    Cache与Buffer    140
2.8.3.    内存交换与回收    142
2.8.4.    减少守护进程数量    144
2.8.5.    /proc/sys/vm/优化    145
2.8.6.    系统内存分析    147
3.    速度    147
3.1.    性能评价    147
3.2.    性能优化的方法    148
3.3.    性能的评测    149
3.3.1.    Proc目录    150
3.3.1.1.    系统相关    150
3.3.1.2.    进程相关    151
3.3.2.    相关工具    153
3.3.2.1.    top    153
3.3.2.2.    lmbench    153
3.3.2.3.    vmstat    155
3.4.    优化基本原则    159
3.5.    shell脚本优化    160
3.5.1.    Builts-in和applets    160
3.5.2.    bash脚本    161
3.5.3.    如何优化Busybox bash脚本    161
3.5.4.    Bash脚本优化    161
3.6.    进程启动速度    161
3.6.1.    查看动态库的加载过程    162
3.6.2.    减少加载动态库的数量    163
3.6.3.    共享库的搜索路径    163
3.6.4.    动态库的层次    166
3.6.5.    动态库的初始化    166
3.6.5.1.    动态库的构造和析构函数机制    167
3.6.5.2.    全局变量初始化    167
3.6.6.    Prelink    169
3.6.6.1.    Prelink会带来内存使用上的增长    172
3.6.7.    提高进程启动速度    178
3.6.7.1.    进程改为线程    178
3.6.7.2.    Preload进程    179
3.7.    优化思路    180
3.8.    查找性能瓶颈    181
3.8.1.    gprof    181
3.8.1.1.    基本用法:    182
3.8.1.2.    gprof与动态库    184
3.8.1.3.    gprof与多线程    186
3.8.2.    OProfile    186
3.8.2.1.    Oprofile范例    186
3.8.2.2.    多个文件    190
3.8.2.3.    Oprofile与动态库    193
3.8.2.4.    Oprofile与多线程    198
3.8.2.5.    在嵌入式环境下的OProfile    201
3.9.    优化的层次    203
3.10.    算法优化    204
3.10.1.    查表法    205
3.10.2.    使用异步通讯替代多线程    207
3.11.    GCC编译优化    213
3.11.1.    体系无关优化    214
3.11.2.    内部连接和外部连接    218
3.12.    程序的优化    225
3.12.1.    数据类型    225
3.12.2.    慢操作    227
3.12.3.    if 与switch的性能比较    227
3.12.4.    循环    231
3.12.5.    函数    235
3.12.6.    数组    238
3.12.7.    浮点    238
3.12.7.1.    软浮点与硬浮点    240
3.12.8.    结构体    242
3.12.9.    除法    243
3.12.10.    inline内联函数    248
3.12.11.    C++    249
3.12.11.1.    在声明对象时进行初始化    249
3.12.11.2.    构造函数和析构函数    249
3.12.11.3.    构造函数初始化列表    250
3.12.11.4.    参数与返回值    251
3.12.12.    使用mmap来优化大文件操作    252
3.12.13.    ARM体系结构相关    254
3.12.13.1.    ARM指令简介    255
3.12.13.2.    ARM寄存器    257
3.12.14.    内存    257
3.12.14.1.    消除数据的相关性    261
3.12.14.2.    同时向内存控制器发送多个查询    262
3.12.14.3.    请求按不少于32个字节的增量方式读取数据    262
3.12.14.4.    建议    262
3.12.14.5.    消除数据相关性    263
3.12.15.    cache    263
3.13.    硬加速    263
3.13.1.    SIMD加速    263
3.14.    整体调优    264
3.14.1.    进程执行速度与空闲内存的关系    264
3.14.2.    调整进程的优先级    265
3.14.3.    shutdown、reboot的区别    267
3.14.4.    设备的启动时间    268
3.14.5.    damon的数量    269
3.14.6.    文件系统    270
3.14.7.    使用lmbench检查系统瓶颈    273
3.14.8.    系统待机时间    275
4.    附录    288
4.1.    gcc与g++的不同    288
4.2.    代码段和数据段优化    290
4.3.    Advanced SIMD data-processing instructions    300
4.3.1.    Advanced SIMD integer ALU instructions    304
4.3.2.    Advanced SIMD floating-point instructions    307
4.3.3.    ARMv6 SIMD intrinsics    309
4.3.4.    Note    310

希望这篇文档能对大家有所帮助。
文件:Linux性能详解.pdf
大小:2056KB
下载:下载

发表于: 2008-07-02,修改于: 2008-07-03 00:53,已浏览1393次,有评论19条 推荐 投诉


网友评论
网友: wf 时间:2008-07-03 10:24:36 IP地址:61.135.152.★
关注您很久了, 觉得不再对您的慷慨不表示些感谢,自己都过意不去了. 相高手致敬,向高手学习.

网友: 虫牙 时间:2008-07-03 11:01:00 IP地址:202.118.0.★
回复同上
PS:赞美的话就不再说了,这样会引起 革命意识衰退,博主再接再励

网友: NULL 时间:2008-07-03 11:17:06 IP地址:124.90.157.★
感谢博主的分享

网友: 本站网友 时间:2008-07-05 09:48:36 IP地址:121.15.134.★
谢谢共享,谢谢开源。

网友: 本站网友 时间:2008-07-05 10:32:05 IP地址:61.55.185.★
确实是好东西。感谢楼主

网友: vinge 时间:2008-07-07 08:58:16 IP地址:210.21.67.★
这里高人牛人真多阿,谢谢奉献

网友: 本站网友 时间:2008-07-07 09:23:07 IP地址:202.98.157.★
感谢老大,是多年的心血啊。

网友: 本站网友 时间:2008-07-07 16:33:40 IP地址:221.216.104.★
好东西

网友: 本站网友 时间:2008-07-08 09:28:16 IP地址:211.144.96.★
谢谢!

网友: 本站网友 时间:2008-07-08 18:08:22 IP地址:220.248.17.★
Thank you!!!

网友: kwest 时间:2008-07-08 21:05:47 IP地址:118.112.252.★
好资料,最近正在为driver的内存泄露而头痛!

网友: huchunjin 时间:2008-07-09 23:31:02 IP地址:116.77.8.★
一直关注你,谢谢!

网友: 本站网友 时间:2008-07-12 11:22:05 IP地址:221.133.229.★
拜读了老大的文章,真的是相当不错的,受益匪浅!!

网友: lt2010326 时间:2008-07-16 23:11:36 IP地址:221.7.75.★
thanks

网友: dongas 时间:2008-07-22 12:41:58 IP地址:58.240.233.★
多谢分享!一直很关注你!

网友: 本站网友 时间:2008-07-27 14:29:08 IP地址:116.24.219.★
thanks

网友: niutao.linux 时间:2008-08-18 15:52:00 IP地址:221.11.22.★
索取的同时留下真诚的感谢!

网友: wzhy 时间:2008-09-06 16:36:12 IP地址:125.40.202.★
好文章,谢谢!

网友: 本站网友 时间:2008-09-06 20:57:40 IP地址:119.122.42.★
谢谢你,写的非常好!

 发表评论