跳转至

第一章 论述

1. 系统性能

系统性能是对整个计算机系统的性能的研究,包括主要硬件组件和软件组件。所有数据路径上和存储设备到应用软件上所发生的事情在内。

包括:操作系统(OS)内核、数据库、应用程序层、网站服务器;

全栈:整个硬件栈、软件栈、系统库、内核、硬件本身;

2. 人员

就是相关参与者:系统管理员、网站可靠性工程师、应用开发工程师、网络工程师、数据库管理员、和其他支持人员;

3. 活动

一、开发过程

  1. 对未来的产品设置性能目标和建立性能模型;
  2. 基于软件或硬件原型进行特征归纳;
  3. 在测试环境中对正在开发的产品做性能测试;
  4. 对新版本产品做非回归性测试;
  5. 针对软件发布版本的基准测试;

二、生产环境

  1. 目标生产环境中的概念验证(Proof-of-concept)测试
  2. 生产环境中的性能调优;
  3. 检测生产环境中的问题性能分析;
  4. 生产环境中的问题性能分析;

三、回顾总结

  1. 对生产环境中的问题做事件回顾;
  2. 开发性能工具以加强生产环境分析;

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. 案例研究

案例研究会讲述什么时候该做什么事情和为什么要做这些事。