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

2016年(1)

2015年(21)

2014年(100)

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

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

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

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

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

阅读(9482) | 评论(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结构体。......【阅读全文】

阅读(7135) | 评论(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部分暂不包括。......【阅读全文】

阅读(6864) | 评论(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。......【阅读全文】

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

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

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

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

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

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

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

发布时间:2014-08-08 13:49:41

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

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

发布时间:2014-08-07 22:25:23

硬盘黑匣子实现问题
即?在磁盘中划分一块区域出来做黑匣子用。
?我们知道,当系统出现严重问题时,系统日志经常已不能正常工作,因为依赖太多,比如调度和冗长的IO流程。
因此向利用现有的硬盘做黑匣子,记录内核关键的异常信息,信息量小,循环写入,不考虑删除、不考虑碎片、不考虑性能、不考
虑复杂的管理算法。
......【阅读全文】

阅读(4820) | 评论(8) | 转发(1)

发布时间:2014-08-06 20:00:50

Oops中的error code解释
1、如果第1位被清0,则异常是由一个不存在的页所引起的;否则是由无效的访问权限引起的。
2、如果第1位被清0,则异常由读访问或者执行访问所引起;否则异常由写访问引起。
3、如果第2位被清0,则异常发生在内核态;否则异常发生在用户态。......【阅读全文】

阅读(4093) | 评论(0) | 转发(7)

发布时间:2014-08-06 09:42:39

kernel 3.10内核源码分析--vmalloc(非连续内存页分配)
在分配内存时,总是希望能分配到连续的物理内存页,愿望是美好的,但系统中可能没有太多的连续内存可用(比如内存碎片严重时),此时就需要一种非连续内存的分配方式。于是乎,就产生了vmalloc,vmalloc用于分配不连续的物理内存页,但将其映射到内核虚拟地址空间中后,其虚拟地址是连续的
内核虚拟地址空间中,有一段专门的区间用于vmalloc,称之vmalloc区,位于线性映射区之后,准确的说是从892M+8M(VMALLOC_START)到VMALLOC_END之间,其中892M是线性映射区,用于线性映射低端内存,之后的8M是安全间隙,用于区间隔离,防止越界。
vmalloc区中包含一个个独立的子区域,每个子区域用于一次独立映射,各个子区域间通过一个内存页进行隔离,防止不正确的内存访问操作。......【阅读全文】

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

发布时间:2014-08-06 09:09:10

3.10 kernel内核源码分析--ioremap
1、为什么需要ioremap
问题:分配mmio(request_mem_region)后,得到的是物理地址,按理只需要将其转换为虚拟地址后(内核中,低端内存只是一个偏移而已),
应该就可以直接访问了吧?但是为什么还需要使用ioremap将其转换为线性地址后才能访问呢?
解答:分配的mmio的物理地址在内核中不一定能直接访问,比如:
1)x86 32位环境中,mmio的地址范围就在3G-4G之间,位于高端内存,内核中不能直接访问,需要进行映射。
2)一些体系架构中,IO内存根本就不能直接访问,必须建立相应的映射后才行,相应的映射工作由架构相关的ioremap完成......【阅读全文】

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

发布时间:2014-08-05 19:11:51

Entry point: main(vl.c)       | kvm_init(qemu-kvm.c) -> machine->init(pc_init_pci in ./hw/pc.c)-> main_loop(vl.c)       |                  .........【阅读全文】

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

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

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

登录 注册