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