确认perf tools的运行
perf tools是至今仍在不断进行开发的内核的附属工具,因此也在不断地进行bug修正和功能添加。这里以Linux 2.6.35为基础进行介绍,同时也介绍新版本中所需的一些信息。可以根据下列配置选项是否启用来确认内核是否支持perf tools。
CONFIG_PERF_EVENTS
在运行中的系统中,可以按照下列方式直接运行perf命令来确认运行情况。
perf list
perf top
安装perf tools
使用比发布版更新的内核时,建议重新创建这个内核附带的perf tools再使用。在版本不同的内核中,perf tools可能无法正常运行。另外,创建之前必须添加一些头文件或库,但在不同发布版中创建perf tools所需的数据包不同。Debian系列的发布版中需要下列deb数据包。
glibc-dev, libelf-dev, libdw-dev, libnewt-dev, binutils-dev, zlib-static
Red Hat系列的发布版中需要下列RPM数据包。
glibc-devel, elfutils-devel, elfutils-libelf-devel, newt-devel, binutils-devel
更新版本的perf tools的创建有时需要Perl或Python的开发版数据包。虽然没有这些也可以创建,但会失去Perl或Python脚本扩展的支持。perf tools按照下列方式创建后就可以安装。
cd tools/perf
make
make install
执行perf tools
perf tools命令是像top命令那样及时显示系统运行状态。二者根本上的不同在于top命令显示的是关于进程运行的统计信息,而perf tools命令显示的是通过性能计数器获取的用户进程和内核自身的概要分析信息。使用这个功能,就可以得知运行中内核的哪个函数影响了性能。执行perf tools需要执行下列命令
perf top
将显示下列输出内容。默认为每隔2秒更新一次。
59.00 3.2%mls_compute_sid[kernel.kallsyms]
42.00 2.2%__GI_strstr libc-2.11.2.so
41.00 2.2%hpet_next_event[kernel.kallsyms]
34.00 1.8%native_read_tsc[kernel.kallsyms]
30.00 1.6%__pthread_mutex_lock_internal libpthread-2.11.2.so
27.00 1.4%_spin_lock[kernel.kallsyms]
26.00 1.4%unix_poll[kernel.kallsyms]
24.00 1.3%_spin_unlock_irqrestore[kernel.kallsyms]
24.00 1.3%schedule[kernel.kallsyms]
20.00 1.1%fget_light[kernel.kallsyms]
20.00 1.1%__pthread_mutex_unlock libpthread-2.11.2.so
perf top命令在运行过程中,可以使用【d】键更改显示的更新频率。按下【q】键结束命令。perf top命令通过对CPU上发生的事件进行采样来进行概要分析。perf top默认通过统计所消耗的CPU周期的事件进行概要分析,此外还可以从缓存未命中(cache miss)事件、执行命令条数事件、分支预测错误事件等多个视图进行内核的概要分析。使用perf list命令可以获取这些事件的列表。
perf list
由于种类非常多,这里仅介绍具有代表性的概要事件(profile event),见表8-1。
将这些事件名称作为-e选项的参数,就可以进行基于不同指标的概要分析。例如,使用下列命令就可以获取缓存未命中的概要。