HACK #1 如何获取Linux内核 本节介绍获取Linux内核源代码的各种方法.“获取内核”这个说法看似简单,其实Linux内核有很多种衍生版本.要找出自己想要的源代码到底是哪一个,必须首先理解各种衍生版本的意义.接下来将简单介绍Linux内核的开发模式,并分析各种衍生版本在其中所处的地位,然后介绍获取这些衍生版本的源代码的方法.内核的种类想要获取正确的Linux内核源代码,首先必须了解Linux内核的开发模式.Linux内核是由多个开发者以分散型的模式进行开发的.这里出现的“分散型”,是指…
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 #16 OOM Killer的运行与结构(1) 本节介绍OOM Killer的运行与结构. Linux中的Out Of Memory(OOM) Killer功能作为确保内存的最终手段,可以在耗尽系统内存或交换区后,向进程发送信号,强制终止该进程. 这个功能即使在无法释放内存的情况下,也能够重复进行确保内存的处理过程,防止系统停滞.还可以找出过度消耗内存的进程.本节将介绍2.6内核的OOM Killer. 确认运行.日志 进行系统验证或负载试验时,有时会出现正在运行中的进程终止或者SSH…
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 #11cpuset 本节介绍控制物理CPU分配的cpuset.cpuset是Linux控制组(Cgroup)之一,其功能是指定特定进程或线程所使用的CPU组.另外,除CPU以外,同样还能指定内存节点的分配.以前的内核具有CPU affinity功能,该功能将线程分配给特定CPU.现在的内核中虽然也有affinity(taskset命令),但推荐使用cpuset.用法使用cpuset前,必须通过内核config启用cpuset功能.CONFIG_CPUSETS=y最近的发布版在标准中就已…
HACK #3 如何编写内核模块 本节将介绍向Linux内核中动态添加功能的结构—内核模块的编写方法.内核模块Linux内核是单内核(monolithic kernel),也就是所有的内核功能都集成在一个内核空间内.但是内核具有模块功能,可以将磁盘驱动程序.文件系统等独立的内核功能制作成模块,并动态添加到内核空间或者删除.内核模块是可以动态添加到Linux内核空间的二进制文件,文件扩展名为ko.内核模块的编写方法大致有两种.一种是将内核源码树带有的功能编写为模块的方法(参考Hack #2),另一…
HACK #2 如何编译Linux内核 本节介绍编译Linux内核的方法.当发现bug而修改源代码或者添加新功能时,就需要对内核进行重新编译,生成二进制映像文件.另外,如果想要使用发布版内核中无效的功能或者驱动程序时,或者相反地,想要删除不需要的功能从而使内核更精简.更快时,或者想使用最新版的上游内核时,也需要对内核进行编译.下面主要介绍对上游内核进行设置.编译以及安装的方法.当使用发布版内核的源码包管理系统来管理内核映像文件时,需要将内核映像文件打包.接下来以两个具有代表性的发布版Fedora…
HACK #21FUSE 本节将介绍使用用户进程的文件系统框架—FUSE.FUSE概要FUSE(Filesystem in Userspace,用户空间文件系统),是用来生成用户空间的一般进程的框架.使用FUSE,就可以以一般应用程序进程的形式生成独特的文件系统,与已有的文件系统同样进行挂载.从Linux 2.6.14开始实际安装FUSE.例如,在最近的Linux发布版中,有一些标准配置用于挂载Windows的文件系统NTFS的ntfs-3g(Ubuntu等).当连接到存在NTFS格式文件系统的…
HACK #20 使用fio进行I/O的基准测试 本节介绍使用fio进行模拟各种情况的I/O基准测试的操作方法.I/O的基准测试中有无数需要考虑的因素.是I/O依次访问还是随机访问?是通过read/write的I/O?还是通过访问mmap的空间的I/O?是单一进程发出的I/O?还是多个进程同时发出的I/O?进程是受I/O限制还是受CPU限制?等等.如果使用fio,就不需要每次都根据不同情况来编写用于性能评估的程序,就可以模拟这些情况的I/O.安装fioFedora.Ubuntu等主流发布版中都备…