性能之巅
类型 | 来源 |
---|---|
进程级计数器 | /proc |
系统级计数器 | /proc, /sys |
设备驱动和调试信息 | /sys |
进程级跟踪 | ptrace uprobes |
性能计数器 | perf_event |
网络追踪 | libpcap |
进程级延时指标 | 延时核算 |
系统级跟踪 | tracepoints, kprobes, ftrace |
/proc
提供内核统计信息的文件系统接口,其中以进程ID命名的目录代表的就是该进程,其它的文件提供系统级别的统计数据。/proc由内核动态创建,在内存中运行不需要任何存储设备,多数文件只读(为观测工具提供统计数据),部分可写(用于控制进程和内核行为)。
进程ID目录内与进程性能观测相关的文件:
文件名 | 描述 |
---|---|
limits | 实际的资源限制 |
maps | 映射的内存区域 |
sched | CPU调度器的各种统计 |
schedstat | CPU运行时间、延时和时间分片 |
smaps | 映射内存区域的使用统计 |
stat | 进程状态和统计,包括总的CPU和内存的使用情况 |
statm | 以页为单位的内存使用总结 |
status | stat和statm的信息,用户可读 |
task | 每个任务的统计目录 |
系统级性能观测相关文件
文件 | 描述 |
---|---|
cpuinfo | 物理处理器信息,包含所有虚拟CPU、型号、时钟频率和缓存大小 |
diskstats | 对于所有磁盘设备的磁盘I/O统计 |
interrupts | 每个CPU的中断计数器 |
loadavg | 负载平均值 |
net/dev | 网络接口统计 |
net/tcp | 活跃的TCP套接字信息 |
schedstat | 系统级别的CPU调度器统计 |
self | 关联当前进程ID路径的符号连接 |
slabinfo | 内核slab分配器缓存统计 |
stat | 内核和系统资源的统计,CPU、磁盘、分页、交换区、进程 |
zoneinfo | 内存区信息 |
/sys
linux提供了sysfs文件系统,挂载在/sys,为内核统计提供基于目录的结构。
其中cache为CPU多级缓存的信息
延时核算
- 调度器延时:等待轮到上CPU
- 块I/O:等待块I/O完成
- 交换:等待换页(内存压力)
- 内存回收:等待内存回收例程
其它观测源
- CPU性能计数器:可编程的硬件寄存器,提供低层级的性能信息,包括CPU周期计数、指令技术、停滞周期等等。
- 进程级别跟踪:跟踪的是用户级别软件事件,如系统调用和函数调用。一般执行的代价较高,会拖慢跟踪的目标。
- 内核跟踪:内核探针
- 网络嗅探:网络设备上抓包,对数据包和协议的性能做详细调查。
- 进程核算:
- 系统调用: