发布时间:2014-07-17 08:48:18
信号在如下时机进行处理:
当从中断或异常(包括系统调用)返回用户态时。
?注意:这里是返回“用户态”,也就是说,当当前进程正在内核态执行时,是不能处理信号的,必须等到其返回用户态时才能处理信号。......【阅读全文】
发布时间:2014-07-16 20:52:30
Crash工具用于解析Vmcore文件,Vmcore文件为通过kdump等手段收集的操作系统core dump信息,在不采用压缩的情况下,其相当于整个物理内存的镜像,所以其中包括了最全面、最完整的信息,对于分析定位各种疑难问题有极大的帮助。配置kdump后,在内核panic后,会自动进入kump流程,搜集Vmcore。
crash工具即为专门用于分析vmcore文件的工具,其中提供了大量的实用分析命令,极大的提高了vmcore的分析效率。
再分析vmcore的过程中,常常需要解析内核某个流程中的关键变量的值,以便确认故障当时系统的状态,本文主要介绍变量的解析。......【阅读全文】
发布时间: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启动硬件扫描和初始化时,会读取相应内容,如果有需要,会根据需要进行调整(通常不会)。......【阅读全文】
发布时间:2014-07-07 11:44:05
AutoNUMA NUMA hinting fault numa_balancing---
redhat提出的新的机制,用于平衡Numa节点间的内存访问,基本思想是:定期统计各进程的内存访问情况,
并unmapping pages,然后触发NUMA hinting fault,在page fault中重新均衡内存访问,目的是使运行
进程的CPU尽量访问本地节点上的内存,提升性能。......【阅读全文】
发布时间:2014-07-02 17:15:46
kernel 3.10内核源码分析--缺页异常(page fault)处理流程......【阅读全文】
发布时间:2014-07-02 09:39:24
page fault不能发生在内核态么?为什么?
这里有3个问题:
1、为什么会产生page fault?
?2、发生缺页的上下文是否可以位于内核态
3、发生缺页的地址是否可以位于内核态地址空间......【阅读全文】
发布时间:2014-07-01 17:08:31
原理上,内核态是可以直接访问用户态的虚拟地址空间的,所以如果需要在内核态获取用户态地址空间的数据的话,理论上应该是可以直接访问的,但为什么还需要使用copy_from_user接口呢?......【阅读全文】
发布时间:2014-06-06 10:26:58
kernel 3.10内核源码分析--file write流程
文件写入流程通常从用户态发起,总体分两部分:
1) 从用户态到页缓存
用户态进程先open指定文件,返回fd
用户态进程调用write库函数接口,fd作为入参
read库函数接口最终调用write对应的系统调用接口,sys_write,由此进入内核流程
--------用户态和内核态分界------------------------
内核态调用特定文件系统定义的对应相关操作接口,如ext2对应的write接口为ext2_file_operations->aio_write->generic_file_aio_write,
由于用户对写入速度不敏感,同时磁盘操作较慢,所以写操作通常被延迟,以提升性能,即通常说的“延迟写”。
基本原理为:数据先写入页缓存(page cache)中并设置脏标记,后续由pdflush内核线程周期性或者按需对脏页进行回写。写入操作在数据写入页缓存后即可返回,无需等待数据实际写入磁盘,页缓存(内存)的写入速度显然比磁盘快多了,所以如此能大大提升w......【阅读全文】
发布时间:2014-06-06 10:24:38
kernel 3.10内核源码分析--file read流程
基本原理
文件读取流程通常从用户态发起,总体流程为:
用户态进程先open指定文件,返回fd
用户态进程调用read库函数接口,fd作为入参
read库函数接口最终调用read对应的系统调用接口,sys_read,由此进入内核流程
--------用户态和内核态分界------------------------
内核态调用特定文件系统定义的对应相关操作接口,如ext2对应的read接口为ext2_file_operations->aio_read,由此进入mapping层(VFS层)
mapping层在进行相应处理后,构造并提交bio,进入通用块层。
--------mapping层和通用块层分界----------------
通用块层构造request,提交到IO调度层
--------通用块层和IO调度层分界----------------
IO调度层对request按特定的IO调度算法进行合并和排序后,将request放入对应块设备的reque......【阅读全文】
发布时间: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正是针对这种情况而设计的。
......【阅读全文】