第四章 观测工具
学习目标
认识静态性能工具和危机排查工具
了解工具的类型和工具运行的开销,包括:计数器、剖析工具和跟踪工具
观测工具的来源
工具范围
分为静态性能工具和危机处理工具
工具类型
性能观测工具可以按照系统级别和进程级别来分类,多数的工具要么基于计数器要么基于事件
有些工具不止适合一个象限。
基于事件的工具包括剖析器和跟踪器。剖析器通过对事件进行一系列快照来观测活动,跟踪器记录每一个感兴趣的事件,本可以对他们进行处理。
固定计数器
内核维护了各种统计数据,称为计数器,用于对事件计数。通常计数器实现为无符号的整型数,发生事件时递增。
一个常见的内核方法是维护一对累积计数器,一个对事件计数,另一个用来记录事件的总时间。凭借计数器,我们可以直接获得事件数量。通过用总时间除以数量,可以得到事件的平均时间(延时),这就是众多系统数据统计的计算方式。
计数器的使用可以认为是“零开销”的,因为它们默认就是开启的,而且始终由内核维护。唯一的使用开销是从用户空间读取它们的时候(可以忽略不计)。
剖析
剖析(profiling)通过对目标收集采样或快照来归纳目标特征。
一个常见的剖析目标就是CPU的使用率,根据定时器来采集指令的指针或栈跟踪的样本,来描绘CPU消耗的代码路径。通常采集这些样本的速率是固定的。例如100hz(每秒的周期数)对所有CPU都采集一遍,并且持续时间不长,例如采集一分钟。
剖析工具,或者说剖析器(profiler),通常使用90Hz代替100Hz,避免采样与目标活动同一步调,因为这样可能会导致多算或少算。
剖析也能基于非计时的硬件事件,如CPU硬件缓存未命中或者总线活动。
与固定计数器不同,剖析(和跟踪)通常只在需要时才启用,因为它们在收集时可能会产生一些CPU开销,在存储时也会产生一些存储开销。
跟踪
跟踪每一次发生的记录事件,并可以存储事件的细节信息,供以后分析或生成摘要。这与剖析类似,但其目的是收集或检查所有的事件,而不仅仅是某个样本。与剖析相比,跟踪会有更高的CPU和存储的开销,可能会拖慢跟踪的目标。
监测
监测持续记录统计数据以备日后需要
硬件计数器
处理器和其他设备通常有硬件计数器用于观测活动。做主要观测来源的是处理器,在处理器里这类硬件计数器通常被称为性能监测计数器(PMC)
观测工具的观测
观测工具和构建在其上的统计都是由软件实现的,而所有的软件都是有潜在bug的。这对描述软件的文档来说也是一样的。用正常质疑的眼光来审视所有对你来说是新的统计数据,探究它们真实的意义以及是否真的正确。