嵌入式linux記憶體和效能最佳化

來源:互聯網
上載者:User

一直在做嵌入式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
希望這篇文檔能對大家有所協助。

screen.width*0.7)
{this.resized=true; this.width=screen.width*0.7; this.alt='Click here
to open new window/nCTRL Mouse wheel to zoom in/out';}"
onmouseover="if(this.width>screen.width*0.7) {this.resized=true;
this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click
here to open new window/nCTRL Mouse wheel to zoom in/out';}"
onclick="if(!this.resized) {return true;} else
{window.open('http:///fileicon/pdf.gif');}" onmousewheel="return
imgzoom(this);" alt="" />

檔案:Linux效能詳解.pdf
大小:2056KB
下載:
下載

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.