内容简介
第1章 绪论
1.1系统性能
1.2人员
1.3事情
1.4视角
1.5性能是充满挑战的
1.5.1性能是主观的
1.5.2系统是复杂的
1.5.3可能有多个问题并存
1.6延时
1.7动态跟踪
1.8云计算
1.9案例研究
1.9.1缓慢的磁盘
1.9.2软件变更
1.9.3更多阅读
第2章 方法
2.1术语
2.2模型
2.2.1受测系统
2.2.2排队系统
2.3概念
2.3.1延时
2.3.2时间量级
2.3.3权衡三角
2.3.4调整的影响
2.3.5合适的层级
2.3.6性能建议的时间点
2.3.7负载vs.架构
2.3.8扩展性
2.3.9已知的未知
2.3.10指标
2.3.11使用率
2.3.12饱和度
2.3.13剖析
2.3.14缓存
2.4视角
2.4.1资源分析
2.4.2工作负载分析
2.5方法
2.5.1街灯讹方法
2.5.2随机变动讹方法
2.5.3责怪他人讹方法
2.5.4 Ad Hoc核对清单法
2.5.5问题陈述法
2.5.6科学法
2.5.7诊断循环
2.5.8工具法
2.5.9 USE方法
2.5.10工作负载特征归纳
2.5.11向下挖掘分析
2.5.12延时分析
2.5.13 R方法
2.5.14事件跟踪
2.5.15基础线统计
2.5.16静态性能调整
2.5.17缓存调优
2.5.18微基准测试
2.6建模
2.6.1企业vs.云
2.6.2可视化识别
2.6.3 Amdahl扩展定律
2.6.4通用扩展定律
2.6.5排队理论
2.7容量规划
2.7.1资源极限
2.7.2因素分析
2.7.3扩展方案
2.8统计
2.8.1量化性能
2.8.2平均值
2.8.3标准方差、百分位数、中位数
2.8.4变异系数
2.8.5多重模态分布
2.8.6异常值
2.9监视
2.9.1基于时间的规律
2.9.2监测产品
2.9.3启动以来的信息统计
2.10可视化
2.10.1线图
2.10.2散点图
2.10.3热图
2.10.4表面图
2.10.5可视化工具
2.11练习
2.12参考
第3章 操作系统
3.1术语
3.2背景
3.2.1内核
3.2.2栈
3.2.3中断和中断线程
3.2.4中断优先级
3.2.5进程
3.2.6系统调用
3.2.7虚拟内存
3.2.8内存管理
3.2.9调度器
3.2.10文件系统
3.2.11缓存
3.2.12网络
3.2.13设备驱动
3.2.14多处理器
3.2.15抢占
3.2.16资源管理
3.2.17观测性
3.3内核
3.3.1 UNIX
3.3.2基于Solaris
3.3.3基于Linux
3.3.4差异
3.4练习
3.5参考
第4章 观测工具
4.1工具类型
4.1.1计数器
4.1.2跟踪
4.1.3剖析
4.1.4监视(sar)
4.2观测来源
4.2.1 /proc
4.2.2 /sys
4.2.3 kstat
4.2.4延时核算
4.2.5微状态核算
4.2.6其他的观测源
4.3 DTrace
4.3.1静态和动态跟踪
4.3.2探针
4.3.3 provider
4.3.4参数
4.3.5 D语言
4.3.6内置变量
4.3.7 action
4.3.8变量类型
4.3.9单行命令
4.3.10脚本
4.3.11开销
4.3.12文档和资源
4.4 SystemTap
4.4.1探针
4.4.2 tapset
4.4.3 action和内置变量
4.4.4示例
4.4.5开销
4.4.6文档和资源
4.5 perf
4.6观测工具的观测
4.7练习
4.8参考
第5章 应用程序
5.1应用程序基础
5.1.1目标
5.1.2常见情况的优化
5.1.3观测性
5.1.4大O标记法
5.2应用程序性能技术
5.2.1选择I/O尺寸
5.2.2缓存
5.2.3缓冲区
5.2.4轮询
5.2.5并发和并行
5.2.6非阻塞I/O
5.2.7处理器绑定
5.3编程语言
5.3.1编译语言
5.3.2解释语言
5.3.3虚拟机
5.3.4垃圾回收
5.4方法和分析
5.4.1线程状态分析
5.4.2 CPU剖析
5.4.3系统调用分析
5.4.4 I/O剖析
5.4.5工作负载特征归纳
5.4.6 USE方法
5.4.7向下挖掘法
5.4.8锁分析
5.4.9静态性能调优
5.5练习
5.6参考
第6章 CPU
6.1术语
6.2模型
6.2.1 CPU架构
6.2.2 CPU内存缓存
6.2.3 CPU运行队列
6.3概念
6.3.1时钟频率
6.3.2指令
6.3.3指令流水线
6.3.4指令宽度
6.3.5 CPI,IPC
6.3.6使用率
6.3.7用户时间/内核时间
6.3.8饱和度
6.3.9抢占
6.3.10优先级反转
6.3.11多进程,多线程
6.3.12字长
6.3.13编译器优化
6.4架构
6.4.1硬件
6.4.2软件
6.5方法
6.5.1工具法
6.5.2 USE方法
6.5.3负载特征归纳
6.5.4剖析
6.5.5周期分析
6.5.6性能监控
6.5.7静态性能调优
6.5.8优先级调优
6.5.9资源控制
6.5.10 CPU绑定
6.5.11微型基准测试
6.5.12扩展
6.6分析
6.6.1 uptime
6.6.2 vmstat
6.6.3 mpstat
6.6.4 sar
6.6.5 ps
6.6.6 top
6.6.7 prstat
6.6.8 pidstat
6.6.9 time和ptime
6.6.10 DTrace
6.6.11 SystemTap
6.6.12 perf
6.6.13 cpustat
6.6.14其他工具
6.6.15可视化
6.7实验
6.7.1 Ad Hoc
6.7.2 SysBench
6.8调优
6.8.1编译器选项
6.8.2调度优先级和调度类
6.8.3调度器选项
6.8.4进程绑定
6.8.5独占CPU组
6.8.6资源控制
6.8.7处理器选项(BIOS调优)
6.9练习
6.10参考资料
第7章 内存
7.1术语
7.2概念
7.2.1虚拟内存
7.2.2换页
7.2.3按需换页
7.2.4过度提交
7.2.5交换
7.2.6文件系统缓存占用
7.2.7使用率和饱和度
7.2.8分配器
7.2.9字长
7.3架构
7.3.1硬件
7.3.2软件
7.3.3进程地址空间
7.4方法
7.4.1工具法
7.4.2 USE方法
7.4.3使用特征归纳
7.4.4周期分析
7.4.5性能监测
7.4.6泄漏检测
7.4.7静态性能调优
7.4.8资源控制
7.4.9微基准测试
7.5分析
7.5.1 vmstat
7.5.2 sar
7.5.3 slabtop
7.5.4 ::kmstat
7.5.5 ps
7.5.6 top
7.5.7 prstat
7.5.8 pmap
7.5.9 DTrace
7.5.10 SystemTap
7.5.11其他工具
7.6调优
7.6.1可调参数
7.6.2多个页面大小
7.6.3分配器
7.6.4资源控制
7.7练习
7.8参考资料
第8章 文件系统
8.1术语
8.2模型
8.2.1文件系统接口
8.2.2文件系统缓存
8.2.3二级缓存
8.3概念
8.3.1文件系统延时
8.3.2缓存
8.3.3随机与顺序I/O
8.3.4预取
8.3.5预读
8.3.6写回缓存
8.3.7同步写
8.3.8裸I/O和直接I/O
8.3.9非阻塞I/O
8.3.10内存映射文件
8.3.11元数据
8.3.12逻辑I/O vs.物理I/O
8.3.13操作并非不平等
8.3.14特殊文件系统
8.3.15访问时间戳
8.3.16容量
8.4架构
8.4.1文件系统I/O栈
8.4.2 VFS
8.4.3文件系统缓存
8.4.4文件系统特性
8.4.5文件系统种类
8.4.6卷和池
8.5方法
8.5.1磁盘分析
8.5.2延时分析
8.5.3负载特征归纳
8.5.4性能监控
8.5.5事件跟踪
8.5.6静态性能调优
8.5.7缓存调优
8.5.8负载分离
8.5.9内存文件系统
8.5.10微型基准测试
8.6分析
8.6.1 vfsstat
8.6.2 fsstat
8.6.3 strace、truss
8.6.4 DTrace
8.6.5 SystemTap
8.6.6 LatencyTOP
8.6.7 free
8.6.8 top
8.6.9 vmstat
8.6.10 sar
8.6.11 slabtop
8.6.12 mdb::kmastat
8.6.13 fcachestat
8.6.14/proc/meminfo
8.6.15 mdb::memstat
8.6.16 kstat
8.6.17其他工具
8.6.18可视化
8.7实验
8.7.1 Ad Hoc
8.7.2微型基准测试工具
8.7.3缓存写回
8.8调优
8.8.1应用程序调用
8.8.2 ext3
8.8.3 ZFS
8.9练习
8.10参考资料
第9章 磁盘
9.1术语
9.2模型
9.2.1简单磁盘
9.2.2缓存磁盘
9.2.3控制器
9.3概念
9.3.1测量时间
9.3.2时间尺度
9.3.3缓存
9.3.4随机vs.连续I/O
9.3.5读/写比
9.3.6 I/O大小
9.3.7 IOPS并不平等
9.3.8非数据传输磁盘命令
9.3.9使用率
9.3.10饱和度
9.3.11 I/O等待
9.3.12同步vs.异步
9.3.13磁盘vs.应用程序I/O
9.4架构
9.4.1磁盘类型
9.4.2接口
9.4.3存储类型
9.4.4操作系统磁盘I/O栈
9.5方法
9.5.1工具法
9.5.2 USE方法
9.5.3性能监控
9.5.4负载特征归纳
9.5.5延时分析
9.5.6事件跟踪
9.5.7静态性能调优
9.5.8缓存调优
9.5.9资源控制
9.5.10微基准测试
9.5.11伸缩
9.6分析
9.6.1 iostat
9.6.2 sar
9.6.3 pidstat
9.6.4 DTrace
9.6.5 SystemTap
9.6.6 perf
9.6.7 iotop
9.6.8 iosnoop
9.6.9 blktrace
9.6.10 MegaCli
9.6.11 smartctl
9.6.12可视化
9.7实验
9.7.1 Ad Hoc
9.7.2自定义负载生成器
9.7.3微基准测试工具
9.7.4随机读示例
9.8调优
9.8.1操作系统可调参数
9.8.2磁盘设备可调参数
9.8.3磁盘控制器可调参数
9.9练习
9.10参考资料
第10章 网络
10.1术语
10.2模型
10.2.1网络接口
10.2.2控制器
10.2.3协议栈
10.3概念
10.3.1网络和路由
10.3.2协议
10.3.3封装
10.3.4包长度
10.3.5延时
10.3.6缓冲
10.3.7连接积压队列
10.3.8接口协商
10.3.9使用率
10.3.10本地连接
10.4架构
10.4.1协议
10.4.2硬件
10.4.3软件
10.5方法
10.5.1工具法
10.5.2 USE方法
10.5.3工作负载特征归纳
10.5.4延时分析
10.5.5性能监测
10.5.6数据包嗅探
10.5.7 TCP分析
10.5.8挖掘分析
10.5.9静态性能调优
10.5.10资源控制
10.5.11微基准测试
10.6分析
10.6.1 netstat
10.6.2 sar
10.6.3 ifconfig
10.6.4 ip
10.6.5 nicstat
10.6.6 dladm
10.6.7 ping
10.6.8 traceroute
10.6.9 pathchar
10.6.10 tcpdump
10.6.11 snoop
10.6.12 Wireshark
10.6.13 DTrace
10.6.14 SystemTap
10.6.15 perf
10.6.16其他工具
10.7实验
10.7.1 iperf
10.8调优
10.8.1 Linux
10.8.2 Solaris
10.8.3 配置
10.9练习
10.10参考
第11章 云计算
11.1背景
11.1.1性价比
11.1.2可扩展的架构
11.1.3容量规划
11.1.4存储
11.1.5多租户
11.2 OS虚拟化
11.2.1系统开销
11.2.2资源控制
11.2.3可观测性
11.3硬件虚拟化
11.3.1系统开销
11.3.2资源控制
11.3.3可观测性
11.4比较
11.5练习
11.6参考资料
第12章 基准测试
12.1背景
12.1.1事情
12.1.2有效的基准测试
12.1.3基准测试之罪
12.2基准测试的类型
12.2.1微基准测试
12.2.2模拟
12.2.3回放
12.2.4行业标准
12.3方法
12.3.1被动基准测试
12.3.2主动基准测试
12.3.3 CPU剖析
12.3.4 USE方法
12.3.5工作负载特征归纳
12.3.6自定义基准测试
12.3.7逐渐增加负载
12.3.8完整性检查
12.3.9统计分析
12.4基准测试问题
12.5练习
12.6参考
第13章 案例研究
13.1案例研究:红鲸
13.1.1问题陈述
13.1.2支持
13.1.3上手
13.1.4选择征途
13.1.5 USE方法
13.1.6我们做完了吗
13.1.7二度出击
13.1.8基础
13.1.9忽略红鲸
13.1.10审问内核
13.1.11为什么
13.1.12尾声
13.2结语
13.3附加信息
13.4参考
附录A USE法:Linux
附录B USE法:Solaris
附录C sar总结
附录D DTrace单行命令
附录E 从DTrace到SystemTap
附录F 精选练习题答案
附录G 系统性能名人录