Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1204194
  • 博文数量: 122
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 4002
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-20 08:27
文章分类
文章存档

2016年(1)

2015年(21)

2014年(100)

发布时间:2014-12-30 16:51:55

kernel 3.10内核源码分析--进程退出exit_code
进程退出时,有相应的exit_code,可用于判断进程退出的原因。......【阅读全文】

阅读(4179) | 评论(0) | 转发(2)

发布时间:2014-12-30 16:10:44

如何在内核代码中查找系统调用的定义......【阅读全文】

阅读(4193) | 评论(0) | 转发(1)

发布时间:2014-12-30 10:58:15

字符串常量位于进程地址空间的哪个位置?之前没有关注过。。
答案:在代码段。......【阅读全文】

阅读(3034) | 评论(1) | 转发(0)

发布时间:2014-12-29 10:35:57

使用SystemTap调试新增内核模块

关键点:
1)使用SystemTap调试内核模块,探测点的编写格式示例为:
module("ext3").function("ext3_*")
2)需要将新增的helloworld模块cp到/lib/modules/`uname -r`/extra目录中,否则找不到符号。......【阅读全文】

阅读(7945) | 评论(0) | 转发(3)

发布时间:2014-11-21 15:55:48

时钟中断、高精度时钟和nohz相关流程......【阅读全文】

阅读(3690) | 评论(0) | 转发(0)

发布时间:2014-11-19 16:06:19

kernel 3.10内核源码分析--slab原理及相关代码
1、基本原理
我们知道,Linux保护模式下,采用分页机制,内核中物理内存使用buddy system(伙伴系统)进行管理,管理的内存单元大小为一页,也就是说使用buddy system分配内存最少需要分配一页大小。那如果需要分配小于一页的内存该怎么办呢?
另一方面,内核中经常需要大量的数据结构(比如struct task_strcut),这些数据结构的频繁分配和释放对性能影响较大。
Slab正是用于解决上述的两个问题, Slab 分配器源于 Solaris 2.4 的分配算法,工作于buddy system之上,用于管理特定大小对象的缓存,提高小块内存或特定对象内存分配效率。
Slab的两个用途如前面所述:1、缓存和管理内核中经常使用的数据结构对象,内核中使用slab提供的专用的接口,可以实现数据结构对象的快速分配,大大减少相关开销,提升效率。2、缓存和管理小块内存,也称通用缓存,用于kmalloc的底层实现和支撑。......【阅读全文】

阅读(7050) | 评论(3) | 转发(8)

发布时间:2014-10-24 09:59:56

Linux 2.6 中的页面回收与反向映射 ......【阅读全文】

阅读(2800) | 评论(0) | 转发(2)

发布时间:2014-10-23 09:38:50

Linux x86_64 的TLB管理 ......【阅读全文】

阅读(3127) | 评论(0) | 转发(1)

发布时间:2014-10-22 09:47:30

ftrace、kpatch、systemtap的基本原理、联系和区别......【阅读全文】

阅读(4622) | 评论(0) | 转发(2)

发布时间:2014-10-21 15:03:55

MWAIT和HLT的差别......【阅读全文】

阅读(6194) | 评论(0) | 转发(0)

发布时间:2014-09-17 18:29:20

一次用户态进程死循环案例的分析
1、问题现象
业务进程(用户态多线程程序)挂死,操作系统反应迟钝,系统日志没有任何异常。从进程的内核态堆栈看,看似所有线程都卡在了内核态的如下堆栈流程中:
[root@vmc116 ~]# cat /proc/27007/task/11825/stack
[] retint_careful+0x14/0x32
......【阅读全文】

阅读(4573) | 评论(0) | 转发(3)

发布时间:2014-09-12 17:02:34

kernel 3.10内核源码分析--udp_sendmsg()--UDP发包流程
udp_sendmsg()主要流程如下:
1)前期处理。包括,对数据长度合法性判断、pending数据的判断、目的地址的处理和获取、控制信息的处理、组播处理、connected信息处理、MSG_CONFIRM标志的处理等。
2)调用ip_append_data()接口将其添加到传输控制块(sock)的发送队列中(利用发送队列中的现有skb,或者新创建skb,详细原理和流程请参见ip_append_data()接口的分析)。
3)判断是否有cork标记(MSG_MORE),如果没有,则说明需要立即发送,则调用udp_push_pending_frames()接口发送报文,实际是将包提交至IP层;如果设置了cork,则说明需要阻塞等待直到数据达到MTU大小,则完成本次的udp_sendmsg()处理。......【阅读全文】

阅读(16129) | 评论(0) | 转发(2)

发布时间:2014-09-09 19:53:39

kernel 3.10内核源码分析--ip_append_data--IP层提供的UDP和RAW socket的发包接口
基本原理
UDP发包流程中,当没有cork的情况下,会走过udp_sendmsg到达ip_append_data,该接口是IP层提供的UDP和RAW Socket的发包接口,同时,TCP中用于发送ACK和RST报文的接口ip_send_reply最终也会调用此接口
该接口的主要作用是:将数据拷贝到适合的skb(利用发送队列中现有的或新创建)中,可能有两种情况:
1)放入skb的线性区(skb->data)中;
2)或者放入skb_shared_info的分片(frag)中
另外,还需要考虑MTU对skb数据进行分割,为IP层的分片做准备。......【阅读全文】

