当前位置: 首页 > news >正文

如何在Windows 11 WSL2 Ubuntu 环境下安装和配置perf性能分析工具?

在Windows 11 WSL2 Ubuntu 环境下完整安装和配置perf性能分析工具

  • 一、背景
  • 二、准备工作
  • 三、获取并编译Linux内核源码
  • 四、安装和配置perf
  • 五、测试perf
  • 六、总结

一、背景

由于WSL2使用的是微软定制的内核,并非标准的Ubuntu内核,因此直接使用apt安装linux-tools包会失败。

sudo apt install linux-tools-common linux-tools-generic linux-tools-$(uname -r)

会遇到如下错误:

E: Unable to locate package linux-tools-5.15.167.4-microsoft-standard-WSL2
E: Couldn't find any package by glob 'linux-tools-5.15.167.4-microsoft-standard-WSL2'

这个时候需要手动编译安装内核代码。本文详细介绍如何在Windows 11的WSL2 (Ubuntu 22.04)环境中成功安装并配置perf性能分析工具,一步步从获取内核源码到最终测试perf的完整过程,并提供更全面的依赖库安装方法以确保perf功能完整。

在这里插入图片描述

二、准备工作

  1. 更新WSL2: 在Windows PowerShell中运行以下命令更新WSL2到最新版本:

    wsl --update
    
  2. 安装必要的编译工具和依赖库: 在Ubuntu终端中执行以下命令,安装编译perf所需的工具链和基础依赖库:

    sudo apt update
    sudo apt install -y bc build-essential flex bison git cmake libelf-dev
    

    这里我们预先安装了 cmake ,在后续编译过程中可能会用到,避免了不必要的安装错误。

三、获取并编译Linux内核源码

  1. 确定内核版本: 在Ubuntu终端中运行以下命令获取当前WSL2内核版本:

    uname -r
    

    输出可能类似于

    5.15.167.4-microsoft-standard-WSL2
    

    我们仅提取主版本号,例如 5.15.167.4。注意:这个版本号可能会有变化, 你的实际操作结果跟这里的版本号可能会不同。

  2. 克隆内核源码: 使用Git克隆微软提供的WSL2内核源码。为了提高效率,我们只克隆必要的代码分支:

    # 设置一个环境变量方便引用
    export KERNEL_VERSION=$(uname -r | cut -d'-' -f1)
    git clone --depth 1 --single-branch --branch=linux-msft-wsl-${KERNEL_VERSION} https://github.com/microsoft/WSL2-Linux-Kernel.git
    

    这将克隆指定版本的内核源码到 WSL2-Linux-Kernel 目录。

  3. 编译内核及perf工具: 进入克隆的目录,并使用 make 命令编译内核。为了加快编译速度,可以使用 -j 参数指定并行编译的进程数,例如使用 -j$(nproc) 使用所有可用CPU核心进行并行编译。请注意,此步骤无需root权限。

    cd WSL2-Linux-Kernel
    make KCONFIG_CONFIG=Microsoft/config-wsl -j$(nproc)
    

    这个过程会让你输入y/n,一直输入y就好。例如:

     ** Mitigations for CPU vulnerabilities*Mitigations for CPU vulnerabilities (CPU_MITIGATIONS) [Y/n/?] (NEW) yRemove the kernel mapping in user mode (PAGE_TABLE_ISOLATION) [Y/n/?] yAvoid speculative indirect branches in kernel (RETPOLINE) [Y/n/?] yEnable return-thunks (RETHUNK) [Y/n/?] yEnable UNRET on kernel entry (CPU_UNRET_ENTRY) [Y/n/?] yEnable IBPB on kernel entry (CPU_IBPB_ENTRY) [Y/n/?] yEnable IBRS on kernel entry (CPU_IBRS_ENTRY) [Y/n/?] yMitigate speculative RAS overflow on AMD (CPU_SRSO) [Y/n/?] yMitigate Straight-Line-Speculation (SLS) [N/y/?] nForce GDS Mitigation (GDS_FORCE_MITIGATION) [N/y/?] nRFDS Mitigation (MITIGATION_RFDS) [Y/n/?] (NEW) yMitigate Spectre-BHB (Branch History Injection) (MITIGATION_SPECTRE_BHI) [Y/n/?] (NEW) y** Core Netfilter Configuration*
    
  4. 编译完成后,进入 tools/perf 目录,编译perf工具:

    cd tools/perf
    make
    

