第一章 论述¶
1. 系统性能¶
系统性能是对整个计算机系统的性能的研究,包括主要硬件组件和软件组件。所有数据路径上和存储设备到应用软件上所发生的事情在内。
包括:操作系统(OS)内核、数据库、应用程序层、网站服务器;
全栈:整个硬件栈、软件栈、系统库、内核、硬件本身;

2. 人员¶
就是相关参与者:系统管理员、网站可靠性工程师、应用开发工程师、网络工程师、数据库管理员、和其他支持人员;
3. 活动¶
一、开发过程
- 对未来的产品设置性能目标和建立性能模型;
- 基于软件或硬件原型进行特征归纳;
- 在测试环境中对正在开发的产品做性能测试;
- 对新版本产品做非回归性测试;
- 针对软件发布版本的基准测试;
二、生产环境
- 目标生产环境中的概念验证(Proof-of-concept)测试
- 生产环境中的性能调优;
- 检测生产环境中的问题性能分析;
- 生产环境中的问题性能分析;
三、回顾总结
- 对生产环境中的问题做事件回顾;
- 开发性能工具以加强生产环境分析;
4. 视角¶
负载视角
资源视角

5. 性能的工程是充满挑战的¶
5.1 主观性¶
系统性能工程往往是客观的,太多1的业界人士审视问题都是非白即黑。
于此不同性能往往是主观的,比如磁盘传输为 1m/s,凭什么说它是好是坏?所以性能分析一定会包含具体的场景,具体的时间。把主观的思考方向转变为客观的思考方向;
5.2 复杂性¶
性能问题常常出现在子系统之间复杂的互联上,即便子系统的独立性都很好。也有可能由于连锁故障出现问题;
要理解这些问题,必须要梳理清楚这些子系统之间的关系,了解他们是如何协同工作的;
除了系统的复杂性,生产环境负载的复杂也能导致性能问题;
5.3 多个原因¶
有时候性能问题是由于多个因素导致的,除了多个因素,也有可能是多个性能问题导致的;
5.4 多个性能问题¶
在复杂的软件中通常会有多个问题。而且非常难以寻找;
性能分析的必须量化问题的程度。
又一个非常适用于量化性能问题的指标,那就是延时(latency)。
6. 延时¶
延时测量的就是等待时间;
作为一个指标可以估计最大增速(maximum speedup)。
例如:

虽然延时是有个非常有用的指标,但是不是随时都可以得到的。
7. 可观测性¶
可观测性是指通过观测来理解一个系统,并对完成这一任务进行分类。这包括计数器、剖析和跟踪。对于生产环境尽可能的使用可观测性工具,避免实验工具通过争夺资源扰乱负载;
7.1 计数器、统计数据和指标¶
应用程序和内核通常会提供其状态和活动的数据:操作计数、字节计数、延时测量、资源使用率和错误率;
通过计数器的整形变量实现,计数器在软件中是硬编码;
配合时间可以计算出:随时间的变化比率、平均值、百分比;
这些指标是为了评估或检测一个目标选择的统计数剧。大多是公司使用检测代理,定期记路选定的指标。
通过图形查看,通过报警及时发现问题;

7.2 剖析¶
在系统方面,术语剖析通常指的是使用工具来进行采样:起一个测量的子集(样本)来描绘目标的粗略情况。
7.3 跟踪¶
跟踪是基于事件的记录,捕获事件数据并保存起来进行分析。
静态检测¶
静态检测是添加到源代码中的硬编码的软件检测点。比如:日志输出;
动态检测¶
动态检测是软件在运行起来后,通过修改内存指定插入检测点。动态代理;
BPF¶
Berkeley Packet Filter可以为 Linux 最新的动态跟踪工具赋能;
8. 实验¶
除了观测工具外,还有一些实验工具,其中大多是基准测试。
要卡绿到再生产服务器上使用观测工具的弊端。大多数观测工具需要大量的时间观测;但是使用实验就可以快速得到寄过;
9. 云计算¶
云计算是一种按需部署计算资源的方式。
云计算带来了新的问题,包括:用户的隔离性带来的性能问题,如何对物理系统进行观测;
10. 方法¶
方法是将系统性能领域执行各种任务的建议步骤记录下来的方式。
11. 案例研究¶
案例研究会讲述什么时候该做什么事情和为什么要做这些事。