已知的是已知的;我们知道我们所知道的事情。
我们也知道存在已知的未知;也就是说,我们知道有些事情我们不知道。
但也存在未知的未知——
有些事情我们不知道我们不知道。
—美国国防部长唐纳德·拉姆斯菲尔德(Donald Rumsfeld),2002年2月12日
虽然上述声明引起了出席新闻发布会的人们的笑声,但它总结了一个重要原则,这个原则在复杂的技术系统和地缘政治中同样适用:性能问题可能来自任何地方,包括您不知道且因此未检查的系统领域(未知未知)。本书可能会揭示许多这些领域,同时提供分析它们的方法和工具。
About This Book
欢迎来到《系统性能:企业和云端》!本书关注操作系统和应用程序的性能,从操作系统的角度来讲述,并适用于企业和云计算环境。我的目标是帮助您充分发挥系统的潜力。
当与不断开发的应用软件一起工作时,您可能会认为经过数十年开发和调优的操作系统性能问题已经解决了。但事实并非如此!操作系统是一个复杂的软件体系,管理着各种不断变化的物理设备和新的、不同的应用负载。内核也在不断发展,不断添加功能以提高特定工作负载的性能,并且随着系统的扩展,新遇到的瓶颈也在被消除。分析和改进操作系统的性能是一项持续的任务,应该不断取得性能改进。应用程序的性能也可以在操作系统的上下文中进行分析;我将在这里介绍相关内容。
Operating System Coverage
本书的主要重点是系统性能的研究,以Linux和Solaris操作系统为例介绍了工具、示例和可调参数。除非特别说明,操作系统的具体发行版在示例中并不重要。对于基于Linux的系统,示例来自各种裸金属系统和虚拟化云租户,运行的操作系统可以是Ubuntu、Fedora或CentOS。对于基于Solaris的系统,示例同样可以是裸金属系统或虚拟化系统,可以是Joyent SmartOS或OmniTI OmniOS。SmartOS和OmniOS使用的是开源的illumos内核,这是OpenSolaris内核的活跃分支,而OpenSolaris内核本身则基于最终成为Oracle Solaris 11的开发版本。
对于每个读者群体来说,覆盖两种不同的操作系统提供了额外的视角,深入了解它们的特点,特别是在每个操作系统采取不同的设计路径时。这有助于读者更全面地理解性能,而不局限于单一的操作系统,并以更客观的方式思考操作系统。
从历史上看,针对基于Solaris的系统进行了更多的性能工作,使其成为某些示例的更好选择。Linux的情况已经大大改善。当《系统性能调优》[Musumeci 02]撰写时,十多年前,它也同时涉及到Linux和Solaris,但主要是针对后者。作者指出了这样做的原因:
Solaris机器更注重性能。我怀疑这是因为Sun系统的价格平均比Linux的高。因此,人们对性能要求更高,所以在Solaris上做了更多的工作。如果您的Linux机器性能不够好,您可以购买另一台并分担工作负载 - 这很便宜。但是如果您的几百万美元的Ultra Enterprise 10000性能不佳,您的公司由于此而每分钟损失可观的金额,您会联系Sun Service并开始要求答案。
这可以解释Sun历史上对性能的关注:Solaris的利润与硬件销售密切相关,性能改进常常与真实的资金挂钩。Sun需要并且能够雇佣100多名全职性能工程师(包括我和Musumeci在内)。与Sun的内核工程团队一起,我们在系统性能领域取得了许多进展。
Linux在性能工作和可观察性方面已经取得了长足的进步,特别是现在它被广泛应用于大规模的云计算环境中。本书中包含的许多Linux的性能特性是在过去五年内开发的。
Other Content
书中包含了性能工具的示例屏幕截图,不仅显示数据,还用来说明可用的数据类型。这些工具通常以直观的方式呈现数据,许多工具的风格类似于早期的Unix工具,产生的输出是熟悉且常常不言自明的。这意味着屏幕截图可以是传达这些工具目的的有力方式,有些工具只需要很少的额外解释。(如果一个工具需要费力的解释,那可能是设计上的失败!)
技术的历史可以提供有用的见解,深化您的理解,在书中的一些地方已经提到了。了解一些行业中的关键人物也很有用(这是一个小圈子):在性能和其他环境中,你可能会遇到他们或者他们的工作。附录G中提供了一个"名人堂"列表。
What Isn’t Covered
本书着重于性能。要完成所有示例任务,有时需要进行一些系统管理活动,包括安装或编译软件(这里不涉及)。特别是在Linux上,您需要安装sysstat包,因为本文中使用了许多其工具。内容还概述了操作系统的内部结构,这在专门的文本中有更详细的介绍。高级性能分析主题也进行了总结,以便您了解它们的存在,并在需要时从其他来源进行学习。
How This Book Is Structured
本书包括以下内容:
第1章:介绍。介绍系统性能分析,概述关键概念,并提供性能活动的示例。
第2章:方法论。提供性能分析和优化的背景知识,包括术语、概念、模型、观察和实验的方法、容量规划、分析和统计。
第3章:操作系统。总结了面向性能分析师的内核内部机制。这是解释和理解操作系统正在做什么的必要背景知识。
第4章:可观测性工具。介绍了可用的系统可观测性工具的类型,以及它们构建在哪些接口和框架之上。
第5章:应用程序。讨论应用程序性能相关的主题,并从操作系统的角度观察它们。
第6章:CPU。涵盖处理器、核心、硬件线程、CPU缓存、CPU互联和内核调度。
第7章:内存。介绍虚拟内存、分页、交换、内存架构、总线、地址空间和分配器等内容。
第8章:文件系统。介绍文件系统I/O性能,包括涉及的不同缓存。
第9章:磁盘。涵盖存储设备、磁盘I/O工作负载、存储控制器、RAID和内核I/O子系统。
第10章:网络。介绍网络协议、套接字、接口和物理连接等内容。
第11章:云计算。介绍常用于云计算的基于操作系统和硬件的虚拟化方法以及它们的性能开销、隔离性和可观测性特性。
第12章:基准测试。展示如何进行准确的基准测试,以及如何解释他人的基准测试结果。这是一个令人意外棘手的话题,本章将展示如何避免常见错误,并试图理解其含义。
第13章:案例研究。包含一个系统性能案例研究,展示了如何从头到尾分析一个真实的云客户问题。
第1至第4章提供了必要的背景知识。阅读完它们后,您可以根据需要参考本书的其余部分。
第13章的写作方式不同,采用叙事方式来描绘性能工程师的工作更全面的画像。如果您是新手,可能希望先阅读这一章以获得上下文,然后再在阅读其他章节后返回它。
As a Future Reference
本书旨在通过专注于系统性能分析师的背景和方法论,提供多年的价值。
为了支持这一点,许多章节被分成两个部分。第一部分包括术语、概念和方法论(通常带有这些标题),这些内容应该在未来很多年内仍然相关。第二部分提供了第一部分如何实现的示例:架构、分析工具和可调整参数,虽然它们会过时,但在示例的背景下仍然有用。
Tracing Examples
我们经常需要深入探索操作系统,这可以通过内核追踪工具来实现。在不同的开发阶段有许多这样的工具,例如ftrace、perf、DTrace、SystemTap、LTTng和ktap。其中一个工具在大多数追踪示例中被选中,并在基于Linux和Solaris的系统上进行演示:DTrace。它提供了这些示例所需的功能,并且还有大量关于它的外部资料,包括可以作为高级追踪用例参考的脚本。
您可能需要或希望使用不同的追踪工具,这是可以的。DTrace示例是追踪的示例,展示了您可以向系统提出的问题。通常,这些问题和提出这些问题的方法论是最难掌握的部分。
Intended Audience
本书的目标读者主要是企业和云计算环境的系统管理员和运营人员。它也是开发人员、数据库管理员和Web服务器管理员的参考,他们需要了解操作系统和应用程序的性能。
作为一家云计算服务提供商的首席性能工程师,我经常与支持人员和客户合作,他们承受着巨大的时间压力,需要解决多个性能问题。对于许多人来说,性能不是他们的主要工作,他们只需要了解足够多的知识来解决手头的问题。这促使我尽可能地缩短本书的篇幅,因为我知道你学习的时间可能非常有限。但也不会太短:有很多内容需要涵盖,以确保你准备充分。
另一个预期的读者是学生:本书也适用于支持系统性能课程的教材。在撰写本书时(甚至在开始写作前的许多年),我自己开发和教授过这样的课程,其中包括模拟性能问题供学生解决(但没有提前提供答案!)。这帮助我看到哪些类型的材料最适合引导学生解决性能问题,这指导了我选择本书的内容。
无论你是否是学生,章节练习都给了你回顾和应用材料的机会。这些练习包括一些可选的高级练习题(来自审稿人的建议),你不需要解决它们(它们可能是不可能解决的;但至少应该引起思考)。
关于公司规模,本书应包含足够的详细信息,以满足从小型到大型环境,包括拥有数十名专门的性能工作人员的公司。对于许多较小的公司,本书可能只在需要时作为参考资料,每天只使用其中的一部分。
11-02