教學優(yōu)勢
曙海教育的課程培養(yǎng)了大批受企業(yè)歡迎的工程師。大批企業(yè)和曙海
建立了良好的合作關系。曙海集團的課程在業(yè)內(nèi)有著廣泛的美譽度和響亮的知名度。
秉承二十幾年積累的教學品質(zhì),本課程以真實項目實戰(zhàn)為導向,授課工程師將會與您分享設計的全流程及工具的綜合使用技巧、經(jīng)驗。
Linux系統(tǒng)編程與調(diào)試調(diào)優(yōu)培訓課程
課程大綱?
第1章???????? 進入 Linux的精彩世界
1.1 Linux啟動過程(多核)
1.2 Linux系統(tǒng)組成
1.3 strace和ltrace
1.4 GNU工具鏈和GDB調(diào)試
1.5 GCC編譯的各個階段分解
1.6 ELF文件分析
1.7 反匯編, objdump, dwarfdump
1.8 readelf, nm, strip
1.9 GDB調(diào)試技巧: 斷點、watch、內(nèi)存與backtrace等
1.10 GDB與多線程
1.11 LD_PRELOAD與動態(tài)庫捕獲
1.12 gprof
1.13 gcov
1.14 崩潰轉儲core dump
第2章???????? Linux內(nèi)核進程調(diào)度與調(diào)試
2.1 進程生命周期
2.2 調(diào)度的上下文切換以及開銷
2.3 調(diào)度算法的出發(fā)點:吞吐率與響應
?
實驗課
??? 1.寫一個工具自動分析文件系統(tǒng)中程序與庫的依賴關系圖;
??? 2.寫一個工具自動分析文件系統(tǒng)中程序與庫的符號依賴;
??? 3.gcov白盒覆蓋率
??? 4.gdb調(diào)試多線程
??? 5. gdb attach到一個運行進程
??? 6.調(diào)試core dump實例
??? 7. 用?strace和ltrace跟蹤一個應用對內(nèi)核和庫的調(diào)用
??? 8. 跟蹤和攔截Linux應用程序對動態(tài)庫的調(diào)用
?
?
?
2.2 進程調(diào)度算法
2.2.1 SCHED_FIFO/RR
2.2.2 SCHED_NORMAL與CFS算法
2.2.3 nice
2.3 進程調(diào)度時機
2.4 Linux實時性與RT解決方案
2.5 SMP
2.5.1 多核負載均衡
2.5.2 CPU熱插拔
2.5.3 CPU affinity
2.5.4 BFS算法
2.6 針對CPU資源的Cgroups
2.7 系列案例演示調(diào)度行為對系統(tǒng)響應的影響
第3章???????? 內(nèi)核調(diào)試
3.1 printk 及其變體
3.2 內(nèi)核崩潰oops分析
3.3 內(nèi)核debug?選項
3.4 proc 和?sys
3.5 內(nèi)核啟動過程調(diào)試
3.6 內(nèi)核啟動時間優(yōu)化調(diào)試
3.7 待機和電源管理調(diào)試
3.8 用JTAG調(diào)試內(nèi)核
實驗課程
1.使用dev_xxx和pr_xxx打印信息
2.分析一次內(nèi)核崩潰oops并反匯編
3.寫一個透過/proc在用戶空間和內(nèi)核空間進行交互的例子
4.使用JTAG和GDB調(diào)試內(nèi)核
5.運行一個多線程的程序,觀察top, htop, mpstat的情況
6.通過chrt, nice, renice, taskset方法改變進程的調(diào)度屬性
7.通過cgroup分配CPU資源
?
第4章???????? ?內(nèi)存分析與內(nèi)存泄露
1.? MMU系統(tǒng)
2.? page與zone
3.? buddy系統(tǒng)
4.? slab、kmalloc
5.? 用戶空間malloc與內(nèi)核buddy等的關系
6.? out-of-memory (OOM)與控制
7.? 進程的內(nèi)存消耗
8.? page cache與swap
9.? zRAM
10. 內(nèi)存泄露剖析
11. Addresssanitizer與valgrind
12. 針對內(nèi)存資源的Cgroups
實驗課程
1.分析一個運行時Linux的內(nèi)存分布情況
2.用smem觀察進程的內(nèi)存變化
3.用valgrind跟蹤一個有堆內(nèi)存泄露的進程
4.啟動編譯器Addresssanitizer
4.寫一個有棧溢出的程序并觀察溢出表現(xiàn)
5.做I/O動作,觀察page cache變化
6.運行一個引起OOM的程序
7.運行一個程序的多個副本,觀察PSS變化
?
?
第5章???????? Linux多進程與多線程
1.? 多進程通信
2.? 多線程通信
3.? 正確的互斥和同步方法
4.? 可重入與線程安全
5.? 多進程、多線程調(diào)試
6.? IPC調(diào)試、死鎖
7.? Linux的I/O模型
8.? 多線程與I/O
9.? C10K問題
第6章???????? Linux性能優(yōu)化
1. CPU負載分析:top, htop,?mpstat
2. I/O負載分析:iostat, iotop
3. Linux邏輯分析儀:LTTng
4. 綜合性能瓶頸:oprofile/perf
5. 程序執(zhí)行時間分布分析
6. cache miss分析
7. 開機優(yōu)化:bootchart
8. 功耗優(yōu)化: powertop?和?cpufreq-bench
9. ftrace
10. Linux基準程序(LMBench,Bonnie++, IOZone, Netperf/iperf等)
11. 特別彩蛋:?LEP(Linux Easy Profiling)
實驗課程
1.觀察一個有一定CPU、I/O負載的系統(tǒng)CPU、I/O情況
2.運行oprofile分析?binary的時間比例
3.使用Bonnie++分析文件系統(tǒng)的性能
4.修改diry_ratio等值分析文件系統(tǒng)性能
5.使用LMBench分析操作系統(tǒng)性能
6.觀察一個LTTng的結果
7.運行perf觀察CPU、I/O分布情況
8.運行perf觀察程序的時間分布
?
?
?