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脚本支持。
相关推荐
CoolTiger、1 小时前
【Vmware16安装教程】
linux·虚拟机·vmware16
学习3人组2 小时前
CentOS 中配置 OpenJDK以及多版本管理
linux·运维·centos
厨 神3 小时前
vmware中的ubuntu系统扩容分区
linux·运维·ubuntu
Karoku0663 小时前
【网站架构部署与优化】web服务与http协议
linux·运维·服务器·数据库·http·架构
geek_Chen013 小时前
虚拟机共享文件夹开启后mnt/hgfs/下无sharefiles? --已解决
linux·运维·服务器
(⊙o⊙)~哦4 小时前
linux 解压缩
linux·运维·服务器
牧小七5 小时前
Linux命令---查看端口是否被占用
linux
鸡鸭扣6 小时前
虚拟机:3、(待更)WSL2安装Ubuntu系统+实现GPU直通
linux·运维·ubuntu
友友马6 小时前
『 Linux 』HTTP(一)
linux·运维·服务器·网络·c++·tcp/ip·http
记得开心一点嘛7 小时前
在Linux系统上使用Docker部署javaweb项目
linux·运维·docker