linux内核调试与追踪
文章平均质量分 83
linux内核调试以及追踪技术
为了维护世界和平_
好好学习,天天向上
展开
-
linux 使用kdump和crash工具调试内核
发生崩溃时,create_oops函数栈空间的FP放在 ffff80001f51f670 处,那么LR在其高8字节的地址上,因此LR放在ffff80001f51f678处。struct 用来显示内核中数据结构的定义或者值 struct vm_area_struct。由于LR存放了子函数返回的下一条指令,再减去4字节,就是其父函数调用该函数的PC值。找到create_oops的父函数 _MODULE_INIT_START_oops。x0是参数,参数是vm_area_struct,所以要查看其结构体的偏移。原创 2022-12-25 22:11:24 · 4214 阅读 · 3 评论 -
Linux内核中的panic
内核支持四种不同类型,基于回调函数执行的环境原子的Atomic:函数运行在原子上下文,不能阻塞阻塞Blocking:函数运行在进程上下文,可以阻塞睡眠Sleepable RCU:函数运行在进程上下文,可以阻塞,免锁机制原始Raw:在任何上下文中运行,可以或可以不阻塞原子的 注册函数,实际上对spin_lock_irqsave/spin_unlock_irqsave封装};1、从文件名可以知道,atomic原子操作,不能阻塞。原创 2022-12-24 15:43:08 · 6192 阅读 · 0 评论 -
linux内核中watchdog、lockup、stall、hung等检测
系统(在一个或多个CPU核上)保持在长时间无反应状态。检测类型有watchdog、soft lockup、hard lockup、 hung task、workqueue stall 等。3、CONFIG_RCU_CPU_STALL_TIMEOUT 值的范围 (3~300)在此时间内一定能检测到。在内核模式下运行的CPU内核仍处于紧密循环状态,不允许其他硬件中断运行;1、硬锁定只能由NMI,在本机x86_64上检测到;内核处于紧密的循环中,长时间不让其他任务得到调度。检测系统的健康状态,有能力重启系统。原创 2022-11-04 07:42:10 · 4227 阅读 · 2 评论 -
linux内核调试工具之kprobe(二)
前一章使用kprobe编程,需要编码手动编译。本章使用trace追踪技术,在任何函数上设置动态kprobe(通过kprobe事件)。原创 2022-10-27 09:14:53 · 998 阅读 · 0 评论 -
linux内核调试工具之kprobe
kprobe 可以在系统运行期间,自定义回调函数,动态插入探测点。2005年使用的典型CPU,kprobe命中需要0.5到1.0微秒来处理,返回探测命中的时间通常比kprobe命中的时间长50-75%在运行过程中想看某个函数的变量,需要重新编译内核。将内核输出都写到log.txt中(dmesg只能写部分),使用grep检索所需要查询的信息。测试程序打开/home/kprobe.c 测试在kprobe探测能否探测到。在输出信息中可以看到函数的地址、打开的文件名、函数执行的时间40ns等信息。原创 2022-10-24 22:26:18 · 2247 阅读 · 0 评论 -
内核追踪技术之 ftrace
N 表示设置了TIF_NEED_RESCHED和PREEMPT_NEED_RESCHED标志位,需要被调度。首先需要在include/trace/events/sched.h 的头文件中添加一个名为sched_stat_minvruntime的跟踪点。set_ftrace_filter和set_ftrace_notrace选项配对使用。前者设置要跟踪的函数,后者设置不要跟踪的函数。trace_sched_stat_runtime 是使用了sched_stat_runtime跟踪点,在命令行下也可以查询到。原创 2022-10-17 21:47:17 · 3497 阅读 · 0 评论 -
linux内核中的睡眠函数*delay、*sleep
内核中的睡眠、延时函数。原创 2022-10-12 07:51:00 · 5256 阅读 · 0 评论 -
Linux用户与内核空间交互—netlink
用户空间与内核的交互方式,使用copy_from_user(), copy_to_user().除了这两种交互方式,内核还提供了其他高级的方式,对于写驱动来说很重要。有proc、sysfs、debugfs、netlink、ioctl。本文学习netlink。原创 2022-10-10 19:49:48 · 1043 阅读 · 1 评论 -
Linux用户与内核空间交互—debugfs
用户空间与内核的交互方式,使用copy_from_user(), copy_to_user().除了这两种交互方式,内核还提供了其他高级的方式,对于写驱动来说很重要。有proc、sysfs、debugfs、netlink、ioctl。本文学习debugfs。原创 2022-10-07 16:04:18 · 1582 阅读 · 0 评论 -
Linux用户与内核空间交互—ioctl
用户空间与内核的交互方式,使用copy_from_user(), copy_to_user().除了这两种交互方式,内核还提供了其他高级的方式,对于写驱动来说很重要。有proc、sysfs、debugfs、netlink、ioctl。本文学习ioctlprocfssysfsdebugfsnetlinkioctl容易开发容易开发与使用相对容易学习与使用非常容易学习与使用困难,必须用户空间和内核空间同步编程相对困难,必须写用户空间程序适合场景仅仅内核,旧内核使用,避免驱动使用。原创 2022-10-10 19:52:16 · 1299 阅读 · 1 评论 -
Linux用户与内核空间交互—sysfs
用户空间与内核的交互方式,使用copy_from_user(), copy_to_user().除了这两种交互方式,内核还提供了其他高级的方式,对于写驱动来说很重要。有proc、sysfs、debugfs、netlink、ioctl。本文学习sysfs。原创 2022-10-03 23:16:25 · 1701 阅读 · 0 评论 -
Linux用户与内核空间交互—procfs
用户空间与内核的交互方式,使用copy_from_user(), copy_to_user().除了这两种交互方式,内核还提供了其他高级的方式,对于写驱动来说很重要。有proc、sysfs、debugfs、netlink、ioctl。本文学习procfs。原创 2022-10-03 22:27:49 · 2802 阅读 · 0 评论 -
linux内核源码分析系列文章汇总
进程,驱动、中断、文件系统、优化、网络、内存专题原创 2022-04-09 11:53:45 · 7246 阅读 · 4 评论 -
Linux内核中Lockdep死锁检测
死锁的检测以及使用锁存在的问题。通过两个实例分析循环锁和AB-BA锁异常的检测。原创 2022-09-27 10:35:07 · 2824 阅读 · 0 评论 -
Linux内核中KCSAN 数据竞争检测
共享可写数据,并行执行时需要用锁来保护,或用lock-free。原创 2022-09-22 13:47:56 · 1936 阅读 · 0 评论 -
Linux内核中oops 错误解析以及问题定位
文档最后有完整的oops输出文件,此处将输出分成多个小块进行分析。原创 2022-09-21 10:20:46 · 6710 阅读 · 0 评论 -
linux内核中内存耗尽OOM killer
当内存严重不足时,页分配器在多次尝试直接回收失败后,就会调用内存耗尽OOMkiller,选择杀死进程,释放内存。先看一段oom输出的错误在应用程序开发时会出现内存泄露,如上述所示,杀死net_process进程信息。在内核中是如何处理的呢?......原创 2022-07-27 23:15:38 · 3070 阅读 · 0 评论 -
Linux内核变量中per-CPU的使用
lock-free技术:per-CPU与lock-free数据结构RCU。get_cpu_var()会引用preempt_disable(),禁止内核竞争。或者per_cpu(var,cpu) 如遍历每个CPU核的pcpa的变量。//源码文件arch/x86/kernel/process_64.c。put_cpu_var()会引用preempt_enable()两个线程使用共享变量,使用per-CPU,最后各自的输出是正确的。有两种申请方式:动态申请和静态申请。增加per-CPU的变量。原创 2022-09-27 10:50:36 · 1687 阅读 · 0 评论 -
Linux内核中使用内存检测
在内核中提供了内存检测的工具slub与kasan,在开发时可以将检测的功能打开。原创 2022-09-20 09:08:35 · 2524 阅读 · 0 评论 -
linux性能优化perf
perf性能优化方法原创 2022-04-02 07:30:36 · 2992 阅读 · 0 评论 -
linux性能分析之网络篇
在每个CPU上启动一个内核线程,并可以通过/proc/net/pktgen下面的同名文件,跟这些线程交互;而pgctrl则主要用来控制这次测试的开启和停止。pktgen支持丰富的自定义选项,方便你根据实际需要构造所需网络包,从而更准确地测试出目标服务器的性能。吞吐量6702.69[Kbytes/sec]received响应时间0.225[ms]每秒请求数11972.18,吞吐量17.65MB,平均延迟83.15。参数说明-c并发数,-n请求总数。..................原创 2022-07-26 10:00:56 · 2254 阅读 · 0 评论 -
linux性能分析之内存篇
目录一、常用命令二、内存一般分析思路三、内存优化思路1、vmstat vmstat报告有关进程、内存、分页、块IO、陷阱、磁盘和cpu活动的信息。2、sar 这条命令非常强大,全面的分析系统性能 包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存的使用情况、进行活动以及IPC有关的活动等参数,3、pidstatThe pidstat command is used for monitoring individual tasks currently being mana原创 2022-08-08 21:27:02 · 2468 阅读 · 0 评论 -
(一文了解)linux性能分析之CPU篇
目录前言一、CPU 性能指标1、CPU使用率2、负载均衡3、上下文切换4、CPU缓存命中率二、常用工具1、uptime2、vmstat3、mpstat4、top5、sar6、pidstat7、cat /proc/sotfirqs三、分析CPU性能瓶颈方法分析举例四、性能调优1,编译器选项2、进程绑定3,独占CPU组前言本文介绍linux性能优化CPU相关的知识点,首先介绍了CPU相...原创 2022-04-10 14:51:55 · 9197 阅读 · 9 评论 -
linux内核源码分析之性能优化
目录内核kernel内存vm文件系统fs内核kernel文件一个进程发送到另外一个进程的最大长度(bytes)root@ubuntu# cat /proc/sys/kernel/msgmax8192指定一个消息最大长度(bytes)root@ubuntu# cat /proc/sys/kernel/msgmnb16384文件指定消息队列标识的最大数目,系统范围内最大多少个消息队列root@ubuntu# cat /proc/sys/kernel/..原创 2022-04-02 16:46:25 · 1312 阅读 · 0 评论 -
eBPF理解 (四)
bpftrace用在快速排除和定位系统上,简单的脚本开发并执行;BCC用在复杂的eBPF开发,使用最广泛;libbpf从内核中抽离出来的标准库,不在需要每台机器安装LLVM和内核头文件。原创 2022-08-27 12:31:07 · 1567 阅读 · 0 评论 -
eBPF理解(三)
使用例子第一条如:用户态 setsockopt(sock,SOL_SOCKET,SO_ATTACH_BPF,...)绑定BPF到具体的socket上。在网络驱动程序刚收到数据包时触发,无需通过网络协议栈,可用来实现高性能网络处理方案,常用于DDos防御,防火墙,4层负载均衡等场景。类型:BPF_PROG_TYPE_SCHED_CLS 和 BPF_PROG_TYPE_SCHED_ACT。这些类型的BPF程序都可以通过BPF系统调用的BPF_PROG_ATTACH进行挂载。用于过滤,观测或重定向套接字网络包。原创 2022-08-20 17:50:57 · 3003 阅读 · 0 评论 -
eBPF理解(二)
eBPF运行时在内核中有五个模块组成。原创 2022-08-20 15:38:06 · 2577 阅读 · 0 评论 -
eBPF理解 (一)
eBPF 是从 BPF (Berkeley Packet Filter) 技术扩展而来的eBPF 系统启动后就一直运行在那里,它需要事件触发后才会执行。借助kprobe和uprobe,eBPF 程序几乎可以在内核和应用的任意位置进行插桩。eBPF 的诞生成为内核的一个顶级子系统最典型的就是 iovisor 带来的 BCC、bpftrace 等工具。图片来源BPF开发过程过程使用C语言开发eBPF程序借助LLVM把eBPF程序编译成BPF字节码通过bpf系统调用,把BPF字节码提交给内核。原创 2022-08-20 12:33:36 · 3579 阅读 · 0 评论