
作者:(美)布兰登·格雷格
页数:860
出版社:电子工业出版社
出版日期:2023
ISBN:9787121450945
电子书格式:pdf/epub/txt
内容简介
本书着力讲述 Linux 的性能,但所论述的性能问题适用于所有的操作系统。你将了解到系统是如何工作与执行的,还将学习到如何分析和改进系统及应用程序性能的方法。本书对第 1 版的内容做了大量的更新,这些更新包括但不限于 :近年来 Linux 内核各方面的变化对于资源性能的影响;云计算架构的主流演进方向;动态跟踪工具的新星(BPF 及其前后端技术);常见性能工具的使用方法的变化等。需要说明的是,在第 1 版中进行性能分析所用到的术语、概念和方法,在第 2 版中几乎没有变化,依然中肯适用,经得起时间的检验。
作者简介
布兰登·格雷格是计算性能和云计算方面的行业专家。他是Netflix的高级性能架构师,从事性能设计、评估、分析和调优工作。他是多本技术图书的作者,包括《BPF之巅:洞悉Linux系统和应用性能》。他曾获得USENIX LISA系统管理的杰出成就奖,还曾担任内核工程师和性能负责人,并且是USENIX LISA 2018会议的项目联合主席。他开发了收录在多个操作系统中的性能工具,还开发了包括火焰图在内的用于性能分析的可视化工具和方法。
布兰登·格雷格是计算性能和云计算方面的行业专家。他是Netflix的高级性能架构师,从事性能设计、评估、分析和调优工作。他是多本技术图书的作者,包括《BPF之巅:洞悉Linux系统和应用性能》。他曾获得USENIX LISA系统管理的杰出成就奖,还曾担任内核工程师和性能负责人,并且是USENIX LISA 2018会议的项目联合主席。他开发了收录在多个操作系统中的性能工具,还开发了包括火焰图在内的用于性能分析的可视化工具和方法。
本书特色
领域旗舰大师专著重磅新版||IT各岗位案头标配||一千页鸿篇覆盖方方面面||大火热点技术BPF之神Greeg性能之巅:洞悉系统、企业与云计算(第2版)(英文版)介绍了操作系统和应用程序的概念、策略、工具和调优,并用基于Linux的操作系统作为主要示例。对这些工具和技术的深刻理解对于今天的开发者来说至关重要,这个新版本针对这些工具和技术做了全面的修订和更新。实施本书中讲述的策略能够让最终用户有更好的体验并让运维成本更低,对于按操作系统实例收费的云计算环境尤为如此。
性能测量的水相当深,斯坦福大学的 John Ousterhout 教授在“Always Measure One Level Deeper”一文(《ACM 通讯》杂志,2018 年第 7 期)中提到,在他亲历的几十次系统性能评估中,没有哪次的首批测量结果是正确的,都是先掉进坑里,再慢慢爬出来。就拿文件 I/O 来说,你测得的是真实的磁盘性能,还是操作系统中文件系统的性能?存储是分级的。操作系统有页缓存,高档的磁盘控制器(阵列卡)有带电池备份的写缓存,机械硬盘上有高速缓存,混合型机械硬盘带有 SSD 缓存,消费级 TLC SSD 上带有 SLC 缓存。文件 I/O 的性能主要取决于读写操作击中的是哪一级缓存,而缓存颠簸(thrashing)是系统过载时造成性能急剧下降的重要因素。如今的计算机系统极度复杂,性能优劣往往违反直觉。不少人可能先入为主地认为mmap() 比 read()/write() 读写文件更快,因为前者减少了系统调用和内存拷贝。这听上去很有道理,也正是 20 世纪 80 年代 UNIX 引入 mmap() 的理由。但是卡内基梅隆大学的 Andrew Crotty 等人本书作者 Brendan Gregg 是全球知名的实战派性能专家,他发明的火焰图是分析CPU 开销的有力工具,如今已是我们日常性能分析的标配。这本书是他多年工作经验的总结,既有理论深度,又有丰富案例,在同类图书中是较为全面深入的,非常值得深入阅读。这个新版本我会第一时间购买,常备案头,随时查阅。
——陈硕 《Linux 多线程服务端编程 :使用 muduo C++ 网络库》作者Gregg 在 Netflix 积累了丰富的云计算环境下的性能优化的经验后又加入 Intel,按他的说法,“将为从应用程序到硅的所有领域开发新的性能和调试技术。这将跨越所有xPU(CPU、GPU、IPU 等),并对世界产生巨大影响”。本书可作为大家入门性能优化的起点,以此为基础,一方面深入操作系统内核,另一方面广泛积累应用程序的优化经验,最后再回归到硬件,你将走入一个更广泛的世界。
——陈莉君 西安邮电大学教授作为高性能计算和云计算系统的设计、开发和运维人员,任何时候讨论性能优化总是一个充满挑战却令人期望的事情。你似乎永远无法知道所设计的系统架构、调度策略和数据结构是否能达到最理想的状态,但经过各种不断尝试后因取得的性能提升而获得的满足感却是如此让人陶醉。本书从性能分析和调优的基础概念和方法入手,沿着操作系统内核、应用、CPU、内存、文件系统、磁盘、网络、云计算系统以及调优工具的线索,展开一幅计算机系统性能优化的全栈式画卷,向读者介绍影响计算机系统性能的关键因素,以及深入理解如何动手去解决这些性能瓶颈。作为国家超级计算中心的总工程师,让高性能计算机系统在运行时任务执行最快、用户在队列的等待时间最短、系统平均无故障时间越长,是我追求的永恒目标。我所带领的运维与系统开发团队一直在为提高我国超级计算的系统性能努力,这本书让我有推荐给我们运维团队每一个成员的强烈冲动。毫无疑问,本书的内容将有助于我们深入理解系统性能背后的知识,建立完整的“系统观”。同时我还要将本书推荐给我的研究生们,值得每一位立志做体系结构研究的学生将其作为入门教材,在动手进行高性能系统和云计算系统优化研究前,对何为性能优化有一个全面完整的认识,有助于他们在研究过程中将问题考虑得更全面。最后我要把这本书推荐给所有从事高性能计算与云计算领域的从业者,无论你是资深架构师还是运维人员,相信我,本书对你重新思考系统设计、性能优化将会起到很大的作用,值得一读。
——唐卓 国家超级计算长沙中心总工程师、湖南大学教授作为一名讲授操作系统课程的教师,性能一直是课堂中很难的主题,因为你永远不知道什么样的性能问题在等着你。就在几天前,我在部署一批机器时排查了一台机器的性能问题,最终发现竟然是 USB 接口发生了短路(一个真正的物理 bug),导致kworker/0:0+pm 一直处于活动的状态!正是本能地使用了 Linux 的 perf 工具(本书在第13 章中详细介绍)帮助我瞬间定位到 xhci 相关的代码,将性能问题指向了 USB 子系统。在暴力“拆除”USB 接口后,问题解除。在课堂上,我会和学生谈论“理解性能就是理解程序在时间轴上的执行”,但这谈何容易!我们既想看得清楚,对每条指令执行的踪迹和所属都了如指掌,又不想付出任何代价,因为任何插入程序中的探针都会干扰程序的执行。在系统中的所有组件都成为木桶的短板之后,性能调优更是一项艰苦卓绝,但却对生产系统来说至关重要的任务。
幸运的是,今天我们有了许多成熟的性能分析方法和工具。我找不到任何一份资料可以和 Brendan Gregg 的这本全面、深入的书籍相提并论。Brendan Gregg 作为性能分析领域首屈一指的专家,毫无保留地将其真知灼见和技术细节与读者分享。读完本书,你就有了世界上最先进的性能分析“武器库”,不再惧怕任何系统的性能分析。
——蒋炎岩 南京大学教师当前云计算等复杂场景下的系统性能问题日益严峻,需要专业的方法才能找到瓶颈所在,然后才能有针对性地对其做优化,以让业务高并发地运行。本书从性能分析所需要的内存、文件系统、网络、CPU 等方面进行了详细介绍,并结合丰富的案例将读者快速带入实战状态,作者还总结了一套性能分析的理论和方法,让读者彻底把提高性能的法宝掌握在手中。另外,本书针对如今火到天际的 BPF 前后端技术及相应工具也进行了介绍。本书的作者 Gregg 是国际知名的性能专家,译者在操作系统和性能领域也是身经百战、经验丰富,无论你是系统运维人员、研发工程师,还是性能架构师,通过阅读本书,都能帮你打开解决性能问题的大门。强烈推荐本书!
——毛文安,龙蜥社区系统运维 SIG Maintainer
系统性能问题一直是我们面临的难题之一。本书从系统性能、优化分析到应用程序性能及 CPU、内存、文件系统、磁盘、网络,并结合案例由浅入深地讲述了性能方面的知识。本书的作译者都是性能优化领域的专家,实战经验丰富。本书对系统管理员、运维工程师、研发工程师具有极高的参考价值,阅读本书,收获颇多,力荐!
——田国杰(@JackTian),微信公众号“杰哥的 IT 之旅”作者本书详尽地介绍了企业环境和云计算环境下的性能测试方法与工具,能为读者带来立竿见影的帮助。“无法衡量就无法管理”,本书先对组件性能进行分析与观测,然后在此之上进行改进。书中的方法与思路能够“授人以渔”,引领读者在系统性能领域进行长期思考。优秀的著作离不开译者的付出,本书的译者通过精准的翻译,原汁原味地将这本经典技术著作呈现给大家。无论你是系统管理员、云计算运维人员、技术爱好者,还是立志成为系统性能架构师、专家,这本经典著作都值得力荐给你。
——吕昭波,《云端架构》作者多年前我第一次接触到火焰图这种神奇的性能剖析方法时,Brendan Gregg 令我惊为天人,后来读《性能之巅:洞悉系统、企业与云计算》一书更是受益良多。这次再版,作者补充了近年热门的可观测性、eBPF、Kubenertes 等方面的知识,并将第一版中多处分析方法进一步细化成具体的观测工具指南。高屋建瓴的理论配合深入浅出的落地实践,绝对是广大 IT 工程师的案头第一书籍。
——饶琛琳,日志易产品副总裁,前微博系统架构师分析性能问题需要的技术是很广泛的,操作系统、数据库、网络、语言、存储、架构等方面的知识都需要理解和掌握。而要想具备性能瓶颈分析和定位的能力,掌握操作系统方面的知识是绝对跳不过去的一个环节。本书从性能分析的角度出发来理解操作系统,对广大开发人员梳理性能分析思路有很好的借鉴作用。本书在不同的操作系统模块中提供了实用的分析思路和方法,为应用程序、CPU、内存、网络、文件系统、磁盘等的性能分析提供了对应的工具,同时给出了相应的操作实例,最后还结合一些基准测试工具以及 BPF 工具给出进一步进行系统级性能分析的操作指导。这是一本如果要学习性能分析就必然要看的书。
——高楼,盾山科技 CEO、7DGroup 创始人在计算机技术的发展长河中,性能问题一直是绕不开的话题。现在市面上针对性能测试的图书有很多,但和本书一样面面俱到的,却是凤毛麟角。本书不仅从操作系统、CPU、内存、文件系统、磁盘、网络等方面介绍了计算机性能的基础知识,同时还与时俱进,从云计算等当前热门技术的角度,介绍了如何进行性能优化。除此之外,本书还介绍了性能测试的相关方法论和性能测试工具,具有很高的实用性。本书的作译者都是性能领域的专家,在业内享有极高声望。这本经典的著作,非常适合研发人员、运维人员、测试人员当作性能优化的参考书,力荐!
——臻叔,微信公众号“程序员臻叔”,作者本书采用自下而上的结构,从底层的操作系统、CPU、磁盘等基础元素开始,到从工作原理层面分析性能受到的各种不同影响,以及如何评估、衡量各项性能指标,让读者知其然并知其所以然,在面对实际情况时能够更有针对性地做出判断和决定,而不是机械地、教条地行事。本书还提供了案例,一步步地展示了实际性能问题的排查调优过程。
——林应 淘宝技术部高级技术专家
本书以一种奇妙而到位的方式,把高屋建瓴的视角和脚踏实地的实践结合了起来,对性能这一复杂、微妙甚至有些神秘的话题进行了外科手术般的解析,读来真是让人感觉豁然开朗。全书以罕见的遍历式结构,对软件系统的每一个部件都如庖丁解牛般地加以剖析,几乎涉及业务的每一个细节。然而,对这些细节并非简单罗列,而是每一段论述都与具体的角色和场景紧密结合,取舍之间极见智慧。方法论更不是单说理,而是通过一个又一个的具体实例,逐步地建构起来的,并反复运用于各个部件之上,使读者明白原理普适性的同时也知道怎样举一反三。本书也是难得的 UNIX/Linux 系统管理员和运维工程师的百科全书式参考手册,相对于工作在 Windows 上的同行而言,他们获得的知识更加零碎,甚至在很多场合下不得不求助于网络上的只言片语,并只能通过耗时的、高风险的生产环境实验来取得一手经验数据。
——高博 青年计算机学会论坛(YOCSEF)会员,文津奖得主,《研究之美》译者纵观全书,作者建立了系统性能优化的体系框架,并且骨肉丰满,很明显,他不仅擅长某方面的性能优化,而且是全方位的专家,加之他作为 DTrace(一种可动态检测进程状态的工具)的主要开发者,使得本书的说服力和含金量大增。本书首先提及性能优化的方法论和常见性能检测工具的使用,具体内容更是涉及可能影响 Linux 系统性能的方方面面,从操作系统、应用程序、CPU、内存、文件系统、磁盘到网络,无所不包。在以上这些话题的探讨中,作者的表述方法值得称道—每章都程式化地介绍了术语、模型、概念、架构、方法、分析工具和调优建议等,这对于因长期工作形成一定强迫症的某些技术人员,如我自己,阅读时感到赏心悦目,这也从侧面体现了作者深厚的技术功底和文字驾驭能力。本书提供的性能优化方法论也令人印象深刻,包括几种常见的错误思考方法,如街灯法、随意猜测法和责怪他人法。在列举各种不正确的方法后,作者建议采用科学法,科学法的“套路”是 :描述问题→假设→预测→实验→分析。本书用单独的章节系统性地介绍了操作系统、性能检测方法和各种基准测试,还特别介绍了作者主导开发的 DTrace(在本书的例子中,用 DTrace 监控 SSH 客户端当前执行的每个命令并实时输出),这使得本书作为工具书的价值更得以彰显。云计算的出现,对系统优化带来新的挑战。作者作为某云计算提供商的首席性能工程师,带来了一个真实的云客户案例分析,包括如何利用本书提及的技术、方法和工具,一步一步地分析和解决问题。
——萧田国 触控科技运维总监,高效运维社区创始人学习调优技术有很多挑战,很高兴看到有这样一本关于系统优化的好书被引进到国内。
——张银奎 资深调试专家,《软件调试》和《格蠹汇编》作者本书的作者 Gregg 先生是业内性能优化方面大名鼎鼎的人物,他早年在 Sun 公司的时候是性能主管和内核工程师,也是大名鼎鼎的 DTrace 的开发人员,要知道 DTrace 先后被移植到很多操作系统上。全书都在讨论性能优化,详细介绍了诸如 DTrace、vmstat、mpstat、sar、SystemTap 等工具,如何将这些工具组合并应用在适当的场景中,是一门学问,相信读者会在书中找到答案。顺便说一句,DTrace+SystemTap 帮助 SAE 解决过非常多的性能疑难杂症,一定会对读者的业务分析有所帮助!单个进程的性能分析是简单的,因为我们可以定位到系统调用或者库调用级别,然后对照代码很快就能解决问题,但整个业务的性能分析是复杂的,这里面涉及多个业务单元、庞大的系统组件,随机变动、诊断循环等多种方法,并且介绍了涉及分析的数学建模和概念,详细讨论了操作系统,这对读者是很有用的。因为很多时候我们在不改代码的情况下优化系统,也就是优化内存分配比例,优化 CPU 亲密度,尝试各种调度算法,做操作系统层面的各种网络参数调优等。对于上述所有问题的认识,我相信读者在通读全书后会有不一样的感觉。记住,不要只读一遍,每读一遍都必有不同的体会。不多说了,我要赶紧再去读一遍!
——丛磊 新浪 SAE 创始人 / 总负责人
目录
1.1 系统性能 ……………………………………………………………………………………………… 35
1.2 人员 …………………………………………………………………………………………………….. 36
1.3 活动 …………………………………………………………………………………………………….. 37
1.4 视角 …………………………………………………………………………………………………….. 38
1.5 性能工程是充满挑战的 ………………………………………………………………………… 39
1.5.1 主观性 ………………………………………………………………………………………. 39
1.5.2 复杂性 ………………………………………………………………………………………. 39
1.5.3 多个原因 …………………………………………………………………………………… 40
1.5.4 多个性能问题 ……………………………………………………………………………. 40
1.6 延时 …………………………………………………………………………………………………….. 40
1.7 可观测性 ……………………………………………………………………………………………… 41
1.7.1 计数器、统计数据和指标 ………………………………………………………….. 42
1.7.2 剖析 ………………………………………………………………………………………….. 44
1.7.3 跟踪 ………………………………………………………………………………………….. 45
1.8 实验 …………………………………………………………………………………………………….. 47
1.9 云计算 …………………………………………………………………………………………………. 48
1.10 方法 …………………………………………………………………………………………………… 49
1.10.1 Linux 性能分析 60 秒 ……………………………………………………………….. 49
1.11 案例研究…………………………………………………………………………………………….. 50
1.11.1 缓慢的磁盘 ……………………………………………………………………………… 50
1.11.2 软件变更 …………………………………………………………………………………. 52
1.11.3 更多阅读 …………………………………………………………………………………. 53
1.12 参考资料 ……………………………………………………………………………………………. 53
第2章 方法……………………………………………………………………………………………………55
2.1 术语 …………………………………………………………………………………………………….. 56
2.2 模型 …………………………………………………………………………………………………….. 57
2.2.1 受测系统 …………………………………………………………………………………… 57
2.2.2 排队系统 …………………………………………………………………………………… 57
2.3 概念 …………………………………………………………………………………………………….. 58
2.3.1 延时 ………………………………………………………………………………………….. 58
2.3.2 时间量级 …………………………………………………………………………………… 59
2.3.3 权衡 ………………………………………………………………………………………….. 60
2.3.4 调优的影响 ……………………………………………………………………………….. 61
2.3.5 合适的层级 ……………………………………………………………………………….. 62
2.3.6 何时停止分析 ……………………………………………………………………………. 63
2.3.7 性能推荐的时间点 …………………………………………………………………….. 63
2.3.8 负载与架构 ……………………………………………………………………………….. 64
2.3.9 扩展性 ………………………………………………………………………………………. 65
2.3.10 指标 ………………………………………………………………………………………… 66
2.3.11 使用率 …………………………………………………………………………………….. 67
2.3.12 饱和度 …………………………………………………………………………………….. 68
2.3.13 剖析 ………………………………………………………………………………………… 69
2.3.14 缓存 ………………………………………………………………………………………… 69
2.3.15 已知的未知 ……………………………………………………………………………… 71
2.4 视角 …………………………………………………………………………………………………….. 71
2.4.1 资源分析 …………………………………………………………………………………… 72
2.4.2 工作负载分析 ……………………………………………………………………………. 73
2.5 方法 …………………………………………………………………………………………………….. 74
2.5.1 街灯讹方法 ……………………………………………………………………………….. 76
2.5.2 随机变动讹方法 ………………………………………………………………………… 76
2.5.3 责怪他人讹方法 ………………………………………………………………………… 77
2.5.4 Ad Hoc 核对清单法 ……………………………………………………………………. 77
2.5.5 问题陈述法 ……………………………………………………………………………….. 78
2.5.6 科学法 ………………………………………………………………………………………. 78
2.5.7 诊断循环 …………………………………………………………………………………… 80
2.5.8 工具法 ………………………………………………………………………………………. 80
2.5.9 USE 方法 …………………………………………………………………………………… 81
2.5.10 RED 方法 ………………………………………………………………………………… 87
2.5.11 工作负载特征归纳 …………………………………………………………………… 88
2.5.12 向下钻取分析 ………………………………………………………………………….. 89
2.5.13 延时分析 …………………………………………………………………………………. 90
2.5.14 R 方法 ……………………………………………………………………………………… 91
2.5.15 事件跟踪 …………………………………………………………………………………. 91
2.5.16 基础线统计 ……………………………………………………………………………… 93
2.5.17 静态性能调优 ………………..















