性能之巅 #
事件 #
- 设置性能目标和建立性能模型
- 基于软硬件原型进行性能特征归纳
- 对开发代码进行性能分析(软件整合之前)
- 执行软件非回归性测试(软件发布前或发布后)
- 针对软件发布版本的基准测试
- 目标环境中的概念验证测试
- 生产环境部署的配置优化
- 监控生产环境中运行的软件
- 特定问题的性能分析
视角 #
性能需要进行多视角分析,图中包括负载分析和资源分析
方法 #
术语 #
- IOPS: 每秒发生的输入/输出操作的次数,是数据传输的一个度量方法。
- 吞吐量(Throughput):工作执行的速率,在数据传输中,用于描述数据传输的数独(bytes/s或者bits/s),在数据库中,则表示操作的速度(操作数/秒或者事务数/秒)
- 响应时间:一次操作完成的时间。包含用于等待和服务的时间,也包括用来返回结果的时间
- 延时:描述操作里用来等待服务的时间。在某些情况下,它可以指的是整个操作时间,等同于响应时间。
- 使用率:对于服务所请求的资源,使用率描述在所给定的时间区间内资源的繁忙程度。对于存储资源,指的是所消耗的存储容量
- 饱和度:指的是某一个资源无法满足服务的排队工作量
- 瓶颈:在系统性能里,瓶颈指的是限制系统性能的那个资源。
- 工作负载:系统的输入或者对系统所施加的负载叫做工作负载。对于数据库来说,工作负载就是客户端发出的数据库请求和命令。
- 缓存:用于复制或者缓冲一定量数据的高速存储区域
系统性能概念 #
时延 #
时间量级
Latency Number:
Event | Latency |
---|---|
L1 cache reference | 1ns |
Branch mispredict | 3ns |
L2 cache reference | 4ns |
Mutex lock/unlock | 16ns |
Main memory reference | 100ns |
Compress 1KB with Snappy | 2us |
Send 2,000 bytes over commodity network | 31ns |
SSD random read | 16us |
Read 1,000,000 bytes sequentially from memory | 2.355us |
Round trip in same datacenter | 500us |
Read 1,000,000 bytes sequentially from SSD | 38.876us |
Disk seek | 2.332582ms |
Read 1,000,000 bytes sequentially from disk | 717.936us |
Packet roundtrip CA to Netherlands | 150ms |
权衡与调整 #
去权衡相伴的通常是可调参数。
性能调整发生在越高进工作执行的地方效果越显著。
指标 #
性能指标是由系统、应用程序或者其他工具产生的度量感兴趣活动的统计数据。性能指标用于性能分析和监控,由命令行提供数据或者由可视化工具提供图表。
常见系统性能指标:
- IOPS
- 吞吐量
- 使用率
- 延时
开销
性能指标不是免费的,在某些时候,会消耗CPU周期来收集和保存指标信息。
问题
指标可能会是混淆的、复杂的、不可靠的、不精确的,甚至是错误的。
资源分析 #
资源分析以对系统资源的分析为起点,涉及的系统资源有:CPU、内存、磁盘、网卡、总线以及直接的互联。
- 性能问题研究,看是否某特定类型资源的责任。
- 容量规划,为设计新系统提供信息,或者对系统资源何时会耗尽做预测。
相关指标:
- IOPS
- 吞吐量
- 使用率
- 饱和度
工作负载分析 #
工作负载分析检查应用程序的性能:所施加的工作负载和应用程序是如何响应的。
分析对象:
- 请求,所施加的工作负载
- 延时:应用程序的响应时间
- 完成度:查找错误
相关指标:
- 吞吐量
- 延时
USE方法 #
USE方法(utilization、saturation、errors)应用于性能研究,对所有的资源,查看它的使用率、饱和度和错误。
- 资源:所有物理资源和部分软件资源
- 使用率:在规定时间间隔内,资源用于服务工作的时间百分比。
- 饱和度:资源不能再服务更多额外工作的程度,通常有等待队列。
- 错误:错误事件的个数。
物理资源列表:
- CPU
- 内存
- 网络接口
- 存储设备
- 控制器
- 互联:CPU、内存、I/O
软件资源列表:
- 互斥锁:锁被持有的时间是使用时间,饱和度指的有线程排队在等锁
- 线程池:线程忙于处理工作的时间是使用时间,饱和度指的是等待线程池服务的请求数目
- 进程/线程容量:系统的进程或线程的总数是有上限的,当前的使用数目是使用率,等待分配任务是饱和度,错误是分配失败
- 文件描述符容量:同进程/线程容量一样,只不过针对的是文件描述符
使用建议
- 使用率:100%的使用率通常是瓶颈的信号。使用率超过60%可能会是问题。
- 饱和度:任何程度的饱和度都是问题
- 错误:错误都是值得研究的
建模 #
- 可视化识别
- Amdahl扩展定律
- 通用扩展定律
- 排队理论
容量规划 #
资源极限
该方法研究在负载之下会成为系统瓶颈的资源。
- 测量服务器请求的频率,并监视请求频率随时间的变化
- 测量硬件和软件的使用。监视使用率随时间的变化
- 用资源的使用来表示服务器的请求情况。
- 根据每个资源来推断服务器请求的极限
因素分析
基于对系统最大配置的了解方法
- 测试所有因素都设置为最大时的性能
- 逐一改变因素,测试性能
- 基于测量的结果,对每个因素的变化引起性能下降的百分比以及所节省的成本做统计
- 将最高的性能和成本作为起始点,选择能节省成本的因素,同时确保组合后的性能下降仍满足所需的每秒请求量。
- 重新测试改变过的配置,确认所交付的性能
扩展方案 #
- 垂直扩展,建立更大的系统
- 水平扩展,把负载分散给多个同样系统,在这些系统前面添加负载均衡器
统计 #
量化性能
- 基于观测
- 基于实现
监控 #
系统性能监控记录一段时间内的性能统计数据,过去的记录可以现在的做比较
可视化 #
可视化用看得见的方式来对数据做检查。这让我们能够识别规律并对规律做匹配。
操作系统 #
内核 #
内核管理着CPU调度、内存、文件系统、网络协议以及系统设备(磁盘、网络接口等)。通过系统调用提供访问设备和内核服务的机制。
内核执行
时钟