文章目录
- 1.内核函数调用堆栈:4个函数
- 2.printk:cat /proc/cmdline查看console=ttyS0
- 3.动态打印:printk是全局的且只能设打印等级,动态打印可控制选择模块的打印,在内核配置打开CONFIG_DYNAMIC_DEBUG
- 4.top&perf:
- 4.ftrace:系统层面,功能需要打开,image大小会变大
- 5.proc文件系统:/proc/cpuinfo,meminfo,net
- 6.sysfs文件系统:设备树里所有信息在/sys/devices/platform里,class是不同驱动但相同行为事件如input汇总
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.top&perf:
如下是top命令:idle和wait是cpu不工作时间,其余项都是cpu工作时间。idle是cpu无事可做,而wait是cpu想做事却做不了,所以wait是特殊的idle,是cpu上至少一个线程阻塞在i/o时的idle。
用户层us
:这个比例越高,说明cpu利用率越好,因为我们目的就是为了让cpu将更多的时间用在执行用户代码上。
内核sy
:比例越低越好,因为cpu不应该把时间浪费在执行内核函数上。
ni
:运行一个进程后,默认nice值为0,通过renice增加该进程nice值(设为正数),该进程的CPU利用率会在ni中显示,减少进程nice值(设为负数)则不会在这里显示。
空闲id
:整体cpu利用率=100减去id,为了提高资源利用率,目标是降低id。
wa
:cpu阻塞在i/o上时间,如cpu从磁盘读取文件内容时,由于磁盘i/o太慢,导致cpu不得不等待数据就绪,才能继续执行下一步操作,这个值越高,说明i/o处理能力出问题。
硬中断hi
:cpu消耗在硬中断里时间,正常情况这个值很低,因为中断处理很快,即使有大量硬件中断也不会消耗很多cpu时间。
软中断si
:cpu消耗在软中断里时间,如进行网络数据大量收发,si会升高,因为有tx软中断和rx软中断处理才能发数据。
网络数据收发绕过cpu,用硬中断。
4.ftrace:系统层面,功能需要打开,image大小会变大
如下文件包含可追踪的所有场景。
如下案例:mpstat,perf(看函数执行次数),ftrace看函数执行时间。
如下sys_sync是系统调用。
如下可以打印出时间。
5.proc文件系统:/proc/cpuinfo,meminfo,net
6.sysfs文件系统:设备树里所有信息在/sys/devices/platform里,class是不同驱动但相同行为事件如input汇总