四、安装和配置perf

  1. 安装perf: 编译完成后,使用以下命令将 perf 可执行文件复制到系统目录:

    sudo cp perf /usr/bin/
    
  2. 安装全功能perf的依赖库: 为了确保perf拥有全部功能,需要安装额外的依赖库。这步比之前的例子更全面,涵盖更多:

    sudo apt install binutils-dev dwarves debuginfod default-jdk default-jre libaio-dev libbabeltrace-dev libcap-dev libdw-dev libdwarf-dev libelf-dev libiberty-dev liblzma-dev libnuma-dev libperl-dev libpfm4-dev libslang2-dev libssl-dev libtraceevent-dev libunwind-dev libzstd-dev libzstd1 python3-dev python3-setuptools systemtap-sdt-dev zlib1g-dev
    
  3. 重新编译perf (可选): 安装完所有依赖库后,建议重新编译perf以确保所有功能都被启用。

    make clean && make
    

    编译完成后,再次执行第三章节中的安装命令。编译过程中会显示哪些功能被支持。

五、测试perf

运行以下命令测试perf是否成功安装:

perf --version

如果成功安装,将显示perf的版本信息。

perf version 5.15.167.4.g6ac7abbd97a0
$ perfusage: perf [--version] [--help] [OPTIONS] COMMAND [ARGS]The most commonly used perf commands are:annotate        Read perf.data (created by perf record) and display annotated codearchive         Create archive with object files with build-ids found in perf.data filebench           General framework for benchmark suitesbuildid-cache   Manage build-id cache.buildid-list    List the buildids in a perf.data filec2c             Shared Data C2C/HITM Analyzer.config          Get and set variables in a configuration file.daemon          Run record sessions on backgrounddata            Data file related processingdiff            Read perf.data files and display the differential profileevlist          List the event names in a perf.data fileftrace          simple wrapper for kernel's ftrace functionalityinject          Filter to augment the events stream with additional informationiostat          Show I/O performance metricskallsyms        Searches running kernel for symbolskmem            Tool to trace/measure kernel memory propertieskvm             Tool to trace/measure kvm guest oslist            List all symbolic event typeslock            Analyze lock eventsmem             Profile memory accessesrecord          Run a command and record its profile into perf.datareport          Read perf.data (created by perf record) and display the profilesched           Tool to trace/measure scheduler properties (latencies)script          Read perf.data (created by perf record) and display trace outputstat            Run a command and gather performance counter statisticstest            Runs sanity tests.timechart       Tool to visualize total system behavior during a workloadtop             System profiling tool.version         display the version of perf binaryprobe           Define new dynamic tracepointstrace           strace inspired toolSee 'perf help COMMAND' for more information on a specific command.

六、总结

  • 内核版本号可能因WSL2更新而变化,请根据实际情况修改相应的版本号。
  • 编译内核是一个耗时的过程,请耐心等待。
  • 确保系统具有足够的磁盘空间,内核源码和编译过程会占用大量的磁盘空间。

参考:

  • https://github.com/microsoft/WSL2-Linux-Kernel
  • abel0b/install-linux-perf-on-wsl2.sh, https://gist.github.com/abel0b/b1881e41b9e1c4b16d84e5e083c38a13
  • https://medium.com/@manas.marwah/building-perf-tool-fc838f084f71
    在这里插入图片描述

相关文章:

如何在Windows 11 WSL2 Ubuntu 环境下安装和配置perf性能分析工具?

