Linux内核精髓
2013-3-1
机械工业出版社华章公司
Munehiro IKEDA,Naohiro Ooiwa,Hiroshi Shimamoto,Akio Takebe,Masami Hiramatsu
杨婷
无
内核是操作系统的核心,操作系统的基本功能都是由内核提供的。文件生成和数据包传输等也是通过内核的功能实现的。但这些都不是简单的任务。平时可能意识不到,但这其中确实包含了很多先进技术。例如,在文件系统方面,配置文件时尽量减少磁盘扫描,在网络方面,由于路由表的入口数量庞大,因此设计时尽量保证对系统整体影响较小的设计。在内存管理、进程管理方面也作出了很多努力。解读这种先进技术也是内核构建的魅力之一。然而,最近的Linux所提供的并不只有基本功能。随着功能的不断发展,现在已经出现了很多特定领域的便捷功能和独特功能。即使是内核黑客也很少有人能够完全掌握。本书从Linux内核的众多先进功能中选取了一些必备并且有趣的内容进行介绍,同时也对内部的运行机制和结构进行了阐述。此外,本书还介绍了熟练使用这些功能所需的工具、设置方法以及调整方法等。省电就是其中一项内容。除了使用方法以外,本书还介绍了省电的理念、与硬件的关系等。此外,还提到了当前广受关注的虚拟化、资源管理、标准文件系统中所采用的ext4等已有功能和新功能。对于已有功能,本书结合最新的源码,介绍它的更改内容和新增功能。其中也包括文档中没有记载,且必须对内核内部有一定理解才能得知的信息,因此,即使是比较了解这个功能的人也可能会有新的发现。另外,本书还介绍了内核的相关工具,其中gcore在重要的系统中就是非常可靠的工具。最新的Linux内核中安装了强大的追踪、概要分析功能,具备很多方便实用的功能。这些功能不仅能够很方便地达到预期的目的,而且对于分析内核功能也非常有用。甚至对于内核构建的高手也有一定帮助。全书列举了非常多的实例,让读者更快地学会如何使用。对于想要熟练使用内核的读者来说,本书也是非常好的参考书。本书还为想要了解Linux内核的读者以及读过本书后开始对Linux内核开发产生兴趣的读者,介绍了获取内核源码的方法和内核开发方法等内核构建入门所需的信息。我们希望读者能够通过本书更加了解Linux的世界。在电脑刚刚诞生的时候,有一段时期人们认为“如果想要提高编程水平就查看UNIX代码”。因为最快的方式就是参考天才所编写的最先进的代码并进行模仿。而在阅读Linux内核的代码时,相信大家也会深有同感。Linux内核是开源软件,无论是谁都可以参与开发。Linux内核的代码花费了大量的时间和精力来编写。各领域都由具有专业知识的维护人员进行长期的管理,从而得到不断的改进。基于电子邮件的开发也在不断进行,因此可以看到各种讨论,并了解到当前代码的发展历程。每次看到Linux内核的代码,都会让人感叹其中凝聚的智慧和努力,也感受到当时的辛苦。希望读者能够从本书开始接触Linux这个不一般的世界,诞生更多的内核高手。本书主要内容本书介绍的是Linux内核所提供的功能。不仅有比较基础的功能,还有一些功能需要具有一定的知识才能使用。此外,还介绍了使用功能时需要用到的信息和命令。除了内核以外,本书还将介绍相关的应用程序。基本上是基于TUI进行说明的,但也有一部分关于GUI的介绍。涉及的主要版本为Linux内核2.6.18到写作时最新的Linux内核3.0注1。其中一部分还介绍了Red Hat Enterprise Linux 4(RHEL4:基于Linux内核2.6.9)的功能。示例代码已经在工作中经常使用的RHEL和任何用户都可以使用的Fedora、CentOS等中进行过严格测试。本书不涉及Linux内核的实际安装和以算法等为主体的内容。本书使用方法本书可以按顺序依次阅读,另外由于每一节之间都是独立的,因此也可以从感兴趣的章节开始阅读。第1章介绍了内核的基础知识,如果是第一次接触内核,建议先学习第1章。本书在介绍已有功能时也加入了一些新的信息。相信即使是经验丰富的人也可以在本书中有新的发现,因此希望各位读者能够将本书从头到尾完整读一遍。本书还收录了一些作者珍藏的信息。详细内容请参见参考文献。
经过近20年的发展,Linux操作系统已经成为当今最成功的开源软件之一,使用广泛,影响深远。随着Linux操作系统功能的不断丰富和完善,Linux内核的源代码也从最初的几万行增加到如今的数百万行,庞大无比,对于Linux内核的研究者和开发者而言,要系统研究Linux内核绝非易事。鉴于此,本书选取了Linux内核的资源管理(CPU、内存、进程等)、文件系统、网络、虚拟化、省电、调试、概要分析、追踪、内核调整等核心主题进行了深入剖析和讲解,总结出了75个能使读者深刻理解Linux内核精髓的技巧和最佳实践。
作者:(日本)高桥浩和 等 译者:杨婷高桥 浩和(Hirokazu Takahashi)毕业于北海道大学电子工学系。从VAX全盛时代开始致力于各种UNIX系列操作系统的功能强化和内核调整,以及大规模系统的实时操作系统的设计等。以ISP的服务器构建为契机,开始正式研究Linux。作者简介池田 宗广(Munehiro IKEDA)大学时代,亲眼看到X68000的gcc生成比主流编译器还要快好几倍的代码,因此开始确信免费软件/开源软件的可能性。此后,在历经咖啡店店员、生产技术人员、硬件工程师后,终于开始从事Linux内核开发。这个行业最吸引人的就是能够跨公司甚至跨国界与世界最优秀的技术人员进行交流。现居住在美国,爱好音乐演奏,当过鼓手,也当过主唱,最近几年一直在弹贝斯。不管是作为技术人员还是贝斯手都喜欢做幕后工作,只不过天生就不喜欢半途而废。大岩 尚宏(Naohiro Ooiwa)任职于Miracle Linux株式会社的软件工程师。大学时研究的是类似手机这样使用天线接收无线高频信号的模拟线路。从事Linux开发工作的时候开始深入研究软件。他是《Debug Hacks》的作者,本书是O扲EILLY JAPAN的第二本Hacks系列图书。岛本 裕志(Hiroshi Shimamoto)软件工程师。负责问题分析和调试。主要工作就是在出现故障时,根据日志和核心转储找出问题所在。因此在工作中会经常用到二进制和CPU运行的知识。同时也在论坛中从事过一些关于x86架构和调度程序的活动。目前关注虚拟化方面的活动。竹部 晶雄(Akio Takebe)在Xen、KVM等与虚拟化相关的开源论坛参与开发活动。主要负责IA64架构、RAS系列和PCI pass through的开发。在开源论坛认识了专门研究省电技术的工程师,从而开始对省电方面产生兴趣。现在正使用Ruby on Rails开发云计算相关软件。平松 雅巳(Masami Hiramatsu)Linux内核追踪的相关维护人员。主要工作是对perf和ftrace的动态事件进行维护。也参与了SystemTap的开发,最近热衷于将系统SystemTap的用途从专门用于追踪扩展到游戏编程等。主要使用的是bash和vim,但是因为bash不能用hjkl移动光标,总的来说属于vim用户。喜欢使用Ubuntu和Fedora。现在的研究方向是ARM Linux、Btrfs等。撰稿人简介畑山 大辅(HATAYAMA Daisuke)crash gcore扩展模块的维护人员。对调试和故障分析感兴趣。最喜欢做的事情就是从元数据对系统进行研究。正在努力练习马拉松长跑,争取在搞技术的同时锻炼出健康的体魄。近期目标是四小时内跑完马拉松。藤田 朗(Akira Fujita)任职于NEC软件东北株式会社。担任软件工程师。大学毕业之后开始转向软件行业。喜欢Linux文件系统(ext3/ext4)。喜欢defrag,爱好五人足球。技术审校者简介刘波,资深Linux内核开发工程师、应用开发工程师和嵌入式开发工程师,现在重庆工商大学计算机科学与信息工程学院担任教师,从事Linux程序开发和Oracle管理方面的教学工作,在读博士。此外,他还专注于大规模机器学习、数值分析与计算、最优化理论(凸优化)的研究。
编者与作者介绍 主编致辞 前言 第1章 内核入门1 HACK#1 如何获取Linux内核1 HACK#2 如何编译Linux内核7 HACK#3 如何编写内核模块18 HACK#4 如何使用Git22 HACK#5 使用checkpatch.pl检查补丁的格式41 HACK#6 使用localmodconfig缩短编译时间44 第2章 资源管理47 HACK#7 Cgroup、Namespace、Linux容器47 HACK#8 调度策略55 HACK#9 RTGroupScheduling与RTThrottling59 HACK#10 FairGroupScheduling62 HACK#11cpuset65 HACK#12 使用MemoryCgroup限制内存使用量68 HACK#13 使用BlockI/O控制器设置I/O优先级74 HACK#14 虚拟存储子系统的调整80 HACK#15 ramzswap85 HACK#16 OOMKiller的运行与结构91 第3章 文件系统98 HACK#17 如何使用ext498 HACK#18 向ext4转换101 HACK#19 ext4的调整104 HACK#20 使用fio进行I/O的基准测试111 HACK#21FUSE118 第4章 网络121 HACK#22 如何控制网络的带宽121 HACK#23 TUN/TAP设备126 HACK#24 网桥设备129 HACK#25 VLAN133 HACK#26 bonding驱动程序136 HACK#27 NetworkDropMonitor141 第5章 虚拟化147 HACK#28 如何使用Xen147 HACK#29 如何使用KVM153 HACK#30 如何不使用DVD安装操作系统159 HACK#31 更改虚拟CPU分配方法,提高性能161 HACK#32 如何使用EPT提高客户端操作系统的性能166 HACK#33 使用IOMMU提高客户端操作系统运行速度173 HACK#34 使用IOMMU+SR—IOV提高客户端操作系统速度183 HACK#35 SR—IOV带宽控制187 HACK#36 使用KSM节约内存189 HACK#37 如何挂载客户端操作系统的磁盘194 HACK#38 从客户端操作系统识别虚拟机环境200 HACK#39 如何调试客户端操作系统205 第6章 省电213 HACK#40 ACPI213 HACK#41 使用ACPI的S状态224 HACK#42 使用CPU省电(C、P状态)226 HACK#43 PCI设备的热插拔236 HACK#44 虚拟环境下的省电240 HACK#45 远程管理机器的电源246 HACK#46 USB的电力管理251 HACK#47 显示器的省电254 HACK#48 通过网络设备节省电能260 HACK#49 关闭键盘的LED来省电263 HACK#50 PowerTOP269 HACK#51 硬盘的省电276 第7章 调试282 HACK#52 SysRq键282 HACK#53 使用diskdump提取内核崩溃转储288 HACK#54 使用Kdump提取内核崩溃转储293 HACK#55 崩溃测试297 HACK#56 IPMI看门狗计时器299 HACK#57 NMI看门狗计时器305 HACK#58 softlockup307 HACK#59 crash命令312 HACK#60 核心转储过滤器326 HACK#61 生成用户模式进程的进程核心转储329 HACK#62 使用lockdep查找系统的死锁335 HACK#63 检测内核的内存泄漏341 第8章 概要分析与追踪346 HACK#64 使用perftools的概要分析(1)346 HACK#65 使用perftools的概要分析(2)349 HACK#66 进行内核或进程的各种概要分析353 HACK#67 追踪内核的函数调用360 HACK#68 ftrace的插件追踪器366 HACK#69 记录内核的运行事件371 HACK#70 使用trace—cmd的内核追踪378 HACK#71 将动态追踪事件添加到内核中382 HACK#72 使用SystemTap进行内核追踪388 HACK#73 使用SystemTap编写对话型程序394 HACK#74 SystemTap脚本的重复利用399 HACK#75 运用SystemTap402
版权页: 插图: 如果没有对手头的源码树代码作出任何修改,该命令会使得手头的源码树与Linus树的最新状态保持一致。当使用git clone进行复制时,git命令会记住复制源目录的URL,因此执行git pull时不需要指定URL。 使用git命令还可以获取除Linus树以外的开发树的最新版本。如果希望开发或者追踪各领域最新开发情况,也可以从这里找到开发树的URL。 如何获取发布版内核 在多数情况下,发布版内核的源代码都是按照各发布版所采用的方法进行打包的。因此要获取发布版内核的源代码,只需要下载源代码包,进行安装或解压缩就可以了。 下面选取具有代表性的发布版Fedora和Ubuntu为例,讲解如何获取这两种发布版内核源代码。这里选取的发布版的版本分别为Fedora 14和Ubuntu 10.10。 Fedora 在Fedora中,内核源码是作为源码RPM(SRPM)提供的。使用yum—units包里所带的yumdownloader下载SRPM。此后要使用的yum—builddep也是yum—units包中所带的,所以如果事先没有安装,首先请安装这个工具包。 可以执行下列命令来下载内核的SRPM。 在笔者的环境下,下载的是kernel—2.6.35.11—83.fc14.src.rpm。 如前文所述,发布版内核都带有自身特有的补丁。SRPM是将vanilla内核的源代码和补丁分开放置的,补丁在创建过程中被分配给vanilla内核的源代码。所以要获取发布版内核的源代码,就要完全执行RPM的创建过程,但并不完全执行。虽然每个SRPM在创建RPM时都需要用到不同的源码包,但只要执行下列命令,就能够安装创建Linux内核所需的所有源码包。这条命令请在root权限下执行。
一线内核技术专家经验和智慧结晶,深刻解读Linux内核的资源管理、文件系统、网络、虚拟化、省电技术、调试、性能调优、分析与追踪等核心主题
无
1、着本身不适合研究linux内核源码的初学者看的2、日本人写的书挺具体,不过翻译也不错。
不常用,希望对Linux有更多的了解
不是很系统,不适合kernel入门学习
讲了linux内核里面很多基础知识,适合慢慢消化,边看书,边上网查资料能达到更好的效果
内容还不错,初学者看看不错
日本人写的技术书的精神,值得国人学习
不是系统讲述, 而是一个一个小问题点的讲述。 平常翻翻挺好的!