1章 内核入门HACK #1 如何获取Linux内核HACK #2 如何编译Linux内核HACK #3 如何编写内核模块HACK #4 如何使用GitHACK #5 使用checkpatch.pl检查补丁的格式HACK #6 使用localmodconfig缩短编译时间 第2章 资源管理HACK #7 Cgroup.Namespace.Linux容器HACK #8 调度策略HACK #9 RT Group Scheduling 与RT ThrottlingHACK #10 Fair Group…
HACK #1 如何获取Linux内核 本节介绍获取Linux内核源代码的各种方法.“获取内核”这个说法看似简单,其实Linux内核有很多种衍生版本.要找出自己想要的源代码到底是哪一个,必须首先理解各种衍生版本的意义.接下来将简单介绍Linux内核的开发模式,并分析各种衍生版本在其中所处的地位,然后介绍获取这些衍生版本的源代码的方法.内核的种类想要获取正确的Linux内核源代码,首先必须了解Linux内核的开发模式.Linux内核是由多个开发者以分散型的模式进行开发的.这里出现的“分散型”,是指…
HACK #21FUSE 本节将介绍使用用户进程的文件系统框架—FUSE.FUSE概要FUSE(Filesystem in Userspace,用户空间文件系统),是用来生成用户空间的一般进程的框架.使用FUSE,就可以以一般应用程序进程的形式生成独特的文件系统,与已有的文件系统同样进行挂载.从Linux 2.6.14开始实际安装FUSE.例如,在最近的Linux发布版中,有一些标准配置用于挂载Windows的文件系统NTFS的ntfs-3g(Ubuntu等).当连接到存在NTFS格式文件系统的…
HACK #15 ramzswap 本节介绍将一部分内存作为交换设备使用的ramzswap.ramzswap是将一部分内存空间作为交换设备使用的基于RAM的块设备.对要换出(swapout)的页面进行压缩后,不是写入磁盘,而是写入内存.可以使用的内存仅为完成压缩的部分.压缩处理使用的是LZO注1.ramzswap是从Linux 2.6.33合并到Staging驱动程序的.Staging驱动程序是指尚未达到某种程度的质量的试验性驱动程序.通过使用ramzswap,运转速度可以比换出到一般磁盘设备时…
HACK #13 使用Block I/O控制器设置I/O优先级 本节介绍使用Block I/O控制器的功能设置I/O优先级的方法.Block I/O控制器可以将任意进程分组,并对该分组设置I/O的优先级.这个功能是在Linux 2.6.33时添加到Linux内核中的.例如,在前台进行一般处理的同时,在后台磁盘备份处理的情况下,如果备份处理频繁地向磁盘进行I/O操作,前台的处理即使有I/O请求,也不能立刻进行I/O处理,结果导致前台处理的性能下降.Block I/O控制器在这种情况下就非常有效.创…
HACK #12 使用Memory Cgroup限制内存使用量 Memory Cgroup是Cgroup的资源限制功能之一,可以控制特定进程可以使用的内存量.Memory CgroupMemory Cgroup是Cgroup(参考Hack #7)之一,用来控制进程所使用的内存(LRU管理的缓存)数量.其用法有很多种,例如,可以用来避免因一时处理较大文件或大量文件,而导致无用的页面缓存增大,内存资源紧张的情况.另外,还可以在多用户环境中限制各用户可以使用的内存量.用法Memory Cgroup是C…
HACK #10 Fair Group Scheduling 本节介绍Cgroup之一.管理CPU资源的Fair Group Scheduling.Fair Group SchedulingFair Group Scheduling是Cgroup的资源管理之一,用来控制Linux内核的进程调度程序进行的CPU时间分配.与其他Cgroup进行的资源管理一样,可以对每个特定进程组进行资源(CPU分配时间)管理.使用这个功能,就可以在分组间对CPU分配时间进行调整.另外,Fair Group Sche…
HACK #8 调度策略 本节介绍Linux的调度策略(scheduling policy).Linux调度策略的类别大致可以分为TSS(Time Sharing System,分时系统)和实时系统这两种.一方面,一般的进程是通过分时运行的.也就是说,使用CPU的时间达到分配给进程的时间(时间片)时,就会切换到其他进程.这种分时运行的调度策略称为TSS.另一方面,在实时制约较严格且要求保证实时的处理中,就需要指定静态的执行优先级,并严格按照执行优先级进行调度.对这种对应答性有要求的进程,可以使用…
HACK #6 使用localmodconfig缩短编译时间 本节介绍使用make localmodconfig生成精简的.config文件,缩短内核编译时间的方法.为了能够应对各种各样的环境,发布版的内核包含很多内核模块.但是在某个特定机器,例如,大家自己平时使用的PC上实际用到的模块只是其中的极小一部分.重新构建内核时,对不使用的模块进行编译就会浪费时间.编译后的模块存放在磁盘里,因此也会造成磁盘空间的浪费.将localmodconfig作为make的目标,就可以生成仅以正在使用的内核模块为…
HACK #7 Cgroup.Namespace.Linux容器 本节将介绍Cgroup与Namespace以及通过这两个功能实现的容器功能.CgroupCgroup(control group)是将任意进程进行分组化管理的Linux内核功能.Cgroup本身是提供将进程进行分组化管理的功能和接口的基础结构,I/O或内存的分配控制等具体的资源管理功能是通过这个功能来实现的.这些具体的资源管理功能称为Cgroup子系统或控制器.Cgroup子系统有控制内存的Memory控制器.控制进程调度的CPU…