---
title: 使用GCC PGO优化
description: "PGO（Profile-guided Optimization）即反馈编译优化，是一种编译器优化技术。PGO是一个动态的优化过程，需要进行一次预测试，预测试是对程序进行采样，获取程序的热点函数、函数分布等特征，然后将采样得到的数据反馈给下一次编译，重新编译生成优化后的代码。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdbs/ecosystemEnable/Redis/kunpengredishdp_05_0025.html
sourcePath: /source/zh/kunpengdbs/ecosystemEnable/Redis/kunpengredishdp_05_0025.html
indexId: 3bd8029325b4cd4c631b3a60841ae5424ae3598770c62921d410aa715ff4fb2e72
---
# 使用GCC PGO优化

#### 目的

PGO（Profile-guided Optimization）即反馈编译优化，是一种编译器优化技术。PGO是一个动态的优化过程，需要进行一次预测试，预测试是对程序进行采样，获取程序的热点函数、函数分布等特征，然后将采样得到的数据反馈给下一次编译，重新编译生成优化后的代码。


#### 方法

1. 编译Redis。
  编译后如不需要安装，后续启动和关闭Redis需使用Redis绝对路径。

```
make CFLAGS="-fprofile-generate=/opt/gcc_profile" LDFLAGS="-fprofile-generate=/opt/gcc_profile" -j
```


2. 启动Redis服务。详细操作步骤请参见《Redis 部署指南》的启动Redis(https://www.hikunpeng.com/document/detail/zh/kunpengdbs/ecosystemEnable/Redis/kunpengredis_04_0007.html)章节。
3. 在Redis客户端对Redis进行测试，获取采样结果。
4. 关闭Redis服务。

```
redis-cli -h
192.168.222.124
-p
6379
shutdown
```


  192.168.222.124和6379为Redis服务端的IP地址和端口号，请根据实际情况修改。

5. 编译清理。

```
make distclean
```


  在使用收集到的数据重新编译之前，清理之前的构建结果以避免干扰。

6. 再次编译Redis。

```
make CFLAGS="-fprofile-use=
/opt/gcc_profile
-fprofile-correction -Wno-error=coverage-mismatch" LDFLAGS="-fprofile-use=/opt/gcc_profile -fprofile-correction -Wno-error=coverage-mismatch" -j
```


  “/opt/gcc_profile”为采样文件放置目录，可以自定义。如果需要再次执行GCC PGO优化，请先删除“/opt/gcc_profile”目录中的旧数据，以避免新旧数据混淆。
