Linux: 手动编译安装指定内核的perf工具

文章目录

    • [1. 引言](#1. 引言)
    • [2. 安装开发工具和依赖](#2. 安装开发工具和依赖)
    • [3. 下载内核源代码](#3. 下载内核源代码)
    • [4. 编译 `perf` 工具](#4. 编译 perf 工具)
    • [5. 验证 `perf` 工具的安装](#5. 验证 perf 工具的安装)
    • [6. 解决编译中的依赖问题(选看)](#6. 解决编译中的依赖问题(选看))
      • [6.1 安装缺少的依赖项](#6.1 安装缺少的依赖项)
      • [6.2 手动编译 `libtraceevent` 库](#6.2 手动编译 libtraceevent 库)
    • [7. 如何禁用不需要的功能?(选看)](#7. 如何禁用不需要的功能?(选看))

1. 引言

在安装perf工具时,可能会发现 apt-cache search linux-tools-$(uname -r) 无法找到与之内核版本 (6.8.4-060804-generic) 相匹配的 linux-tools

复制代码
$ apt-cache search linux-tools-$(uname -r)                                                                                                                                                                             
$ sudo apt-get install linux-tools-$(uname -r)                                                                                                                                                                         
E: Unable to locate package linux-tools-6.8.4-060804-generic
E: Couldn't find any package by glob 'linux-tools-6.8.4-060804-generic'
E: Couldn't find any package by regex 'linux-tools-6.8.4-060804-generic

本文将详细介绍如何编译 perf 工具,并解决编译过程中可能遇到的依赖问题。

关于Perf工具的使用请参考:
使用perf(火焰图)查看热点函数和系统调用最大延迟函数
如何使用perf 统计cpu和内存?

2. 安装开发工具和依赖

在开始编译 perf 工具之前,确保安装了必要的开发工具和库:

bash 复制代码
sudo apt update
sudo apt install git build-essential libncurses-dev flex bison openssl libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf

3. 下载内核源代码

下载与当前内核版本匹配的内核源代码:

bash 复制代码
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.8.4.tar.xz
tar -xf linux-6.8.4.tar.xz
cd linux-6.8.4

4. 编译 perf 工具

进入内核源码的 tools/perf 目录,开始编译 perf 工具:

bash 复制代码
cd tools/perf
make

编译完成后,将生成的 perf 可执行文件复制到系统路径中:

bash 复制代码
sudo cp perf /usr/local/bin/

5. 验证 perf 工具的安装

成功编译后,验证 perf 是否已正确安装并可以使用:

bash 复制代码
$ perf --version                                                                                                                                                                                                       
perf version 6.8.4

6. 解决编译中的依赖问题(选看)

在编译过程中,可能会遇到依赖问题。

6.1 安装缺少的依赖项

首先,安装编译 perf 所需的各种开发库:

bash 复制代码
sudo apt update
sudo apt install libdw-dev libunwind-dev libslang2-dev liblzma-dev libzstd-dev libcap-dev libnuma-dev libbabeltrace-dev libperl-dev libtraceevent-dev libpfm4-dev libsystemd-dev elfutils libelf-dev systemtap-sdt-dev

这些依赖项确保 perf 工具的全面功能支持,包括调试、压缩、NUMA、事件跟踪等。

6.2 手动编译 libtraceevent

如果某些依赖项无法安装,可以选择禁用相应的功能。如禁用 libtraceevent

bash 复制代码
make -j10 NO_LIBTRACEEVENT=1

当然也可以手动编译 libtraceevent 库。

安装libtraceevent编译工具和依赖

首先,安装编译所需的工具和依赖:

bash 复制代码
sudo apt update
sudo apt install git build-essential autoconf automake libtool pkg-config
克隆 libtraceevent 源代码

从官方库克隆 libtraceevent 源代码:

bash 复制代码
git clone https://git.kernel.org/pub/scm/libs/libtrace/libtraceevent.git
cd libtraceevent
编译和安装 libtraceevent

编译并安装 libtraceevent

bash 复制代码
make
sudo make install
sudo ldconfig

7. 如何禁用不需要的功能?(选看)

在编译perf工具时,您可以根据需求禁用某些功能,以减少编译过程中对不必要依赖项的需求。以下是一些常见的禁用选项:

bash 复制代码
make -j10 NO_LIBTRACEEVENT=1 NO_LIBUNWIND=1 NO_LIBSLANG=1 NO_LIBBABELTRACE=1 NO_LIBPYTHON=1
  • NO_LIBTRACEEVENT=1: 禁用libtraceevent支持。
  • NO_LIBUNWIND=1: 禁用libunwind支持(用于堆栈跟踪)。
  • NO_LIBSLANG=1: 禁用libslang支持(用于文本用户界面)。
  • NO_LIBBABELTRACE=1: 禁用libbabeltrace支持(用于perf data的CTF格式)。
  • NO_LIBPYTHON=1: 禁用Python脚本支持。
相关推荐
饭来_1 小时前
配置 RDP 远程桌面协议连接ubuntu服务器桌面
linux·运维·服务器
李菠菜1 小时前
Redis主从/哨兵/集群离线部署指南
linux·运维·redis
zyx没烦恼2 小时前
线程池&&单例模式
linux·开发语言·c++·单例模式
古德赖可可2 小时前
linux的例行性工作(at)
linux·运维·服务器
猪猪侠|ZZXia2 小时前
# 家庭网络IPv6地址的一些知识
linux·运维·服务器·网络·智能路由器
前进的程序员2 小时前
CentOS系统中MySQL安装步骤分享
linux·mysql·centos
小王努力学编程2 小时前
【Linux网络编程】应用层协议HTTP(实现一个简单的http服务)
linux·服务器·网络·c++·网络协议·学习·http
AI小小怪3 小时前
Linux下编译并打包MNN项目迁移至其他设备
linux·opencv·mnn·mtcnn
JhonKI3 小时前
【Linux网络】TCP服务中IOService应用与实现
linux·网络·tcp/ip
qq_447429414 小时前
Linux0.11内存管理:相关代码
linux·c语言