先写一些片段化的,实例化的,写多了再写总结性的
内核调优debug,感官上主要处理一些系统卡死,cpu运行异常(比如异常处于高负载等)的场景
需要了解一些关于cpu运行的指标参数,,,
需要能追踪哪个cpu运行进程数量,运行周期,,
需要用到一些芯片厂商带的内核分析工具或者linux社区的工具,所以熟悉工具使用
下面按照这个思路展开:
在工作生活中,我们时常会遇到一些性能问题:比如手机卡顿了;造成性能问题的原因多种多样,可能是网络延迟高、磁盘 IO 慢、调度延迟高、内存回收等,这些最终都可能影响到用户态进程,进而被用户感知。
为了方便调试和测试代码健壮性,内核提供了许多与内核调试相关的配置选项。这些选项大部分都在内核配置编辑器的内核开发(kernel hacking)菜单项中。在内核配置目录树菜单的其他地方也还有一些可配置的调试选项。
1,打开nconfig
make nconfig
sudo apt install make
sudo apt install gcc
sudo apt install pkg-config
sudo apt install libncurses-dev
我特么 需要配置啥是吧 放弃了 以后再说,总之打开内核配置以后是这样的
2,配置config
printk and dmesg options
PRINTK_CALLER:调用进程
DYNAMIC_DEBUG:动态打开log打印
Memory Debugging
DEBUG_PAGEALLOC:用于跟踪和验证 page 分配和释放
SLUB_DEBUG: 启用SLUB debug支持, 还有一些调试信息比如/proc/slabinfo
SLUB_DEBUG_ON: 打开SLUB debug, 更精细的控制 kernel command line:slub_debug=*
PAGE_OWNER: page分配跟踪,还需要打开page_owner=on
Debug Oops, Lockups and Hangs
PANIC_ON_OOPS:发生oops时直接panic
SOFTLOCKUP_DETECTOR:检测软锁,cpu跑飞死循环了
BOOTPARAM_SOFTLOCKUP_PANIC:检测到softlockup立刻panic
DETECT_HUNG_TASK:hung task 检测,默认120S
WQ_WATCHDOG: workqueue stall检测
SCHEDSTATS:调度状态
DEBUG_PREEMPT:检测非安全抢占
Kmemleak
-
Kmemleak 是 Linux 内核的一个工具,专门用于检测和报告内核中的动态内存泄漏。你可以通过配置内核并加载 kmemleak 模块来使用它。
-
在内核配置中启用 CONFIG_DEBUG_KMEMLEAK。
-
在启动时添加 kmemleak=on 内核参数。咋启用,编译的时候?
-
查看 /sys/kernel/debug/kmemleak 目录下的文件,以获取泄漏报告
3,usb-service怎么调用sysfs节点
ps -AZ | grep usb-service 获取进程信息 gerp 查询usb-service字段
u:r:vendor_hal_usb_qti:s0(进程标签) system (作用范围) 1615 1 2262488 5780(进程线程号之类的) binder_ioctl_write_read 0 S android.hardware.usb-service.qti(进程名字)
-rw-rw-r--(分别是 自己 root 还有啥的读写权限,这个组合应该对应0664) 1 root root(这俩root分别是啥的作用范围 比如usb-service这个服务作用范围是system 那这个节点服务用不了) u:object_r:vendor_sysfs_qcom_battery:s0(节点对应标签) 4096 2024-08-29 12:11 authentic(节点名字)
android.hardware.usb-service.qti进程所在cpp文件
/home/docker//ap8650/vendor/qcom/opensource/usb/hal/Usb.cpp
android.hardware.usb-service.qti服务对应rc文件
/home/docker/txwork1/ap8650/vendor/qcom/opensource/usb/hal/android.hardware.usb-service.qti.rc
这个相当于下面节点 对这个服务开了读写及作用范围权限 开了才能用
vendor_hal_usb_qti(这个服务对应标签) vendor_sysfs_qcom_battery(节点对应标签):file {write getattr open read};(开了什么权限)
注意开权限的te文件位置 device/xiaomi/sepolicy_vndr/qva/vendor/common/hal_usb.te
dd