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

2016年(1)

2015年(21)

2014年(100)

发布时间: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)

发布时间:2014-07-22 14:32:30

BIOS INT13 读写磁盘......【阅读全文】

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

发布时间:2014-07-18 19:54:46

KVM内核模块中重要数据结构......【阅读全文】

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

发布时间:2014-07-18 19:46:03

KVM的API是通过/dev/kvm设备访问的,/dev/kvm是一个标准的字符设备,可以使用常用的open、close、ioctl接口操作,但是kvm的实现中,没有提供read和write接口,所有对KVM的所有操作都是通过ioctl接口操作的。KVM提供给上层的API功能上分,可分为3中类型:
1、 system指令,针对虚拟化系统的全局性参数设置和控制。
2、 VM指令,针对VM虚拟机进行控制,如:内存设置、创建VCPU等。
3、 VCPU指令,针对具体的VCPU进行参数设置。如:相关寄存器的读写、中断控制等。
通常对于KVM的操作都是从open /dev/kvm设备文件开始的,open后,会获得相应的文件描述符(fd),然后通过ioctl系统指令对该fd进行进一步的操作,比如通过KVM_CREATE_VM指令,可以创建一个虚拟机并返回虚拟机对应的文件描述符,然后根据该描述符来进一步控制虚拟机的行为,比如通过KVM_CREATE_VCPU指令来为该虚拟机创建VCPU。......【阅读全文】

阅读(5054) | 评论(0) | 转发(4)

发布时间:2014-07-18 11:42:44

在bash脚本中执行后台命令(加&)时,需要执行wait命令回收后台子进程的资源,否则会内存泄露??
?最近遇到一个奇特的问题,在脚本中反复调用后台命令(后台命令执行后会退出),发现一段时间后,内存占用明显增加,有内存泄露的迹象。
经过深入分析,得出结论:
在脚本中,调用后台执行的命令,确实应该wait,不wait的话,确有内存泄露的情况。......【阅读全文】

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

发布时间:2014-07-17 19:23:47

Out Of Memory(OOM),即内存耗尽,当系统中内存耗尽时,如果不做处理,将处于崩溃的边缘,因为无内核资源可用,而系统运行时刻都可能需要申请内存。这时,内核需要采取一定的措施来防止系统崩溃,这就是我们熟知的OOM流程,其实就是要回收一些内存,而走到OOM流程,已经基本说明其它的回收内存的手段都已经尝试过了(比如回收cache),这里通常只能通过kill进程来回收内存了,而选择被kill进程的标准就比较简单直接了,总体就是:谁用的多,就kill谁。......【阅读全文】

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

发布时间:2014-07-17 08:48:18

信号在如下时机进行处理:
当从中断或异常(包括系统调用)返回用户态时。
?注意:这里是返回“用户态”,也就是说,当当前进程正在内核态执行时,是不能处理信号的,必须等到其返回用户态时才能处理信号。......【阅读全文】

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

发布时间:2014-07-16 20:52:30

Crash工具用于解析Vmcore文件,Vmcore文件为通过kdump等手段收集的操作系统core dump信息,在不采用压缩的情况下,其相当于整个物理内存的镜像,所以其中包括了最全面、最完整的信息,对于分析定位各种疑难问题有极大的帮助。配置kdump后,在内核panic后,会自动进入kump流程,搜集Vmcore。
crash工具即为专门用于分析vmcore文件的工具,其中提供了大量的实用分析命令,极大的提高了vmcore的分析效率。
再分析vmcore的过程中,常常需要解析内核某个流程中的关键变量的值,以便确认故障当时系统的状态,本文主要介绍变量的解析。......【阅读全文】

阅读(11332) | 评论(3) | 转发(1)

发布时间:2014-07-09 17:14:57

pci配置空间中有6个bar,表示mmio或端口在CPU域物理地址空间的分布情况。?
?在写驱动时,通常需要从配置空间中读取相关bar信息,然后使用request_mem_region之类的接口,申请资源,然后使用ioremap将相关的区域映射到内核地址空间中,然后即可使用。
?问题是:pci配置空间中的bar信息,即mmio或io端口的分布,到底是谁决定、谁填写的呢?是硬件自己 or BIOS or OS kernel
?答案:对于x86环境来说(其它硬件环境不确认),pci配置空间中的bar信息最初是由BIOS根据当前环境中的硬件分布信息,进行分配后填入的,32位环境,PCI设备的mmio基本分布于3.5G-4G范围中,基本能保证各设备分配的空间不冲突。在OS kernel启动硬件扫描和初始化时,会读取相应内容,如果有需要,会根据需要进行调整(通常不会)。......【阅读全文】

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

发布时间:2014-07-07 11:44:05

AutoNUMA NUMA hinting fault numa_balancing---
redhat提出的新的机制,用于平衡Numa节点间的内存访问,基本思想是:定期统计各进程的内存访问情况,
并unmapping pages,然后触发NUMA hinting fault,在page fault中重新均衡内存访问,目的是使运行
进程的CPU尽量访问本地节点上的内存,提升性能。......【阅读全文】

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

发布时间:2014-07-03 10:30:08

内存屏障相关,barrier(),mb,smp_mb,乱序,内存一致性......【阅读全文】

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

发布时间:2014-07-02 17:15:46

kernel 3.10内核源码分析--缺页异常(page fault)处理流程......【阅读全文】

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

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

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

登录 注册