Linux系统编程与调试调优课程
课程天数:2天
课程介绍
本课程在讲解具体的调试和优化方法时,紧扣底层的原理,讲解Linux的各种调试和优化工具具体数据的含义,使得工程师在调试时知其然,知其所以然,能全盘慧眼把关一个Linux系统。
课程收益
通过本课程,学员可以系统化了解如下工作原理和实践方法:
Linux的工具链、进程调度、内存管理、I/O模型、系统调用等系统原理,以及多进程、多线程、I/O编程的方法,融系统负载分析、内存分析、I/O分析、内核调试、应用调试等实践于理论。
培训对象
嵌入式系统开发工程师、系统移植工程师;
课程大纲
第1单元:进入 Linux的精彩世界
• Linux系统组成
• GNU工具链和GDB调试
• GCC编译的各个阶段分解
• 反汇编, objdump
• readelf, nm, strip
• GDB调试技巧: 断点、watch、内存与backtrace等
• GDB与多线程
• JTAG与GDB结合
• GDB的图形化调试
• gprof
• gcov
• 崩溃转储core dump
• strace和ltrace
第2单元:Linux内核进程调度与调试
• task_struct
• 进程生命周期
• 进程调度算法
• 进程调度时机
• Linux内核线程实现原理
• 实时性
• 多核负载均衡
• BFS调度器
• top, htop, mpstat工具
第3单元:内核调试
• printk 及其变体
• 内核崩溃oops分析
• 内核debug 选项
• proc 和 sys
• 内核启动过程调试
• 内核启动时间优化调试
• 待机和电源管理调试
• 用JTAG调试内核
第4单元:内存分析与内存泄露
• Linux内核内存管理
• Out of memory (OOM)
• 进程的内存消耗: VSS, RSS, PSS, USS
• page cache
• swap
• /proc/meminfo, /proc/vmstat 和 /proc/slabinfo
• free命令分析
• smem分析进程内存
• 堆内存泄露检查: valgrind
• 栈溢出与保护页
第5单元:Linux多进程与多线程
• 多进程通信
• 多线程通信
• 正确的互斥和同步方法
• 可重入与线程安全
• 多进程、多线程调试
• IPC调试、死锁
• Linux soft lockup调试
第6单元:Linux性能优化
• CPU负载分析:top, htop
• Linux的I/O模型
• I/O负载分析:iostat, iotop
• C10K问题
• Linux逻辑分析仪:LTTng
• 综合性能瓶颈:oprofile
• 开机优化:bootchart
• 功耗优化: powertop 和 cpufreq-bench
• DS-5 streamline
第7单元:Linux基准程序
• LMBench
• Bonnie++
• IOZone
• Netperf/iperf
第八单元:实验课程
• 写一个工具自动分析文件系统中程序与库的依赖关系图;
• 写一个工具自动分析文件系统中程序与库的符号依赖;
• gcov白盒覆盖率;
• gdb调试多线程;
• gdb attach到一个运行进程;
• 调试core dump实例;
• 用 strace和ltrace跟踪一个应用对内核和库的调用;
• 跟踪和拦截Linux应用程序对动态库的调用;
• 使用dev_xxx和pr_xxx打印信息;
• 分析一次内核崩溃oops并反汇编;
• 写一个透过/proc在用户空间和内核空间进行交互的例子;
• 使用JTAG 和GDB调试内核;
• 运行一个多线程的程序,观察top, htop, mpstat的情况;
• 通过chrt, nice, renice, taskset方法改变进程的调度属性;
• 通过cgroup分配CPU资源;
• 分析一个运行时Linux的内存分布情况;
• 用smem观察进程的内存变化;
• 用valgrind跟踪一个有堆内存泄露的进程;
• 写一个有栈溢出的程序并观察溢出表现;
• 做I/O动作,观察page cache变化;
• 运行一个引起OOM的程序;
• 观察一个有一定CPU、I/O负载的系统CPU、I/O情况;
• 运行oprofile分析 binary的时间比例;
• 使用Bonnie++分析文件系统的性能;
• 修改diry_ratio等值分析文件系统性能;
• 使用LMBench分析操作系统性能;
• 观察一个LTTng的结果;
• 运行perf观察CPU、I/O分布情况;