在Windows 11 WSL2 Ubuntu 环境下完整安装和配置perf性能分析工具 一、背景二、准备工作三、获取并编译Linux内核源码四、安装和配置perf五、测试perf六、总结 一、背景 由于WSL2使用的是微软定制的内核,并非标准的Ubuntu内核,因此直接使用apt安装linux…...

Docker运维高级容器技术知识点总结

1、虚拟机部署和容器化部署的区别是什么&#xff1f; 1、技术基础&#xff1a; <1>.虚拟化技术在物理硬件上创建虚拟机&#xff0c;每台虚拟机运行自己完整的操作系统、从而实现资源隔离。 <2>.容器化技术&#xff1a;将应用程序打包在容器内&#xff0c;在进程空间…...

react-quill 富文本组件编写和应用

index.tsx文件 import React, { useRef, useState } from react; import { Modal, Button } from antd; import RichEditor from ./RichEditor;const AnchorTouchHistory: React.FC () > {const editorRef useRef<any>(null);const [isModalVisible, setIsModalVis…...

LabVIEW轴承性能测试系统

本文介绍了基于LabVIEW的高效轴承性能测试系统的设计与开发。系统通过双端驱动技术实现高精度同步控制&#xff0c;针对轴承性能进行全面的测试与分析&#xff0c;以提高轴承的可靠性和寿命。 项目背景 随着工业自动化程度的提高&#xff0c;对轴承的性能要求越来越高。传统的…...

【《游戏编程模式》实战04】状态模式实现敌人AI

目录 1、状态模式 2、使用工具 3、状态模式适用范围 4、实现内容 5、代码及思路 Enemy.cs EnemyState.cs 6、unity里的设置 7、运行效果展示 1、状态模式 “允许一个对象在其内部状态改变时改变自身的行为。对象看起来好像是在修改自身类。” 就是一个对象能随着自己…...

借助免费GIS工具箱轻松实现las点云格式到3dtiles格式的转换

在当今数字化浪潮下&#xff0c;地理信息系统&#xff08;GIS&#xff09;技术日新月异&#xff0c;广泛渗透到城市规划、地质勘探、文化遗产保护等诸多领域。而 GISBox 作为一款功能强大且易用的 GIS 工具箱&#xff0c;以轻量级、免费使用、操作便捷等诸多优势&#xff0c;为…...

科研绘图系列:R语言科研绘图之标记热图(heatmap)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理画图系统信息参考介绍 科研绘图系列:R语言科研绘图之标记热图(heatmap) 加载R包 library(tidyverse) library(ggplot2) library(reshape)…...

【轻松学C:编程小白的大冒险】--- C语言简介 02

在编程的艺术世界里&#xff0c;代码和灵感需要寻找到最佳的交融点&#xff0c;才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里&#xff0c;我们将共同追寻这种完美结合&#xff0c;为未来的世界留下属于我们的独特印记。 【轻松学C&#xff1a;编程小白的大冒险】…...

《HeadFirst设计模式》笔记(上)

设计模式的目录&#xff1a; 1 设计模式介绍 要不断去学习如何利用其它开发人员的智慧与经验。学习前人的正统思想。 我们认为《Head First》的读者是一位学习者。 一些Head First的学习原则&#xff1a; 使其可视化将文字放在相关图形内部或附近&#xff0c;而不是放在底部…...

数据结构:ArrayList与顺序表

目录 &#x1f4d6;一、什么是List &#x1f4d6;二、线性表 &#x1f4d6;三、顺序表 &#x1f42c;1、display()方法 &#x1f42c;2、add(int data)方法 &#x1f42c;3、add(int pos, int data)方法 &#x1f42c;4、contains(int toFind)方法 &#x1f42c;5、inde…...

SpringBoot之核心配置

学习目标&#xff1a; 1.熟悉Spring Boot全局配置文件的使用 2.掌握Spring Boot配置文件属性值注入 3.熟悉Spring Boot自定义配置 4.掌握Profile多环境配置 5.了解随机值设置以及参数间引用 1.全局配置文件 Spring Boot使用 application.properties 或者application.yaml 的文…...

EasyExcel上传校验文件错误信息放到文件里以Base64 返回给前端

产品需求&#xff1a; 前端上传个csv 或 excel 文件&#xff0c;文件共4列&#xff0c;验证文件大小&#xff0c;类型&#xff0c;文件名长度&#xff0c;文件内容&#xff0c;如果某行某个单元格数据验证不通过&#xff0c;就把错误信息放到这行第五列&#xff0c;然后把带有…...

单片机软件定时器V4.0

单片机软件定时器V4.0 用于单片机定时执行任务等&#xff0c;比如LED GPIO等定时控制&#xff0c;内置前后台工作模式 头文件有使用例子 #ifndef __SORFTIME_APP_H #define __SORFTIME_APP_H#ifdef __cplusplus extern "C" { #endif#include <stdint.h>// #…...

超完整Docker学习记录,Docker常用命令详解

前言 关于国内拉取不到docker镜像的问题&#xff0c;可以利用Github Action将需要的镜像转存到阿里云私有仓库&#xff0c;然后再通过阿里云私有仓库去拉取就可以了。 参考项目地址&#xff1a;使用Github Action将国外的Docker镜像转存到阿里云私有仓库 一、Docker简介 Do…...

C++ 入门第26天:文件与流操作基础

往期回顾&#xff1a; C 入门第23天&#xff1a;Lambda 表达式与标准库算法入门-CSDN博客 C 入门第24天&#xff1a;C11 多线程基础-CSDN博客 C 入门第25天&#xff1a;线程池&#xff08;Thread Pool&#xff09;基础-CSDN博客 C 入门第26天&#xff1a;文件与流操作基础 前言…...

使用python将多个Excel表合并成一个表

import pandas as pd# 定义要合并的Excel文件路径和名称 file_paths [file1.xlsx, file2.xlsx, file3.xlsx, file4.xlsx, file5.xlsx]# 创建一个空的DataFrame来存储合并后的数据 merged_data pd.DataFrame()# 循环遍历每个Excel文件&#xff0c;并读取其中的数据 for file_p…...

halcon三维点云数据处理(七)find_shape_model_3d_recompute_score

目录 一、find_shape_model_3d_recompute_score例程代码二、set_object_model_3d_attrib_mod函数三、prepare_object_model_3d 函数四、create_cube_shape_model_3d函数五、获得CamPose六、project_cube_image函数七、find_shape_model_3d函数八、project_shape_model_3d函数 一…...

vue js实现时钟以及刻度效果

2025.01.08今天我学习如何用js实现时钟样式&#xff0c;效果如下&#xff1a; 一、html代码如下&#xff1a; <template><!--圆圈--><div class"notice_border"><div class"notice_position notice_name_class" v-for"item in …...

unity学习15:预制体prefab

目录 1 创建多个gameobject 2 创建prefab 2.1 创建prefab &#xff08;类&#xff09; 2.2 prefab 是一个文件 2.3 prefab可以导出 3 创建prefab variant &#xff08;子类&#xff09; 3.1 除了创建多个独立的prefab&#xff0c; 还可以创建 prefab variant 3.2 他…...

基于Thinkphp6+uniapp的陪玩陪聊软件开发方案分析

使用uni-app框架进行前端开发。uni-app是一个使用Vue.js开发所有前端应用的框架&#xff0c;支持一次编写&#xff0c;多端发布&#xff0c;包括APP、小程序、H5等。 使用Thinkphp6框架进行后端开发。Thinkphp6是一个轻量级、高性能、面向对象的PHP开发框架&#xff0c;具有易…...

重磅嘉宾|麻省理工学院(MIT)CSAIL 副主任 Daniel Jackson 分享:解码软件工程底层范式

当大模型把代码编写门槛拉到最低&#xff0c;软件工程的核心矛盾已从“写不出代码”转向“控不住设计”。AI能快速产出代码片段&#xff0c;却难以把控系统概念、模块边界与长期可靠性。如何让AI辅助开发既高效又可控&#xff1f;如何构建可解释、可组合、可验证的AI-native软件…...

手把手教你用LVGL+FreeRTOS在STM32上实现多页面切换(附完整源码)

手把手教你用LVGLFreeRTOS在STM32上实现多页面切换&#xff08;附完整源码&#xff09; 在嵌入式GUI开发中&#xff0c;页面管理机制的设计直接影响用户体验和代码可维护性。本文将深入探讨如何基于LVGL和FreeRTOS构建一个高效的多页面切换框架&#xff0c;从数据结构设计到实…...

mdp与GitHub Flavored Markdown兼容性深度解析:终极完整指南

mdp与GitHub Flavored Markdown兼容性深度解析&#xff1a;终极完整指南 【免费下载链接】mdp A command-line based markdown presentation tool. 项目地址: https://gitcode.com/gh_mirrors/md/mdp mdp是一款基于命令行的markdown演示工具&#xff0c;它为用户提供了在…...

OpenClaw技能扩展实战:用百川2-13B自动化处理Excel数据

OpenClaw技能扩展实战&#xff1a;用百川2-13B自动化处理Excel数据 1. 为什么选择OpenClaw处理Excel数据 作为一个经常需要处理数据报表的技术博主&#xff0c;我过去每周都要花数小时手动整理Excel表格。从数据清洗到生成可视化图表&#xff0c;这些重复性工作不仅枯燥&…...

盘姬工具箱:一款值得收藏的免费无广告系统维护神器

在日常使用电脑的过程中&#xff0c;我们难免会遇到各种各样的问题。 系统崩溃、文件误删、右键菜单混乱、网络故障等等&#xff0c;这些问题都让人头疼不已。 为了解决这些问题&#xff0c;很多用户会安装各种专门的工具软件。 但每安装一个软件&#xff0c;都会占用磁盘空…...

从谷歌官网下载谷歌浏览器并测试能否正常访问deepseek免注册版网址

引言 下载软件的时候&#xff0c;需要识别是否来自官网。如果下载来自非官方网站提供的软件&#xff0c;可能出现的危害包括但不限于&#xff0c;自动安装多个你并不想要安装的软件&#xff0c;甚至是都没听过的软件&#xff0c;这些软件很可能自动设置了开机自启动功能&#x…...

恩雅吉他琴颈变形维修保养指南,正规维修机构实力评测

琴颈是吉他手感的 “灵魂”&#xff0c;恩雅吉他的琴颈采用了专属的 BT 接柄技术&#xff0c;搭配碳纤维加固钢筋&#xff0c;在出厂时就调试到了最佳的演奏状态。但日常存放中&#xff0c;温湿度剧变、长期不规范上弦、意外磕碰&#xff0c;都很容易导致琴颈变形&#xff0c;出…...

On the Spectral Geometry of Cognitive Manifolds and the Emergence of Physical Laws

On the Spectral Geometry of Cognitive Manifolds and the Emergence of Physical Laws &#xff08;A Noncommutative Framework for Free Will, Physical Constants, and Arithmetical Obstructions&#xff09;作者&#xff1a;方见华 单位&#xff1a;世毫九实验室摘要&am…...

音乐制作人必备:IK Multimedia T-RackS 5 MAX 5.5.1 macOS 保姆级安装与预设使用指南

音乐制作人必备&#xff1a;IK Multimedia T-RackS 5 MAX 5.5.1 macOS 保姆级安装与预设使用指南 在数字音乐制作领域&#xff0c;一套强大的混音和母带处理工具能显著提升作品的专业度。对于Mac用户而言&#xff0c;IK Multimedia的T-RackS 5 MAX系列堪称音频处理领域的瑞士军…...

Next.js第八课 - 缓存机制

前面几节我们学习了数据获取和数据变更&#xff0c;本节来深入了解 Next.js 的缓存机制。缓存是提升应用性能的关键技术&#xff0c;用好了能让你的应用速度提升好几倍。 缓存架构 Next.js 使用多层缓存来优化性能&#xff0c;理解这个架构很重要&#xff1a; 请求流程: 浏览…...