文章目录
- 1.内核函数调用堆栈:4个函数
- 2.printk:cat /proc/cmdline查看console=ttyS0
- 3.动态打印:printk是全局的且只能设打印等级,动态打印可控制选择模块的打印,在内核配置打开CONFIG_DYNAMIC_DEBUG
- 4.ftrace:系统层面,功能需要打开,image大小会变大
- 5.proc文件系统:/proc/cpuinfo,meminfo,net
- 6.sysfs文件系统:设备树里所有信息在/sys/devices/platform里,class是不同驱动但相同行为事件如input汇总
- 7.内核调试手段:debugfs.h中api建立目录/sys/kernel/debug
- 8.性能优化:裸磁盘无法使用,一般都刷文件系统
- 10.Valgrind内存泄漏排查案例:
- 11.cpu瓶颈:
- 12.主频设置
- 13.驱动稳定性
1.内核函数调用堆栈:4个函数
2.printk:cat /proc/cmdline查看console=ttyS0
3.动态打印:printk是全局的且只能设打印等级,动态打印可控制选择模块的打印,在内核配置打开CONFIG_DYNAMIC_DEBUG
printk会关中断影响性能,如果在usb的read/write里printk,那么usb就没法直接用了。我想加很多调试信息,但是不想影响linux性能,所以用动态打印,调试时才打开,control节点默认不输出,如下操作才输出,+p是转为printk,相当于下面的define dev_dbg …。
4.ftrace:系统层面,功能需要打开,image大小会变大
如下文件包含可追踪的所有场景。
如下是top命令,用户层us,内核sy,空闲id,硬中断hi,软中断si(如进行网络数据大量收发,si会升高,因为有tx软中断和rx软中断处理才能发数据)
如下案例:mpstat,perf(看函数执行次数),ftrace看函数执行时间。
如下sys_sync是系统调用。
如下可以打印出时间。
5.proc文件系统:/proc/cpuinfo,meminfo,net
6.sysfs文件系统:设备树里所有信息在/sys/devices/platform里,class是不同驱动但相同行为事件如input汇总
7.内核调试手段:debugfs.h中api建立目录/sys/kernel/debug
8.性能优化:裸磁盘无法使用,一般都刷文件系统
网络数据收发绕过cpu,用硬中断。
驱动加上要考虑磁盘io,内存占用,cpu使用情况
如下网络调试:
10.Valgrind内存泄漏排查案例:
如下malloc加个死循环就是内存泄漏。
dmesg会显示不全,因为环形buffer会覆盖。
11.cpu瓶颈:
-p pid
12.主频设置
13.驱动稳定性
希望arg有多大
likely一般用在if判断里,cpu会把当前指令后面指令预取出来,等到执行时就去执行,效率提高,但是也要判断后面那条指令大概率执不执行,执行的话取出来,不执行则跳过。