批量上传,套装书可能不全,下单前咨询在线客服! 正版书 !!!
¥ 74.1 5.0折 ¥ 149 全新
库存5件
作者Brendan Gregg(布兰登.格雷格)
出版社电子工业出版社
ISBN9787121267925
出版时间2020-10
装帧平装
开本其他
定价149元
货号29145889
上书时间2024-10-19
前言
有已知的已知;有些事情我们知道自己知道。
我们也知道有已知的未知;这是指我们知道有些事情自己不知道。
但是还有未知的未知——有些事情我们不知道自己不知道。
——美国国防部长 唐纳德拉姆斯菲尔德 2002年2月12日
虽然上述的发言在新闻发布会上引来了记者的笑声,但是它总结出了一个重要的原则,适用于任何如地缘政治般复杂的技术系统:性能问题可能来源于任何地方,包括系统中因你一无所知而不曾检查的地方(未知的未知)。本书将揭示许多这样的领域,并为其分析提供方法和工具。
关于本书
欢迎来到《系统性能:企业与云计算》!本书以操作系统为背景讲解操作系统和应用程序的性能,针对企业环境和云计算环境编写而成。本书的目的是帮助你更好地利用自己的系统。
当你的工作与持续开发的应用程序软件为伍,你可能会认为内核经过几十年的开发调整,操作系统的性能已是一个解决了的问题了,但事情并非如此!操作系统是一个复杂的软件体,管理着各种不断变化的物理设备,应对着不同的新应用程序的工作负载。内核也在持续地发展,不断增加新的特性以提高特定的工作负载的性能,随着系统继续扩展,所遇到的瓶颈被逐一移除。改进操作系统性能需要不断的分析和努力,这样才能带来性能的持续提升。应用程序的性能也可以在操作系统的背景下做分析,此点本书也覆盖了。
操作系统范围
本书的重点就是系统性能的研究,所用的工具、示例,乃至可调的参数都是Linux系统和基于Solaris的系统里的。除非注明,在示例中所用到的操作系统的特定发行版并不重要。基于Linux的系统,示例所含的范围从各种裸机系统到虚拟化的运行着Ubuntu、Fedora或CentOS的云租户。对于基于Solaris的系统,示例也是裸机系统以及基于Joyent SmartOS或OmniTI OmniOS的虚拟化系统。SmartOS和OmniOS用的是开源的illumos内核:这是OpenSolaris内核的一个活跃的分支,所基于的开发版本后来成为了Oracle Solaris 11。
覆盖两种不同的操作系统给每位读者提供了一个新的视角,帮助读者可以更深入地理解这两种系统的特点,尤其是二者设计不同的地方,并且可以帮助读者更全面地理解性能,而不只局限于某个单一的系统,这样读者可以更加客观地思考操作系统。
过去,开发者对基于Solaris的系统做了较多的性能工作,让其成为某些情形下更好的选择。Linux的情况也有了很大的改观。在十多年前的System Performance Tuning [Musumeci 02]出版时,作者同时介绍了Linux和Solaris,但是更侧重后者。作者的理由是:
Solaris机器更多地注重性能。我怀疑这是因为Sun的系统平均来说要比同等的Linux系统贵得多。这带来的结果是,花大价钱的人更倾向于挑剔性能,因此Solaris在这个领域做的工作更多。如果你的Linux机器性能不够好,你可以再买一台并对工作负载做切分——毕竟便宜。如果花了你几百万美金的Ultra Enterprise 10000性能不好,你公司也因此会每时每刻都在承受不小的损失,你会打Sun的服务电话寻求答案。
上面这段解释了Sun注重性能的历史传统:Solaris的利润是与硬件销售绑定的,不少资金频繁地花在性能的提升上。Sun需要,也付得起,雇用超过100名的全职性能工程师(包括我自己和穆苏梅奇(Musumeci Gian))。与Sun的内核工程师团队一起,我们在系统性能领域取得了许多进展。
Linux在性能工作和观测工具这一块走了很长的路。尤其是现在,Linux正在应用到大型的云计算环境之中。本书涵盖了许多Linux的性能特性,这些特性都是在过去五年里开发起来的。
其他内容
示例会包括性能工具的截屏,这样做不仅是为了显示数据,而且是为了对可用的数据类型做阐释。一般来说工具展现数据的方式更为直观,很多UNIX早期风格的工具生成的输出都是相近的,意义常常可以不言自明。这意味着屏幕截图可以很好地传递这些工具的意图,只有某些需要极少的附加说明。(如果一款工具需要费力的说明,这就很可能是一个失败的设计!)
技术的历史演化所展示出的洞察力能深化你的理解,这些都会在书中一一讲到。除此之外,了解一些这个行业的重要人物也是很用的(这个世界很小):你很可能会碰到他们或者接触到他们在性能领域的工作成果。附录G是一张“谁是谁”的清单。
什么未提及
本书着眼于性能。如果你要执行所有的示例任务,有时可能需要做些系统管理员的工作,包括软件的安装或编译(这些本书没有提及)。尤其是在Linux上,你需要安装sysstat软件包,还有很多书中用到的工具也有同样的要求。
书中关于操作系统内部总结的内容会在单独的篇章中有详尽的介绍。对性能分析高阶专题的概述,是为了让你知道这些内容的存在,以便在需要的时候依靠其他的知识来源做进一步的学习。
本书的结构
本书的内容如下。
第1章,绪论。介绍系统性能分析,总结关键的概念并展示了与性能相关的一些例子。
第2章,方法。性能分析和调整的背景知识,包括术语、概念、模型、观测和实验的方法,容量规划,分析,以及统计。
第3章 ,操作系统。总结了内核内部的性能分析。对于解释和理解操作系统行为,这些是必要的背景知识。
第4章,观测工具。介绍系统观测工具的类型,以及构建这些工具所基于的接口和框架。
第5章,应用程序。讨论了应用程序性能的内容,并从操作系统的角度观测应用程序。
第6章,CPU。内容包括处理器、硬件线程、CPU缓存、CPU互联,以及内核调度。
第7章,内存。虚拟内存、换页、swapping、内存架构、总线、地址空间和内存分配器。
第8章,文件系统。文件系统I/O性能,包括涉及的不同缓存。
第9章,磁盘。内容包括存储设备、磁盘I/O工作负载、存储控制器、RAID,以及内核I/O子系统。
第10章,网络。 网络协议、套接字、接口,以及物理连接。
第11章,云计算。介绍广泛应用于云计算的操作系统级和硬件级虚拟化方法,以及这些方法的性能开销、隔离和观测特征。
第12章,基准测试。介绍如何精确地做基准测试,如何解读别人的基准测试结果。这是一个棘手的话题,这一章会告诉你怎样避免常见的错误,并试图理解这一点。
第13章,案例研究。包含一个系统性能的案例研究,讲述了如何从始至终地分析一个真实的云客户案例。
第1~4章提供了必要的背景知识。阅读完这几章后,你可以根据需要参考本书的其余部分。
第13章的写法是不同的,该章用讲故事的方法描绘了性能工程师的工作场景。如果你是性能分析的新手,想先了解个大概,可能会想先读读这一章,当读完其他章的时候还可以再次重温。
作为未来的参考
通过着力于系统性能分析的背景知识与方法,本书的编写经得起推敲。
为了做到这一点,许多章都被分为了两个部分。一部分的内容组成是术语、概念和方法(一般附有标题),这些内容许多年后应该还依然中肯适用。另一部分的内容是前一部分如何实现的示例:架构、分析工具,还有可调参数。这部分内容即便有朝一日淘汰了,作为示例讲解也是依然有用的。
跟踪示例
我们经常需要深入探索操作系统,这项工作要用到内核跟踪工具。有很多这样的工具,它们所针对的开发阶段也各不相同,例如,ftrace、perf、DTrace、SystemTap、LTTng和ktap。其中有一款工具被选择用在了绝大多数的跟踪示例中,并在Linux和基于Solaris的系统上都有演示:它就是DTrace。该工具提供了这些示例所需要的功能,并且关于它还有大量的外部参考资料,包括可以用于高级跟踪的脚本。
你可能需要或愿意选用别的跟踪工具,这很好。DTrace的示例展示的是你能向系统掷出的问题。这些问题以及提出这些问题的方法,常常才是*困难的。
目标受众
本书的目标受众主要是系统管理员以及企业与云计算环境的运维工程师。所有需要了解操作系统和应用程序性能的开发人员、数据库管理员和网站管理员都适合参阅本书。
作为云计算提供商的首席性能工程师,我的工作会与支持人员和顾客打交道,他们经常要承受巨大时间压力去解决多个性能问题。对于许多人来说,性能并不是他们的主要工作,但却需要了解足够多的性能知识来解决手头的问题。因为清楚读者学习本书的时间会非常有限,我将本书编写得尽可能简洁。但不会简短:有太多知识需要覆盖才能保证你是准备好了的。
另一个受众群体是学生:本书适合作为系统性能课程的补充教材。在本书的编写期间(以及开始动笔的多年以前)我就曾经教授过这样的课程,并帮助学生解决仿真的性能问题(事前不会公布答案!)。这段经历帮我弄清了什么样的材料能**地引导学生解决性能问题,这也成就了本书的部分内容。
无论你是不是学生,每章的习题都会带给你一个审视和应用知识的机会。其中有一些可选的高阶练习,可能你完成不了(也许做不到,但至少可以启发思维)。
本书涵盖了足够的知识细节,无论是大公司还是小公司,乃至雇用了不少性能专职人员的公司,本书都可以满足其需要。对于众多的小型公司,日常用到的可能只是书中的某些部分,但本书作为参考也可备不时之需。
致谢
Deirdré Straughan再次提供了不可思议的帮助,使我对技术教育的热忱得以延伸至另一本书。从想法到手稿,从*开始就帮助我构想这本书是什么样子,到花费了无数的时间编辑和讨论每一页的内容,找出了许多我没有解释清楚的部分。至今我和她已经合作了超过了2000页的技术内容(加上博客),能得到如此大的帮助我深感荣幸。
Barbara Wood作为拷贝编辑,花了大量的时间在本书的细节上,做了无数的修改,文字才有了现在的质量、可读性和连贯性。考虑到本书的长度和复杂性,这项工作绝不简单,我非常感谢Barbara的帮助和他辛勤的工作
大型网络、云计算、大数据和虚拟计算机系统的快速部署已经为性能优化带来了新的挑战。本书为此提供了解决方案。国际知名的性能优化专家Brendan Gregg汇集了*的技术和工具来分析调优大型网络或云计算的环境。本书的内容包括现代化的性能分析和容量规划;与云计算相关的新性能和可靠性挑战;方法、概念、术语、工具和指标;负载与结构问题的权衡;调整操作系统、CPU、内存、文件系统、磁盘、网络和总线;调整虚拟系统;性能相关的编程语言问题,对C、 C 、 Java和node.js编写的应用程序分析。
Brendan Gregg 是Joyent公司的首席性能工程师,负责分析云计算环境的性能和扩展,覆盖从小型到大型的云计算环境和软件栈的所有级别。他是DTrace一书的主作者(Prentice Hall出版社,2011年),是Solaris Performance and Tools一书的合著者(Prentice Hall出版社,2007年),撰写了许多与系统性能相关的文章。他之前是Sun Microsystems公司的性能主管和内核工程师,同时也是性能顾问兼培训师。是他开发了DTraceToolkit 和 ZFS L2ARC,他所开发的许多DTrace脚本都收录在Mac OS X和Oracle Solaris 11的默认发行版中。性能的可视化是他近从事的工作之一。
徐章宁,1984年生,就读于上海交通大学,硕士毕业后就职于EMC中国卓越研发集团,现任EMC公司高级系统管理工程师,从事软件运维工作多年,钟爱开源软件。对各类知识有广泛兴趣,平日喜爱参与问答网站讨论,热爱读书摄影和写作。
目录
第1章 绪论 1
1.1 系统性能 1
1.2 人员 2
1.3 事情 3
1.4 视角 4
1.5 性能是充满挑战的 4
1.5.1 性能是主观的 4
1.5.2 系统是复杂的 5
1.5.3 可能有多个问题并存 6
1.6 延时 6
1.7 动态跟踪 7
1.8 云计算 8
1.9 案例研究 8
1.9.1 缓慢的磁盘 9
1.9.2 软件变更 10
1.9.3 更多阅读 12
第2章 方法 13
2.1 术语 14
2.2 模型 14
2.2.1 受测系统 15
2.2.2 排队系统 15
2.3 概念 16
2.3.1 延时 16
2.3.2 时间量级 17
2.3.3 权衡三角 18
2.3.4 调整的影响 19
2.3.5 合适的层级 19
2.3.6 性能建议的时间点 20
2.3.7 负载vs.架构 20
2.3.8 扩展性 21
2.3.9 已知的未知 22
2.3.10 指标 23
2.3.11 使用率 24
2.3.12 饱和度 25
2.3.13 剖析 26
2.3.14 缓存 26
2.4 视角 28
2.4.1 资源分析 28
2.4.2 工作负载分析 29
2.5 方法 30
2.5.1 街灯反方法 31
2.5.2 随机变动反方法 32
2.5.3 责怪他人反方法 32
2.5.4 ad hoc核对清单法 33
2.5.5 问题陈述法 33
2.5.6 科学法 34
2.5.7 诊断循环 35
2.5.8 工具法 35
2.5.9 USE方法 36
2.5.10 工作负载特征归纳 42
2.5.11 向下挖掘分析 43
2.5.12 延时分析 44
2.5.13 R方法 45
2.5.14 事件跟踪 45
2.5.15 基础线统计 47
2.5.16 静态性能调整 47
2.5.17 缓存调优 47
2.5.18 微基准测试 48
2.6 建模 49
2.6.1 企业vs.云 49
2.6.2 可视化识别 49
2.6.3 Amdahl扩展定律 51
2.6.4 通用扩展定律 52
2.6.5 排队理论 52
2.7 容量规划 56
2.7.1 资源极限 56
2.7.2 因素分析 58
2.7.3 扩展方案 58
2.8 统计 59
2.8.1 量化性能 59
2.8.2 平均值 60
2.8.3 标准方差、百分位数、中位数 61
2.8.4 变异系数 62
2.8.5 多重模态分布 62
2.8.6 异常值 63
2.9 监视 63
2.9.1 基于时间的规律 63
2.9.2 监测产品 65
2.9.3 启动以来的信息统计 65
2.10 可视化 65
2.10.1 线图 65
2.10.2 散点图 66
2.10.3 热图 67
2.10.4 表面图 68
2.10.5 可视化工具 69
2.11 练习 70
2.12 参考 70
第3章 操作系统 72
3.1 术语 72
3.2 背景 73
3.2.1 内核 73
3.2.2 栈 76
3.2.2 中断和中断线程 77
3.2.4 中断优先级 78
3.2.5 进程 78
3.2.6 系统调用 80
3.2.7 虚拟内存 82
3.2.8 内存管理 82
3.2.9 调度器 83
3.2.10 文件系统 84
3.2.11 缓存 86
3.2.12 网络 87
3.2.13 设备驱动 87
3.2.14 多处理器 87
3.2.15 抢占 88
3.2.16 资源管理 88
3.2.17 观测性 89
3.3 内核 89
3.3.1 UNIX 90
3.3.2 基于Solaris 90
3.3.3 基于Linux 93
3.3.4 差异 95
3.4 练习 96
3.5 参考 96
第4章 观测工具 98
4.1 工具类型 98
4.1.1 计数器 99
4.1.2 跟踪 100
4.1.3 剖析 101
4.1.4 监视(sar) 102
4.2 观测来源 103
4.2.1 /proc 103
4.2.2 /sys 108
4.2.3 kstat 109
4.2.4 延时核算 111
4.2.5 微状态核算 112
4.2.6 其他的观测源 112
4.3 DTrace 114
4.3.1 静态和动态跟踪 115
4.3.2 探针 116
4.3.3 provider 116
4.3.4 参数 117
4.3.5 D语言 117
4.3.6 内置变量 118
4.3.7 action 118
4.3.8 变量类型 119
4.3.9 单行命令 121
4.3.10 脚本 121
4.3.11 开销 122
4.3.12 文档和资源 123
4.4 SystemTap 124
4.4.1 探针 124
4.4.2 tapset 125
4.4.3 action和内置变量 125
4.4.4 示例 125
4.4.5 开销 127
4.4.6 文档和资源 128
4.5 perf 128
4.6 观测工具的观测 129
4.7 练习 130
4.8 参考 130
第5章 应用程序 131
5.1 应用程序基础 131
5.1.1 目标 132
5.1.2 常见情况的优化 133
5.1.3 观测性 134
5.1.4 大O标记法 134
5.2 应用程序性能技术 135
5.2.1 选择I/O尺寸 135
5.2.2 缓存 136
5.2.3 缓冲区 136
5.2.4 轮询 136
5.2.5 并发和并行 137
5.2.6 非阻塞I/O 139
5.2.7 处理器绑定 139
5.3 编程语言 140
5.3.1 编译语言 140
5.3.2 解释语言 141
5.3.3 虚拟机 142
5.3.4 垃圾回收 142
5.4 方法和分析 143
5.4.1 线程状态分析 143
5.4.2 CPU剖析 146
5.4.3 系统调用分析 148
5.4.4 I/O剖析 154
5.4.5 工作负载特征归纳 155
5.4.6 USE方法 155
5.4.7 向下挖掘法 156
5.4.8 锁分析 156
5.4.9 静态性能调优 159
5.5 练习 160
5.6 参考 161
第6章 CPU 162
6.1 术语 163
6.2 模型 163
6.2.1 CPU架构 163
6.2.2 CPU内存缓存 164
6.2.3 CPU运行队列 165
6.3 概念 165
6.3.1 时钟频率 165
6.3.2 指令 166
6.3.3 指令流水线 166
6.3.4 指令宽度 167
6.3.5 CPI,IPC 167
6.3.6 使用率 167
6.3.7 用户时间/内核时间 168
6.3.8 饱和度 168
6.3.9 抢占 168
6.3.10 优先级反转 169
6.3.11 多进程,多线程 169
6.3.12 字长 170
6.3.13 编译器优化 171
6.4 架构 171
6.4.1 硬件 171
6.4.2 软件 179
6.5 方法 184
6.5.1 工具法 184
6.5.2 USE方法 185
6.5.3 负载特征归纳 186
6.5.4 剖析 187
6.5.5 周期分析 188
6.5.6 性能监控 189
6.5.7 静态性能调优 189
6.5.8 优先级调优 189
6.5.9 资源控制 190
6.5.10 CPU绑定 190
6.5.11 微型基准测试 191
6.5.12 扩展 191
6.6 分析 192
6.6.1 uptime 192
6.6.2 vmstat 194
6.6.3 mpstat 195
6.6.4 sar 197
6.6.5 ps 198
6.6.6 top 199
6.6.7 prstat 200
6.6.8 pidstat 201
6.6.9 time和ptime 202
6.6.10 DTrace 203
6.5.11 SystemTap 209
6.6.12 perf 209
6.6.13 cpustat 215
6.6.14 其他工具 216
6.6.15 可视化 216
6.7 实验 219
6.7.1 Ad Hoc 219 <
— 没有更多了 —
以下为对购买帮助不大的评价