Linux Kernel 随笔
Tonyluzhigang
文件系统,Linux内核专家
展开
-
High Resolution Timer内核高精度时钟
关键数据结构:struct clock_event_device表示一个时钟源,其最重要的两个域是set_next_event()和event_handler()。set_next_event()用来设置下一次时钟中断的触发时间,通常需要操作Timer的硬件寄存器,以及使能Timer中断。event_handler()是Timer中断产生之后,将要执行的函数。static DEFINE_PER原创 2012-09-06 14:41:19 · 1383 阅读 · 0 评论 -
Kernel NOHZ 模式
2.6.17之前,Linux kernel为每个CPU核设置一个周期性的时钟中断。Kernel依赖这个时钟中断来处理一些周期性的事件,例如计算进程时间片、公平调度和处理到期的定时器事件。最早的kernel设置时钟中断的周期为100HZ,也就是每秒钟产生100个时钟中断。随着CPU性能的提高,新的kernel可以设置为250HZ和1000HZ。时钟中断频率越高,调度的时间片越小,系统的实时响应能力越原创 2012-09-06 14:38:04 · 6908 阅读 · 0 评论 -
Linux内核调试Ftrace
Ftrace能帮助系统开发者了解Linux 内核运行的细节,它能帮助分析系统延时和性能问题。 Ftrace顾名思义是function trace,但除此之外,它还能支持其他类型的tracer,例如进程上下文切换,统计一个高优先级的进程从唤醒到实际执行的时间,中断被屏蔽的时间等等。Ftrace用debug文件系统来存储它的配置文件和输出文件。如果debug文件系统配置进了kernel,目录“/s原创 2012-09-25 10:59:21 · 828 阅读 · 0 评论 -
Linux 文件符号连接和硬连接
文件系统有两种类型的连接:硬连接和软连接,软连接也叫符号连接。硬连接,严格来说其实不算连接。一个普通的文件或者目录拥有一个硬连接,文件系统通过这个硬连接来找到这个文件。为一个已经存在的文件p1创建一个硬连接p2的操作为:bash#ln p1 p2这样,文件名p1对应的文件inode,就多了另一个文件名p2指向它。注意,p1和p2是对等的,这里没有创建新的文件inode。原创 2012-09-15 16:29:41 · 523 阅读 · 0 评论 -
Linux内核tracepoints
内核中的每个tracepoint提供一个钩子来调用probe函数。一个tracepoint可以打开或关闭。打开时,probe函数关联到tracepoint;关闭时,probe函数不关联到tracepoint。tracepoint关闭时对kernel产生的影响很小,只是增加了极少的时间开销(一个分支条件判断),极小的空间开销(一条函数调用语句和几个数据结构)。当一个tracepoint打开时,用户提原创 2012-09-17 17:00:57 · 3909 阅读 · 0 评论 -
Linux进程和线程
Linux内核只有进程,没有线程的概念。非要说区别,那就是线程没有自己的单独的地址空间(mm_struct),线程和其父进程共享地址空间。pthread调用fork(..|CLONE_VM|...)来创建新的进程,子进程与父进程共享VM空间。注意,这里实际上是共享mm_struct结构,子进程甚至没有创建自己的mm_struct结构。如果没有指定CLONE_VM属性参数,子进程会创建自己的VM原创 2012-09-19 16:14:06 · 643 阅读 · 0 评论 -
Linux虚拟文件系统(VFS)
Linux VFS是一个介于应用程序和实体文件系统之间的内核抽象层。对用户层,它负责处理所有文件系统相关的系统调用;对内核,它为各种实体文件系统(EXT2/3,XFS,FAT等)提供统一的接口,将实体文件系统的各种信息表示在VFS层。VFS的主要设计思想是用一个统一文件模型(common file modle)来表示各种实体文件系统,每种实体文件系统需要将它的物理组织结构转化为VFS的comm原创 2012-09-15 18:05:51 · 774 阅读 · 0 评论 -
深入alloc_pages
内核所有的内存分配都是通过alloc_pages来实现的。alloc_pages-> __alloc_pages_nodemask-> get_page_from_freelist (__alloc_pages_slowpath)如果get_page_from_freelist失败,则调用__alloc_pages_slowpath更深程度的回收内存再分配。原创 2012-11-30 15:37:11 · 1469 阅读 · 0 评论 -
为什么在Linux中断服务程序中不能睡眠
最近本人在实现TILE CPU架构上的中断子系统,抽出一点时间来仔细研究了下Linux上的中断设计。对内核有所了解的人都知道,在Linux中断ISR中不能睡眠,但是为什么不能睡眠呢?其中一个比较流行的答案就是:中断没有进程上下文,如果睡眠之后,进程调度子系统没法来唤醒它。仔细想想,这个答案其实不然。在X86的实现上,中断发生时会借用当前被中断进程的Kernel stack,所以实际上中断是借宿原创 2013-12-02 11:38:54 · 3222 阅读 · 2 评论