阅读(4832) | 评论(0) | 转发(1)

发布时间:2014-09-05 15:00:23

kernel 3.10内核源码分析--Sysrq处理流程、键盘驱动、input子系统相关
1、基本介绍
Sysrq魔术键提供了大量的实用功能,可用户快速获取系统运行状态信息,尤其是在系统出现异常时,收集有用信息,对于疑难问题的分析有极大的帮助。
典型应用场景如:
1)系统进入了挂死状态(如调度出现异常、或系统负荷过重),但仍能响应中断,此时可以通过Sysrq魔术键(c)手工触发panic,结合kdump,就能收集到vmcore信息,用于问题的后续分析定位,非常有用。
2)当系统中某进程出现挂死(可能是D状态,或是死锁),此时需要确认该进程具体挂在什么地方,可以使用Sysrq魔术键(t)打印出系统中所有进程的堆栈信息。
3)当系统出现反应迟钝、交互困难时,难以通过shell或终端交互获取到有用信息,此时可以使用Sysrq魔术键(m,p)打印出系统中内存使用的详细信息和CPU运行上下文信息等。......【阅读全文】

阅读(7788) | 评论(2) | 转发(1)

发布时间:2014-08-29 11:21:00

X86架构中,HLT指令用于使CPU进入HALT状态,在Linux的进程调度模块中,当某CPU较长时间处于idle状态时,可能会执行HLT命令使其进入HALT状态,目的显而易见,是为了节能。CPU的HALT状态,在APCI规范中,对应于CPU的C1状态,属于CPU睡眠状态中的最低级别,即最浅的睡眠。......【阅读全文】

阅读(24641) | 评论(0) | 转发(0)

发布时间:2014-08-22 00:33:44

Crash工具用于解析kdump抓取的vmcore信息,如之前分析,vmcore实际为系统运行当时的内存镜像,其中包括了所有的内存中可以看到的信息,通过Crash工具可以解析vmcore中的详细数据,本文主要以sk_buff数据结构为例简单说明Crash中间中对结构体的解析。
?
?1、基本用法
?Crash中使用struct命令解析结构体,具体用法为:
?[struct] ......【阅读全文】

阅读(9260) | 评论(0) | 转发(1)

发布时间:2014-08-13 18:58:47

kernel 3.10代码分析--KVM相关--KVM_SET_USER_MEMORY_REGION流程
1、基本原理
如之前分析,kvm虚拟机实际运行于qemu-kvm的进程上下文中,因此,需要建立虚拟机的物理内存空间(GPA)与qemu-kvm进程的虚拟地址空间(HVA)的映射关系。
虚拟机的物理地址空间实际也是不连续的,分成不同的内存区域(slot),因为物理地址空间中通常还包括BIOS、MMIO、显存、ISA保留等部分。
qemu-kvm通过ioctl vm指令KVM_SET_USER_MEMORY_REGION来为虚拟机设置内存。主要建立guest物理地址空间中的内存区域与qemu-kvm虚拟地址空间中的内存区域的映射,从而建立其从GVA到HVA的对应关系,该对应关系主要通过kvm_mem_slot结构体保存,所以实质为设置kvm_mem_slot结构体。......【阅读全文】

阅读(7020) | 评论(0) | 转发(2)

发布时间:2014-08-12 19:44:18

kernel 3.10代码分析--KVM相关--虚拟机创建
1、基本原理
如之前分析,kvm虚拟机通过对/dev/kvm字符设备的ioctl的System指令KVM_CREATE_VM进行创建,本文简单解释及分析在3.10版本内核代码中的相关流程,用户态qemu-kvm部分暂不包括。......【阅读全文】

阅读(6662) | 评论(0) | 转发(5)

发布时间:2014-08-08 18:52:09

1、内核hung task检测机制由来
?我们知道进程等待IO时,经常处于D状态,即TASK_UNINTERRUPTIBLE状态,处于这种状态的进程不处理信号,所以kill不掉,如果进程长期处于D状态,那么肯定不正常,原因可能有二:
?1)IO路径上的硬件出问题了,比如硬盘坏了(只有少数情况会导致长期D,通常会返回错误);
?2)内核自己出问题了。
?这种问题不好定位,而且一旦出现就通常不可恢复,kill不掉,通常只能重启恢复了。
?内核针对这种开发了一种hung task的检测机制,基本原理是:定时检测系统中处于D状态的进程,如果其处于D状态的时间超过了指定时间(默认120s,可以配置),则打印相关堆栈信息,也可以通过proc参数配置使其直接panic。......【阅读全文】

阅读(21232) | 评论(0) | 转发(5)

发布时间:2014-08-08 14:47:46

......【阅读全文】

阅读(2171) | 评论(0) | 转发(0)
给主人留下些什么吧!~~

啦哆A梦2014-02-21 11:08

回复  |  举报
留言热议
请登录后留言。

登录 注册