网站首页 软件下载 游戏下载 翻译软件 电子书下载 电影下载 电视剧下载 教程攻略
书名 | 性能之巅 洞悉系统、企业与云计算(第2版)(英文版) |
分类 | 教育考试-考试-计算机类 |
作者 | (美)布兰登·格雷格 |
出版社 | 电子工业出版社 |
下载 | ![]() |
简介 | 编辑推荐 性能之巅:洞悉系统、企业与云计算(第2版)(英文版)介绍了操作系统和应用程序的概念、策略、工具和调优,并用基于Linux的操作系统作为主要示例。对这些工具和技术的深刻理解对于今天的开发者来说至关重要,这个新版本针对这些工具和技术做了全面的修订和更新。实施本书中讲述的策略能够让最终用户有更好的体验并让运维成本更低,对于按操作系统实例收费的云计算环境尤为如此。 内容推荐 大型企业服务、云计算和虚拟计算系统都面临着严峻的性能挑战。如今,国际知名的性能专家布兰登·格雷格将业界验证的方法、工具和指标融汇在一起,足以应对复杂环境的性能分析和调优工作。本书着力讲述Liux的性能,但所论述的性能问题适用于所有的操作系统。你将了解到系统是如何工作与执行的,还将学习到分析和改进系统及应用程序性能的方法。本书对第1版的内容做了大量的更新,这些更新包括但不限于:近年来Liux内核各方面的变化对于资源性能的影响;云计算架构的主流演进方向;动态跟踪工具的新星(BPF及其前后端技术);常见性能工具使用方法的变化等。需要说明的是,在第1版中进行性能分析所用到的术语、概念和方法,在第2版中几乎没有变化,依然中肯适用,经得起时间的检验。本书的目标受众主要是系统管理员及企业与云计算环境的运维工程师。所有需要了解操作系统和应用程序性能的开发人员、数据库管理员和网站管理员都适合阅读本书。对于刚接触性能优化的学生等人员,本书还提供了包含格雷格丰富教学经验的练习题。 目录 第1章 绪论 35 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 静态性能调优 93 2.5.18 缓存调优 94 2.5.19 微基准测试 94 2.5.20 性能箴言 95 2.6 建模 96 2.6.1 企业与云 96 2.6.2 可视化识别 96 2.6.3 Amdahl 扩展定律 98 2.6.4 通用扩展定律 99 2.6.5 排队理论 100 2.7 容量规划 103 2.7.1 资源极限 104 2.7.2 因素分析 105 2.7.3 扩展方案 106 2.8 统计 107 2.8.1 量化性能收益 107 2.8.2 平均值 108 2.8.3 标准方差、百分位数、中位数 109 2.8.4 变异系数 110 2.8.5 多重模态分布 110 2.8.6 异常值 111 2.9 监测 111 2.9.1 基于时间的规律 111 2.9.2 监测产品 113 2.9.3 自启动以来的信息统计 113 2.10 可视化 113 2.10.1 线图 114 2.10.2 散点图 115 2.10.3 热图 116 2.10.4 时间线图 117 2.10.5 表面图 118 2.10.6 可视化工具 119 2.11 练习 119 2.12 参考资料 120 第3章 操作系统 123 3.1 术语 124 3.2 背景 125 3.2.1 内核 125 3.2.2 内核态与用户态 127 3.2.3 系统调用 128 3.2.4 中断 130 3.2.5 时钟和空闲 133 3.2.6 进程 133 3.2.7 栈 136 3.2.8 虚拟内存 138 3.2.9 调度器 139 3.2.10 文件系统 140 3.2.11 缓存 142 3.2.12 网络 143 3.2.13 设备驱动 143 3.2.14 多处理器 144 3.2.15 抢占 144 3.2.16 资源管理 144 3.2.17 可观测性 145 3.3 内核 145 3.3.1 UNIX 146 3.3.2 BSD 147 3.3.3 Solaris 148 3.4 Linux 148 3.4.1 Linux 内核开发 149 3.4.2 systemd 154 3.4.3 KPTI(meltdown) 155 3.4.4 eBPF 155 3.5 其他主题 156 3.5.1 PGO 内核 156 3.5.2 unikernel 157 3.5.3 微内核和混合内核 157 3.5.4 分布式操作系统 157 3.6 内核比较 158 3.7 练习 158 3.8 参考资料 159 3.8.1 延伸阅读 161 第4章 观测工具 163 4.1 工具范围 164 4.1.1 静态性能工具 164 4.1.2 危机处理工具 165 4.2 工具类型 167 4.2.1 固定计数器 167 4.2.2 剖析 169 4.2.3 跟踪 170 4.2.4 监测 171 4.3 监测来源 172 4.3.1 /proc 174 4.3.2 /sys 177 4.3.3 延时核算 179 4.3.4 netlink 179 4.3.5 tracepoint 180 4.3.6 kprobes 185 4.3.7 uprobes 187 4.3.8 USDT 189 4.3.9 硬件计数器 190 4.3.10 其他观测源 193 4.4 sar 194 4.4.1 sar(1) 的覆盖范围 195 4.4.2 sar(1) 监测 195 4.4.3 sar(1) 实时报告 199 4.4.4 sar(1) 文档 199 4.5 跟踪工具 200 4.6 观测工具的观测 201 4.7 练习 202 4.8 参考资料 202 第5章 应用程序 205 5.1 应用程序基础 206 5.1.1 目标 207 5.1.2 常见情况的优化 208 5.1.3 可观测性 208 5.1.4 大 O 标记法 209 5.2 应用程序性能技术 210 5.2.1 选择 I/O 尺寸 210 5.2.2 缓存 210 5.2.3 缓冲区 211 5.2.4 轮询 211 5.2.5 并发和并行 211 5.2.6 非阻塞 I/O 215 5.2.7 处理器绑定 215 5.2.8 性能箴言 216 5.3 编程语言 216 5.3.1 编译型语言 217 5.3.2 解释型语言 218 5.3.3 虚拟机 219 5.3.4 垃圾回收 219 5.4 方法 220 5.4.1 CPU 剖析 221 5.4.2 off-CPU 分析 223 5.4.3 系统调用分析 226 5.4.4 USE 方法 227 5.4.5 线程状态分析 227 5.4.6 锁分析 232 5.4.7 静态性能调优 232 5.4.8 分布式跟踪 233 5.5 观测工具 233 5.5.1 perf 234 5.5.2 profifile 237 5.5.3 offcputime 238 5.5.4 strace 239 5.5.5 execsnoop 241 5.5.6 syscount 242 5.5.7 bpftrace 243 5.6 明白了 247 5.6.1 缺少符号 248 5.6.2 缺少栈 249 5.7 练习 250 5.8 参考资料 251 第6章 CPU 253 6.1 术语 254 6.2 模型 255 6.2.1 CPU 架构 255 6.2.2 CPU 内存缓存 255 6.2.3 CPU 运行队列 256 6.3 概念 257 6.3.1 时钟频率 257 6.3.2 指令 257 6.3.3 指令流水线 258 6.3.4 指令宽度 258 6.3.5 指令尺寸 258 6.3.6 SMT 259 6.3.7 IPC 和 CPI 259 6.3.8 使用率 260 6.3.9 用户时间 / 内核时间 260 6.3.10 饱和度 260 6.3.11 抢占 261 6.3.12 优先级反转 261 6.3.13 多进程和多线程 261 6.3.14 字长 263 6.3.15 编译器优化 263 6.4 架构 263 6.4.1 硬件 264 6.4.2 软件 275 6.5 方法 278 6.5.1 工具法 279 6.5.2 USE 方法 279 6.5.3 负载特征归纳 280 6.5.4 剖析 281 6.5.5 周期分析 285 6.5.6 性能监测 285 6.5.7 静态性能调优 286 6.5.8 优先级调优 286 6.5.9 资源控制 287 6.5.10 CPU 绑定 287 6.5.11 微基准测试 287 6.6 观测工具 288 6.6.1 uptime 289 6.6.2 vmstat 292 6.6.3 mpstat 293 6.6.4 sar 294 6.6.5 ps 294 6.6.6 top 295 6.6.7 pidstat 296 6.6.8 time 和 ptime 297 6.6.9 turbostat 298 6.6.10 showboost 299 6.6.11 pmcarch 299 6.6.12 tlbstat 300 6.6.13 perf 301 6.6.14 profifile 311 6.6.15 cpudist 312 6.6.16 runqlat 313 6.6.17 runqlen 314 6.6.18 softirqs 315 6.6.19 hardirqs 316 6.6.20 bpftrace 316 6.6.21 其他工具 319 6.7 可视化 322 6.7.1 使用率热图 322 6.7.2 亚秒级偏移量热图 323 6.7.3 火焰图 323 6.7.4 FlameScope 326 6.8 实验 327 6.8.1 Ad Hoc 327 6.8.2 SysBench 328 6.9 调优 328 6.9.1 编译器选项 329 6.9.2 调度优先级和调度类 329 6.9.3 调度器选项 329 6.9.4 调节调速器 331 6.9.5 能耗状态 331 6.9.6 CPU 绑定 331 6.9.7 独占 CPU 组 332 6.9.8 资源控制 332 6.9.9 安全启动选项 332 6.9.10 处理器选项(BIOS 调优) 333 6.10 练习 333 6.11 参考资料 334 第7章 内存 337 7.1 术语 338 7.2 概念 339 7.2.1 虚拟内存 339 7.2.2 换页 340 7.2.3 按需换页 341 7.2.4 过度提交 342 7.2.5 进程交换 342 7.2.6 文件系统缓存用量 343 7.2.7 使用率和饱和度 343 7.2.8 分配器 343 7.2.9 共享内存 344 7.2.10 工作集大小 344 7.2.11 字长 344 7.3 架构 345 7.3.1 硬件 345 7.3.2 软件 349 7.3.3 进程虚拟地址空间 353 7.4 方法 357 7.4.1 工具法 357 7.4.2 USE 方法 358 7.4.3 描述使用情况 359 7.4.4 周期分析 360 7.4.5 性能监测 360 7.4.6 泄漏检测 360 7.4.7 静态性能调优 361 7.4.8 资源控制 362 7.4.9 微基准测试 362 7.4.10 内存收缩 362 7.5 观测工具 362 7.5.1 vmstat 363 7.5.2 PSI 364 7.5.3 swapon 365 7.5.4 sar 365 7.5.5 slabtop 367 7.5.6 numastat 368 7.5.7 ps 369 7.5.8 top 370 7.5.9 pmap 371 7.5.10 perf 372 7.5.11 drsnoop 376 7.5.12 wss 376 7.5.13 bpftrace 377 7.5.14 其他工具 381 7.6 调优 384 7.6.1 可调参数 384 7.6.2 多种页面大小 386 7.6.3 分配器 387 7.6.4 NUMA 绑定 387 7.6.5 资源控制 387 7.7 练习 388 7.8 参考资料 389 第8章 文件系统 393 8.1 术语 394 8.2 模型 395 8.2.1 文件系统接口 395 8.2.2 文件系统缓存 395 8.2.3 二级缓存 396 8.3 概念 396 8.3.1 文件系统延时 396 8.3.2 缓存 397 8.3.3 随机与顺序 I/O 397 8.3.4 预取 398 8.3.5 预读 399 8.3.6 回写缓存 399 8.3.7 同步写 400 8.3.8 裸 I/O 与直接 I/O 400 8.3.9 非阻塞 I/O 400 8.3.10 内存映射文件 401 8.3.11 元数据 401 8.3.12 逻辑 I/O 与物理 I/O 402 8.3.13 操作并不平等 404 8.3.14 特殊的文件系统 405 8.3.15 访问时间戳 405 8.3.16 容量 405 8.4 架构 406 8.4.1 文件系统 I/O 栈 406 8.4.2 VFS 407 8.4.3 文件系统缓存 407 8.4.4 文件系统特性 409 8.4.5 文件系统种类 411 8.4.6 卷和池 416 8.5 方法 417 8.5.1 磁盘分析 418 8.5.2 延时分析 418 8.5.3 负载特征归纳 420 8.5.4 性能监测 422 8.5.5 静态性能调优 423 8.5.6 缓存调优 423 8.5.7 负载分离 423 8.5.8 微基准测试 424 8.6 观测工具 425 8.6.1 mount 426 8.6.2 free 426 8.6.3 top 427 8.6.4 vmstat 427 8.6.5 sar 427 8.6.6 slabtop 428 8.6.7 strace 429 8.6.8 fatrace 429 8.6.9 LatencyTOP 430 8.6.10 opensnoop 431 8.6.11 fifiletop 432 8.6.12 cachestat 433 8.6.13 ext4dist(xfs、zfs、btrfs、nfs) 433 8.6.14 ext4slower(xfs、zfs、btrfs、nfs) 435 8.6.15 bpftrace 436 8.6.16 其他工具 443 8.6.17 可视化 444 8.7 实验 445 8.7.1 Ad Hoc 445 8.7.2 微基准测试工具 446 8.7.3 缓存刷新 448 8.8 调优 448 8.8.1 应用程序调用 449 8.8.2 ext4 450 8.8.3 ZFS 452 8.9 练习 453 8.10 参考资料 454 第9章 磁盘 457 9.1 术语 458 9.2 模型 459 9.2.1 简单磁盘 459 9.2.2 缓存磁盘 459 9.2.3 控制器 460 9.3 概念 461 9.3.1 测量时间 461 9.3.2 时间尺度 463 9.3.3 缓存 464 9.3.4 随机 I/O 与连续 I/O 464 9.3.5 读 / 写比 465 9.3.6 I/O 大小 466 9.3.7 IOPS 并不平等 466 9.3.8 非数据传输磁盘命令 466 9.3.9 使用率 467 9.3.10 饱和度 468 9.3.11 I/O 等待 468 9.3.12 同步与异步 468 9.3.13 磁盘 I/O 与应用程序 I/O 469 9.4 架构 469 9.4.1 磁盘类型 469 9.4.2 接口 476 9.4.3 存储类型 477 9.4.4 操作系统磁盘 I/O 栈 480 9.5 方法 483 9.5.1 工具法 484 9.5.2 USE 方法 484 9.5.3 性能监测 486 9.5.4 负载特征归纳 486 9.5.5 延时分析 488 9.5.6 静态性能调优 489 9.5.7 缓存调优 490 9.5.8 资源控制 490 9.5.9 微基准测试 490 9.5.10 伸缩 491 9.6 观测工具 492 9.6.1 iostat 493 9.6.2 sar 497 9.6.3 PSI 498 9.6.4 pidstat 498 9.6.5 perf 499 9.6.6 biolatency 502 9.6.7 biosnoop 504 9.6.8 iotop、biotop 506 9.6.9 biostacks 508 9.6.10 blktrace 509 9.6.11 bpftrace 513 9.6.12 MegaCli 518 9.6.13 smartctl 518 9.6.14 SCSI 日志 520 9.6.15 其他工具 521 9.7 可视化 521 9.7.1 折线图 521 9.7.2 延时散点图 522 9.7.3 延时热图 522 9.7.4 偏移量热图 523 9.7.5 使用率热图 524 9.8 实验 524 9.8.1 Ad Hoc 524 9.8.2 自定义负载生成器 525 9.8.3 微基准测试工具 525 9.8.4 随机读示例 525 9.8.5 ioping 526 9.8.6 fifio 527 9.8.7 blkreplay 527 9.9 调优 527 9.9.1 操作系统可调参数 527 9.9.2 磁盘设备可调参数 528 9.9.3 磁盘控制器可调参数 528 9.10 练习 529 9.11 参考资料 530 第10章 网络 533 10.1 术语 534 10.2 模型 535 10.2.1 网络接口 535 10.2.2 控制器 535 10.2.3 协议栈 536 10.3 概念 537 10.3.1 网络和路由 537 10.3.2 协议 538 10.3.3 封装 538 10.3.4 包的大小 538 10.3.5 延时 539 10.3.6 缓冲 541 10.3.7 连接积压队列 541 10.3.8 接口协商 542 10.3.9 避免阻塞 542 10.3.10 使用率 542 10.3.11 本地连接 543 10.4 架构 543 10.4.1 协议 543 10.4.2 硬件 549 10.4.3 软件 551 10.5 方法 558 10.5.1 工具法 559 10.5.2 USE 方法 560 10.5.3 工作负载特征归纳 561 10.5.4 延时分析 562 10.5.5 性能监测 563 10.5.6 数据包嗅探 564 10.5.7 TCP 分析 565 10.5.8 静态性能调优 565 10.5.9 资源控制 566 10.5.10 微基准测试 567 10.6 观测工具 567 10.6.1 ss 568 10.6.2 ip 570 10.6.3 ifconfifig 571 10.6.4 nstat 572 10.6.5 netstat 573 10.6.6 sar 577 10.6.7 nicstat 579 10.6.8 ethtool 580 10.6.9 tcplife 582 10.6.10 tcptop 583 10.6.11 tcpretrans 583 10.6.12 bpftrace 584 10.6.13 tcpdump 592 10.6.14 Wireshark 594 10.6.15 其他工具 594 10.7 实验 596 10.7.1 ping 596 10.7.2 traceroute 597 10.7.3 pathchar 598 10.7.4 iperf 598 10.7.5 netperf 599 10.7.6 tc 600 10.7.7 其他工具 601 10.8 调优 601 10.8.1 系统级可调参数 601 10.8.2 套接字选项 607 10.8.3 配置 608 10.9 练习 608 10.10 参考资料 609 第11章 云计算 613 11.1 背景 614 11.1.1 实例类型 615 11.1.2 可扩展的架构 615 11.1.3 容量规划 616 11.1.4 存储 618 11.1.5 多租户 619 11.1.6 编排(Kubernetes) 620 11.2 硬件虚拟化 621 11.2.1 实现 622 11.2.2 系统开销 623 11.2.3 资源控制 629 11.2.4 可观测性 631 11.3 操作系统虚拟化 639 11.3.1 实现方式 641 11.3.2 系统开销 644 11.3.3 资源控制 647 11.3.4 可观测性 651 11.4 轻量虚拟化 664 11.4.1 实现 665 11.4.2 开销 666 11.4.3 资源控制 666 11.4.4 可观测性 666 11.5 其他类型 668 11.6 比较 668 11.7 练习 670 11.8 参考资料 671 第12章 基准测试 675 12.1 背景 676 12.1.1 原因 676 12.1.2 有效的基准测试 677 12.1.3 基准测试失败 679 12.2 基准测试的类型 685 12.2.1 微基准测试 685 12.2.2 模拟 687 12.2.3 回放 688 12.2.4 行业标准 688 12.3 方法 690 12.3.1 被动基准测试 690 12.3.2 主动基准测试 691 12.3.3 CPU 剖析 694 12.3.4 USE 方法 695 12.3.5 工作负载特征归纳 696 12.3.6 自定义基准测试 696 12.3.7 逐渐增加负载 696 12.3.8 合理性检查 698 12.3.9 统计分析 699 12.3.10 基准测试检查清单 700 12.4 基准测试问题 701 12.5 练习 702 12.6 参考资料 703 第13章 perf 705 13.1 子命令概览 706 13.2 单行命令 708 13.3 perf事件 713 13.4 硬件事件 715 13.4.1 频率采样 716 13.5 软件事件 717 13.6 tracepoint事件 718 13.7 探针事件 719 13.7.1 kprobe 719 13.7.2 uprobe 721 13.7.3 USDT 探针 724 13.8 perf stat 725 13.8.1 选项 726 13.8.2 周期统计信息 727 13.8.3 CPU 均衡 727 13.8.4 事件过滤器 727 13.8.5 隐藏统计信息 728 13.9 perf record 728 13.9.1 选项 729 13.9.2 CPU 剖析 729 13.9.3 栈遍历 730 13.10 perf report 730 13.10.1 TUI 731 13.10.2 STDIO 731 13.11 perf script 732 13.11.1 火焰图 734 13.11.2 跟踪脚本 734 13.12 perf trace 735 13.12.1 内核版本 736 13.13 其他命令 736 13.14 perf文档 737 13.15 参考资料 737 第14章 Ftrace 739 14.1 功能概述 740 14.2 tracefs(/sys) 742 14.2.1 tracefs 的内容 743 14.3 Ftrace函数剖析器 745 14.4 Ftrace函数跟踪 747 14.4.1 使用 trace 747 14.4.2 使用 trace_pipe 749 14.4.3 选项 750 14.5 跟踪点 751 14.5.1 过滤器 751 14.5.2 触发器 752 14.6 kprobes 753 14.6.1 事件跟踪 753 14.6.2 参数 754 14.6.3 返回值 755 14.6.4 过滤器和触发器 755 14.6.5 kprobe 剖析 756 14.7 uprobes 756 14.7.1 事件跟踪 756 14.7.2 参数和返回值 757 14.7.3 过滤器和触发器 757 14.7.4 uprobe 剖析 757 14.8 Ftrace function_graph 758 14.8.1 图表跟踪 758 14.8.2 选项 759 14.9 Ftrace hwlat 760 14.10 Ftrace hist触发器 761 14.10.1 单关键字 761 14.10.2 字段 762 14.10.3 修饰器 763 14.10.4 PID 过滤器 763 14.10.5 多关键字 764 14.10.6 栈踪迹关键字 764 14.10.7 综合事件 765 14.11 trace-cmd 768 14.11.1 子命令概述 768 14.11.2 trace-cmd 单行命令 770 14.11.3 trace-cmd 和 perf(1) 的比较 772 14.11.4 trace-cmd function_graph 773 14.11.5 KernelShark 773 14.11.6 trace-cmd 文档 774 14.12 perf ftrace 775 14.13 perf-tools 775 14.13.1 工具覆盖 776 14.13.2 单用途的工具 777 14.13.3 多用途工具 778 14.13.4 perf-tools 单行命令 779 14.13.5 示例 781 14.13.6 perf-tools 与 BCC/BPF 的对比 781 14.13.7 文档 782 14.14 Ftrace文档 782 14.15 参考资料 783 第15章 BPF 785 15.1 BCC 787 15.1.1 安装 788 15.1.2 工具范围 788 15.1.3 单用途工具 789 15.1.4 多用途工具 791 15.1.5 单行命令 791 15.1.6 多用途工具示例 793 15.1.7 BCC 与 bpftrace 的比较 794 15.1.8 文档 794 15.2 bpftrace 795 15.2.1 安装 796 15.2.2 工具 796 15.2.3 单行命令 797 15.2.4 编程 800 15.2.5 参考 808 15.2.6 文档 815 15.3 参考资料 816 第16章 案例研究 817 16.1 无法解释的收益 817 16.1.1 问题陈述 817 16.1.2 分析策略 818 16.1.3 统计数据 818 16.1.4 配置 820 16.1.5 PMC 822 16.1.6 软件事件 823 16.1.7 跟踪 824 16.1.8 结论 826 16.2 其他信息 726 16.3 参考资料 827 附录A USE方法:Linux 829 附录B sar总结 835 附录C bpftrace单行命令 837 附录D 精选练习题答案 843 附录E 系统性能名人录 845 书评(媒体评论) "性能测量的水相当深,斯坦福大学的 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 创始人 / 总负责人" |
随便看 |
|
霍普软件下载网电子书栏目提供海量电子书在线免费阅读及下载。