发布时间:2015-07-29 18:47:00
本问题是个简单的内核编程问题(spin_lock的用法问题):spin_lock(task_lock)不能直接在中断上下文中使用,因为这样的锁没有关中断,他可能被中断打断,然后中断上下文中如果再次获取该锁就导致死锁了,除非能确认该锁不会在其它地方使用。
问题很简单,但却很有警示意义。可能有人认为内核代码随便就能写,模仿模仿就行,但实际上,内核编程水很深、坑很多,稍不留神(对相关用法和原理了解不够)就可能会掉坑里,立马掉进去还好,最怕就是给自己埋雷,不知道哪一天会踩到,到时后果就很严重了,所以,对内核的任何改动或新增代码,都需要千万谨慎,多修炼吧!......【阅读全文】
发布时间:2015-07-21 16:00:06
本文讲述一次spinlock死锁故障的定位过程,目的不在于问题本身,而在于展现一个内核bug的分析过程,提供一种分析思路,供大家参考。
一、问题现象
内核出现panic,kdump搜集到了vmcore。vmcore中直接导致panic的log信息为(包含相应CPU上的堆栈):......【阅读全文】
发布时间:2015-07-16 15:00:58
Crash工具分析某vmcore时,本想看看vmcore中running状态进程的相关状态,但是发现该vmcore中的running状态的进程异常多,而且其堆栈都是在schedule()中,有点不符合常理:......【阅读全文】
发布时间:2015-01-13 10:28:38
Crash工具加载模块符号
一、问题:
?在使用crash工具分析vmcore时,常会遇到内核模块符号不能解析的问题,如:
?crash> struct igbadapter 0xffff81032bef56b8
struct: invalid data structure reference: igbadapter......【阅读全文】
发布时间:2015-01-10 15:26:40
一次kernel panic分析--空指针in handle_IRQ_event
现象:
Unable to handle kernel NULL pointer dereference at 0000000000000039 RIP:
[] handle_IRQ_event+0x44/0xa6
PGD 61df63067 PUD 61ea5a067 PMD 0
Oops: 0000 [1] SMP
last sysfs file: /devices/system/cpu/cpu0/cpufreq/scaling_max_freq
CPU 8
Modules linked in: ossmod(U) tipc(U) bsp_smbus_ctrl(U) bonding autofs4 hidp rfcomm l2cap bluetooth lockd sunrpc ipv6 xfrm_nalgo crypto_api cpufreq_ondemand acpi_cpufreq freq_table dm_mirror d
m......【阅读全文】
发布时间:2014-12-29 10:35:57
使用SystemTap调试新增内核模块
关键点:
1)使用SystemTap调试内核模块,探测点的编写格式示例为:
module("ext3").function("ext3_*")
2)需要将新增的helloworld模块cp到/lib/modules/`uname -r`/extra目录中,否则找不到符号。......【阅读全文】
发布时间:2014-08-22 00:33:44
Crash工具用于解析kdump抓取的vmcore信息,如之前分析,vmcore实际为系统运行当时的内存镜像,其中包括了所有的内存中可以看到的信息,通过Crash工具可以解析vmcore中的详细数据,本文主要以sk_buff数据结构为例简单说明Crash中间中对结构体的解析。
?
?1、基本用法
?Crash中使用struct命令解析结构体,具体用法为:
?[struct] ......【阅读全文】
发布时间:2014-04-18 16:07:38
softlockup(watchdog)用于检测系统调度是否正常,即软锁的情况,当发生softlockup时,内核不能调度,但还能响应中断,对用户的表现可能为:能ping通,但无法登陆系统,无法进行正常操作。
其基本原理为:为每个CPU启动一个内核线程(watchdog/x),此线程为优先级最高的实时线程,在该线程得到调度时,会更新相应的计数(时间戳),同时会启动定时器,当定时器到期时检查相应的时间戳,如果超过指定时间,都没有更新,则说明这段时间内都没有发生调度(因为此线程优先级最高),则打印相应告警或根据配置可以进入panic流程。......【阅读全文】
发布时间:2014-04-18 14:20:39
nmi_watchdog原理(用于检测关中断死锁)
nmi_watchdog用于检测内核中关中断死锁(也称硬死锁)的情况,是调测内核死机或死锁问题的一大利器。内核中,如果代码编写不好可能会出现关中断死锁的情况,即进入内核态后,关中断,然后在内核态中死锁,或长时间运行,导致该CPU无法响应中断(因为中断已关),也无法得到调度(对于没有启用内核抢占的内核来说),外在表现可能为系统挂死、无法ping通、没有响应。而nmi_watchdog正是针对这种情况而设计的。
......【阅读全文】
发布时间:2014-03-06 14:53:09
问题现象:在redhat 64位系统中,用户态进程申请malloc 8M的内存,free后,查看进程的RSS并未减少,释放的内存未还给系统。
而在redhat 32未系统中,释放后的内存会立刻还给系统。
原因:redhat是采用的glibc作为c库,glibc采用ptmalloc作为内存管理机制。malloc有一个mmap门限默认是128k,当第一次分配内存大于128k时,ptmalloc会直接调用mmap申请内存,而不是去堆中分配。那么释放的时候也就直接调用munmap直接释放了。
......【阅读全文】
发布时间:2014-03-05 09:48:24
TCP: time wait bucket table overflow原因......【阅读全文】
发布时间:2014-02-20 16:04:43
SystemTap----thread_indent()函数分析 –使用thread_indent分析代码执行时间
......【阅读全文】