致力于提升研发企业的持续创新能力

结盟众多企业“教练”, 共同设计、开发及提供人才培养解决方案,通过新颖多样的学习方式,针对性的定制化内容,助力企业全面提升竞争优势。

课程分类列表

LINUX系统高级调试和优化
课程类别:开发语言工具

linux 开发语言

课程讲师:

张银奎

课程周期:

3天

课程费用:

4800元/人

时间长度:3天

形式:讲解 + 真实案例演示

 

第一部分:LINUX大局观 (1小时)

要点:Linux内核的早期版本,推动Linux发展的两股力量,GPL,Tainted,反面典型Nvidia,发行版,Ubuntu特色,解析内核源代码树,两大空间,系统调用,strace,vdso,GNU,glibc,内核参数,观察当前内核使用的编译选项,内核文档

张银奎1



第二部分:全面认识GDB之用户态调试(1.5小时)

要点:为自由而生,Richard Stallman传奇,GDB诞生记,GDB版本,GDB的架构和工作原理,ptrace,命令类型,命令语法,常用命令,调试符号,DWARF,符号文件,下载Ubuntu的符号包和源代码,ELF结构,readelf,寻找符号的方法,栈回溯(bt),软件断点、硬件断点,复杂的断点命令,控制线程

 

第三部分:应用程序崩溃和转储(1小时)

要点:信号概要,信号屏蔽,设置信号处理器,理解古老的异常处理方式,setjmp,longjmp,段错误,段错误实例介绍,core文件,ulimit,core_pattern,ubuntu的错误收集机制,aport,分析core文件,本地分析,跨机器分析,分析core文件的最佳实践

 

实战1:使用GDB调试后台服务因段错误崩溃 (90分钟)

Linux下重要后台服务(Daemon)随机崩溃,深挖到底,竟然与C语言的规范有关,让你深刻认识C与C++的一个大不同之处,感受著名的头文件陷阱;熟悉如下工具和主要技能:GDB,GCC,map,dmesg,调试Linux应用程序,反汇编,插入代码JIT调试;温习如下知识点:虚拟内存,分页机制,页表,缺页异常,段错误,空指针,AT&T汇编和Intel汇编,调用规约

 

第四部分:全面认识GDB之内核态调试(1.5小时)

要点:Linus对内核调试的态度,艰难推进,KDB与KGDB,核心引擎,代码分析,KDB实际演练,KDB的重要命令,准备KGDB调试环境(内核调试环境建立和实际演示),调试符号,使用Ubuntu的符号包,初始断点,kgdbwait,KGDB中调用KDB命令,触发break-in的多种方法,/proc/kcore

 

第五部分:文件系统(1.5小时)

要点:“一切皆文件”,文件系统架构,组成,文件操作,设备文件系统,使用内核调试器帮助理解文件系统,EXT FS,Reiser FS,四个核心对象,准文件系统,proc fs(原理,关键代码,重要的应用,meminfo,maps等),sysfs,debug fs

 

实战2:使用LINUX双机内核调试探究句柄混论之谜

应用程序与驱动程序通信时,驱动程序总是收到错误的数据,打印出来观察,竟然是日志信息送给了驱动…使用KGDB分析应用层程序与驱动程序间通信的过程,分析数据混乱原因,理解虚拟文件系统、Linux驱动程序、sysfs、标准文件等理论化

 

第六部分:进程管理 (1.5小时)

要点:进程和线程,LWP,任务结构体,一体二用,进程属性,线程结构体,内核态栈,寻找内核态栈的方法,内核态栈溢出;调度队列,观察队列长度,线程优先级,线程调度器,计算每个任务时间片的方法,选择当前运行任务的算法,strace,ps命令的高级用法,pstree,top,使用strace做简单调优

 

第七部分:内存管理(上)(1.5小时)

要点:物理内存,从core到DRAM,NUMA,page,pfn,页表管理,TLB,MMU,页错误,观察页错误,虚拟内存,交换分区,匿名交换和非匿名交换,进程的地址空间,vma,maps,vmstat,活跃内存和非活跃内存,内核池,从/proc/meminfo 观察内存使用情况,meminfo 信息深入分析

 

实战3:与内存管理器对话

编写和修改内核驱动(LKM),加载驱动,使用多种方式分配内存,并通过不同方式观察内存开销变化,理解内存分配的原理,关键术语,学习各种观察工具的用法

张银奎2


第八部分:内存管理(下)(1.5小时)

要点:用户态堆,ptmalloc,arena,heap,主arena的布局,辅anrena的创建,堆块结构,分配策略,bin,bin的组织,分配过程,释放过程,堆有关的错误,故障调试,valgrind,valgind的工作原理,Address Sanitizer(ASan),ASan的工作原理,影子记录,检查过程,额外开销

 

实战4:使用valgrind调试典型的堆错误

堆很脆弱,经不起的考验有很多:溢出、多次释放、野指针……,在Linux解决这些问题的最有力武器就是valgrind,以老雷亲自编写的GeMalloc程序为样本,模拟各类堆错误,并使用valgrind一一捕获

 

第九部分:内核模块和系统Panic(1.5小时)

要点:可加载内核模块(LKM),init和exit,三类设备,字符设备,块设备,网络设备, softirq和tasklets,pnp,udevinfo,系统调用,与应用通信,ioctl, 文件读写,典型设备驱动解析eMMC,SD,USB(控制器,HUB,设备,数据传输),OOPS和Panic,详细解读Oops信息

 

实战5:分析系统Panic的原因

通过LKM触发内核Oops和Panic(内核态栈溢出,段错误和NMI watch dog超时),理解Oops输出,分析内核Panic工程,解析其来龙去脉

张银奎3



第十部分:日志和消息输出(1小时)

要点:系统日志架构,printk,vprintk_emit,消息级别,消息头结构,结构化信息输出,facility,logger,syslog,console,syslogd,/dev/kmsg,隐含锁,动态控制消息输出,结构化的消息,结构化消息在PnP中的应用

 

第十一部分:事件追踪(ftrace和perf)(1.5小时)

要点:测试性能的两种基本方法,Sampling,Instrumentation,trace机制背景,ftrace简史,ftrace的工作原理,追踪点,文件系统接口,user marker,启用追踪,读取trace数据,Kernshark,观察线程被抢时间片,观察中断处理过程,perf,选择CPU的计数器,perf使用示例(统计pagefault来源)

 

第十二部分:使用vTune调优(1.5小时)

要点:VTune概要,VTune 2019,创建本地项目和远程项目,选择分析类型,采样,配置符号路径和重新分析,热点分析(用户空间采样和基于硬件事件的采样),微架构分析(内存带宽分析,内存访问分析),并行分析,VTune的常用分析视图,定制VTune的分析视图,定制VTune的分析方案,在VTune中观察线程的Preempt事件,CNN推理案例解析

 

实战6:使用vTune分析AI应用的执行热点

通过vTune的监视工具采集矩阵乘法程序的运行数据,然后使用vTune图形分析工具进行分析,学习不同分析视图的用法,理解vTune中的关键性能指标,通过多种优化方法(改进内存访问、使用SIMD指令,优化选项)不断提高程序的性能

找到所需课程了吗?即刻 填写申请表格 与我们联络吧