文章目录
- 2.linux错误码:64位系统内核空间最后一页地址为0xfffffffffffff000~0xffffffffffffffff,这段地址是被保留的,如果指针落在这段地址内,说明是错误的无效指针
- 6.虚拟内存:物理内存和进程之间的中间层,ioremap将寄存器地址映射,或devmem
- 1.内核函数调用堆栈:4个函数
- 2.printk:cat /proc/cmdline查看console=ttyS0
- 3.动态打印:printk是全局的且只能设打印等级,动态打印可控制选择模块的打印,在内核配置打开CONFIG_DYNAMIC_DEBUG
- 4.top:idle和wait是cpu不工作时间
- 5.dstat:监视系统资源使用,/proc/interruptes(硬中断),/proc/irq/[irq_num]/smp_affinity是一个十六进制数值(每个位对应一个 CPU 核心)
- 6.perf:函数调用占比
- 7.ftrace:系统层面,功能需要打开,image大小会变大
- 8.proc文件系统:/proc/cpuinfo,meminfo,net
- 9.debugfs:debugfs.h中api建立目录/sys/kernel/debug
- 10.性能优化:裸磁盘无法使用,一般都刷文件系统。驱动加上要考虑磁盘io,内存占用,cpu使用情况
- 11.Valgrind内存泄漏排查案例:
- 12.cpu瓶颈:
- 13.主频设置
- 14.驱动稳定性
2.linux错误码:64位系统内核空间最后一页地址为0xfffffffffffff000~0xffffffffffffffff,这段地址是被保留的,如果指针落在这段地址内,说明是错误的无效指针
6.虚拟内存:物理内存和进程之间的中间层,ioremap将寄存器地址映射,或devmem
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:idle和wait是cpu不工作时间
如下是top命令: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软中断处理才能发数据。
5.dstat:监视系统资源使用,/proc/interruptes(硬中断),/proc/irq/[irq_num]/smp_affinity是一个十六进制数值(每个位对应一个 CPU 核心)
如下软中断
(如syscall函数,产生软中断的进程一定是当前正在运行的进程,不会中断CPU,但会中断调用代码的流程)。
6.perf:函数调用占比
如下记录过去60秒。
7.ftrace:系统层面,功能需要打开,image大小会变大
如下查看debugfs和tracefs挂载点。
如下文件包含可追踪的所有场景。
如下案例:mpstat,perf(看函数执行次数),ftrace看函数执行时间。
如下sys_sync是系统调用。
如下可以打印出时间。
8.proc文件系统:/proc/cpuinfo,meminfo,net
9.debugfs:debugfs.h中api建立目录/sys/kernel/debug
内核开发会遇到内核崩溃,如空指针异常,内存访问越界,如下会打印出异常调用栈信息定位。
10.性能优化:裸磁盘无法使用,一般都刷文件系统。驱动加上要考虑磁盘io,内存占用,cpu使用情况
11.Valgrind内存泄漏排查案例:
如下malloc加个死循环就是内存泄漏。
dmesg会显示不全,因为环形buffer会覆盖。
12.cpu瓶颈:
-p pid
13.主频设置
14.驱动稳定性
希望arg有多大
likely一般用在if判断里,cpu会把当前指令后面指令预取出来,等到执行时就去执行,效率提高,但是也要判断后面那条指令大概率执不执行,执行的话取出来,不执行则跳过。