源码编译安装perf

perf是一款开源的C++程序性能分析工具。本文介绍如何通过源码编译的方式实现perf的安装。实操在中标麒麟虚拟机和银河麒麟V4(arm架构cpu)上均成功安装。

0 确保操作系统上已经安装了bison与flex。如果没有,参考我以前的博客ubuntu编译安装flexubuntu编译安装bison3.1源码,用源码安装它们。

1 检查被安装的操作系统的linux内核版本
uname -r

f7290ebd2bcc4508bcac7fb3ea74b25f.png

对于中标麒麟,虚拟机,版本是linux-4.4.13
对于银河麒麟,版本是linux-4.4.131

2 到如下网址下载对应版本的linux内核源码。perf源码已经成为内核源码一部分了。
https://cdn.kernel.org/pub/linux/kernel/

3 解压缩

4 进入解压后的如下路径
cd linux-4.4.13(中标麒麟采用4.4.13)/tools/perf

5 make
在make过程的一开始,可能会检查依赖的情况。如下图所示,这些标记off的项里面,dwarf和libelf是必须的,通过elfutils安装,参考我的博客

google-perftools 简介 google-perftools 是一款针对 C/C++ 程序的性能分析工具,它是一个遵守 BSD 协议的开源项目。使用该工具可以对 CPU 时间片、内存等系统资源的分配和使用进行分析,本文将重点介绍如何进行 CPU 时间片的剖析。 google-perftools 对一个程序的 CPU 性能剖析包括以下几个步骤。 1. 编译目标程序,加入对 google-perftools 库的依赖。 2. 运行目标程序,并用某种方式启动 / 终止剖析函数并产生剖析结果。 3. 运行剖结果转换工具,将不可读的结果数据转化成某种格式的文档(例如 pdf,txt,gv 等)。 安装 您可以在 google-perftools 的网站 (http://code.google.com/p/google-perftools/downloads/list) 上下载最新版的安装包。为完成步骤 3 的工作,您还需要一个将剖析结果转化为程序员可读文档的工具,例如 gv(http://www.gnu.org/software/gv/)。 编译与运行 您需要在原有的编译选项中加入对 libprofiler.so 的引用,这样在目标程序运行时会加载工具的动态库。例如本例中作者的系统中,libprofiler.so 安装在"/usr/lib"目录下,所以需要在 makefile 文件中的编译选项加入“-L/usr/lib -lprofiler”。 google-perftools 需要在目标代码的开始和结尾点分别调用剖析模块的启动和终止函数,这样在目标程序运行时就可以对这段时间内程序实际占用的 CPU 时间片进行统计和分析。工具的启动和终止可以采用以下两种方式。 a. 使用调试工具 gdb 在程序中手动运行性能工具的启动 / 终止函数。 gdb 是 Linux 上广泛使用的调试工具,它提供了强大的命令行功能,使我们可以在程序运行时插入断点并在断点处执行其他函数。具体的文档请参照 http://www.gnu.org/software/gdb/,本文中将只对用到的几个基本功能进行简单介绍。使用以下几个功能就可以满足我们性能调试的基本需求,具体使用请参见下文示例。 命令 功能 ctrl+c 暂停程序的运行 c 继续程序的运行 b 添加函数断点(参数可以是源代码中的行号或者一个函数名) p 打印某个量的值或者执行一个函数调用 b. 在目标代码中直接加入性能工具函数的调用,该方法就是在程序代码中直接加入调试函数的调用。 两种方式都需要对目标程序重新编译,加入对性能工具的库依赖。对于前者,他的好处是使用比较灵活,但工具的启动和终止依赖于程序员的手动操作,常常需要一些暂停函数(比如休眠 sleep)的支持才能达到控制程序的目的,因此精度可能受到影响。对于后者,它需要对目标代码的进行修改,需要处理函数声明等问题,但得到的结果精度较高,缺点是每次重新设置启动点都需要重新编译,灵活度不高,读者可以根据自己的实际需求采用有效的方式。 示例详解 该程序是一个简单的例子,文中有两处耗时的无用操作,并且二者间有一定的调用关系。 清单 1. 示例程序 void consumeSomeCPUTime1(int input){ int i = 0; input++; while(i++ < 10000){ i--; i++; i--; i++; } }; void consumeSomeCPUTime2(int input){ input++; consumeSomeCPUTime1(input); int i = 0; while(i++ < 10000){ i--; i++; i--; i++; } }; int stupidComputing(int a, int b){ int i = 0; while( i++ < 10000){ consumeSomeCPUTime1(i); } int j = 0; while(j++ < 5000){ consumeSomeCPUTime2(j); } return a+b; }; int smartComputing(int a, int b){ return a+b; }; void main(){ int i = 0; printf("reached the start point of performance bottle neck\n"); sleep(5); //ProfilerStart("CPUProfile"); while( i++ MyProfile.pdf 转换后产生的结果文档如下图。图中的数字和框体的大小代表了的某个函数的运行时间占整个剖析时间的比例。由代码的逻辑可知,stupidComputing,stupidComputing2 都是费时操作并且它们和 consumeSomeCPUTime 存在着一定的调用关系。 图 1. 剖析结果 结束语 本文介绍了一个 Linux 平台上的性能剖析工具 google-perftools,并结合实例向读者展示了如何使用该工具配置、使用及分析性能瓶颈。
### 编译安装 MySQL 的准备工作 对于在 Debian Linux 上从源码编译安装 MySQL,确保系统已经更新到最新状态,并安装必要的依赖包。这可以通过运行 `apt-get update` 和 `apt-get upgrade` 来完成[^4]。 ```bash sudo apt-get update sudo apt-get upgrade ``` 接着,为了成功构建 MySQL,还需要安装一些开发工具以及库文件: ```bash sudo apt-get install cmake build-essential libaio-dev \ libncurses5-dev bison openssl libssl-dev zlib1g-dev \ libtool m4 autoconf automake pkg-config flex bison \ libedit-dev libevent-dev libgoogle-perftools-dev \ libjemalloc-dev libnuma-dev perl python3 default-jdk ``` 上述命令中包含了多个用于支持 MySQL 构建过程中的组件,比如 CMake 是用来配置项目的构建系统的工具;libaio 提供异步 I/O 支持等[^3]。 ### 下载与解压 MySQL 源代码 进入指定的工作目录 `/ok` 并从中获取 MySQL 压缩包,这里以 MySQL 8.2 版本为例说明操作流程[^2]: ```bash cd /ok wget -c https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-8.2.0.tar.gz tar -zxvf ./mysql-boost-8.2.0.tar.gz ``` 此步骤完成了 MySQL 源代码及其所需 Boost 库的下载与解压缩工作。 ### 配置与编译项目 创建一个新的子目录作为构建环境的一部分,在该位置执行实际的编译任务: ```bash mkdir -p mysql-8.2.0/build && cd $_ cmake .. make -j$(nproc) ``` 这里的 `-j$(nproc)` 参数告诉 make 使用尽可能多的核心来加速编译速度。 ### 安装 MySQL 及初始化设置 一旦编译完成后就可以继续进行安装了: ```bash sudo make install ``` 之后需要对新安装的服务做进一步初始化处理,包括但不限于创建数据目录、生成初始表结构等动作。通常情况下可以借助于官方提供的脚本来简化这些步骤: ```bash sudo mysqld --initialize-insecure --user=mysql ``` 这条指令将会启动一次不带密码保护模式下的初始化进程,适用于首次部署场景下快速建立基本框架[^1]。 另外还需记得把 MySQL 添加至开机自启服务列表内以便日后管理方便: ```bash sudo cp ../support-files/mysql.server /etc/init.d/mysql sudo systemctl enable mysql.service ``` 以上就是整个基于 Debian 系统平台之上由零开始搭建 MySQL 数据库服务器的过程概述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值