一、課程介紹:
本課程詳細講解Linux的工具鏈、進程調(diào)度、內(nèi)存管理、I/O模型、系統(tǒng)調(diào)用等系統(tǒng)原理,以及多進程、多線程、I/O編程的方法,融系統(tǒng)負載分析、內(nèi)存分析、I/O分析、內(nèi)核調(diào)試、應用調(diào)試等實踐于理論。在講解具體的調(diào)試和優(yōu)化方法時,緊扣底層的原理,講解Linux的各種調(diào)試和優(yōu)化工具具體數(shù)據(jù)的含義,使得工程師在調(diào)試時知其然,知其所以然,能全盤慧眼把關一個Linux系統(tǒng)。
二、教學對象:
本課程針對從事Linux內(nèi)核和應用開發(fā)以及系統(tǒng)性能調(diào)試調(diào)優(yōu)的工程師。
三、課程內(nèi)容:
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崩潰轉(zhuǎn)儲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應用程序?qū)討B(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)響應的影響
課程三、內(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變化
課程五、Linux多進程與多線程
1.多進程通信
2.多線程通信
3.正確的互斥和同步方法
4.可重入與線程安全
5.多進程、多線程調(diào)試
6.IPC調(diào)試、死鎖
7.Linux的I/O模型
8.多線程與I/O
9.C10K問題
課程六、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的結(jié)果
7.運行perf觀察CPU、I/O分布情況
8.運行perf觀察程序的時間分布