编译反馈优化
编译反馈优化用于帮助用户更加方便的使用编译器的AutoFDO功能,使用编译反馈优化功能进行性能提升。
命令功能
根据用户配置可以帮助用户自动实现AutoFDO功能,进行性能提升。
命令格式
devkit advisor kfdo [-h | --help] {-i INPUT_CONFIG_PATH | --input INPUT_CONFIG_PATH} [-l {0,1,2,3} | --log-level {0,1,2,3}] [--set-timeout TIMEOUT]
参数说明
参数 |
参数选项 |
参数说明 |
|---|---|---|
-h/--help |
- |
获取帮助信息。 |
-i/--input |
configuration_file_path |
必选参数,配置文件的绝对路径,配置文件用于描述源码构建命令和perf采样信息。 例如:home/test/redis/config.json。 |
--set-timeout |
time |
任务超时时间,单位为分钟,若执行时间超过超时时间则退出执行。默认无超时时间,任务将持续执行直到结束。 |
-l/--log-level |
0/1/2/3 |
设置日志级别,默认为1。
|
工具提供6种样例配置文件(all.json、run_sample_opt.json、sample_opt.json、opt.json、run_sample.json、sample.json),请根据实际情况进行选择。
样例配置文件路径为“/root/CLI/DevKit-CLI-xxx-Linux-Kunpeng/advisor/devkitplugins/affinity/tools/compileopt/templates/”。
“/root/CLI/DevKit-CLI-xxx-Linux-Kunpeng/”为命令行工具安装路径。
使用示例
此处以在“/home/test/redis”下进行编译反馈优化,config.json保存在“/home/test/redis”下为例,请根据实际情况进行修改。
ls -al /home/test /redis/ -rw-r--r-- 1 test test 817 Jul 15 20:43 config.json -rw-r--r-- 1 test test 4189897 Jul 11 08:59 redis-7.2.5.zip devkit advisor kfdo -i /home/test/config.json
返回信息如下,并输出报告。
['/home/test/affinity/devkitplugins/dist/advisor/devkitplugins/affinity/tools/compileopt/bin/kfdo', '--input', '/home/test/redis/config.json', '-l', '1'] begin to run kfdo tool [#######... ] [running] reading configuration file [waiting] building baseline software [waiting] using perf to collect sample profiles [waiting] using profile to optimize binary program [##############... ] [ ✔ ] reading configuration file [running] building baseline software [waiting] using perf to collect sample profiles [waiting] using profile to optimize binary program ... [#######################################################################] [ ✔ ] reading configuration file [ ✔ ] building baseline software [ ✔ ] using perf to collect sample profiles [ ✔ ] using profile to optimize binary program finish run kfdo tool
config.json文件说明
{
/**
* stages可以设置的值有all,run_sample_opt,sample_opt,opt,run_sample,sample
*
* all表示执行所有的步骤,包含步骤1基础编译,步骤2运行负载程序,步骤3采集程序数据,步骤4优化编译。
* run_sample_opt表示执行三个步骤,包含步骤2运行负载程序,步骤3采集程序数据,步骤4优化编译。
* sample_opt表示执行两个步骤,包含步骤3采集程序数据,步骤4优化编译。
* opt表示只执行步骤4优化编译
* run_sample表示执行两个步骤,包含步骤2运行负载程序,步骤3采集程序数据, 并在${workspace}/devkit_compiler目录下生成profile.afdo文件,该文件用于优化编译步骤中的afdo_file。
* sample只执行步骤3采集程序数据,并在${workspace}/devkit_compiler目录下生成profile.afdo文件,该文件用于优化编译步骤中的afdo_file。
*/
"stages": "all",
/**
* compiler_type可以设置的值有gcc,bisheng
*
* gcc:
* 1.在采集程序数据步骤中,使用create_gcov创建profile.afdo文件
* 2.在基础编译步骤和优化编译步骤中,使用的编译器为gcc for OpenEuler或者gcc(当前只支持7.x到10.x版本)。
* bisheng:
* 1.在采集程序数据步骤中,使用create_llvm_prof创建profile.afdo文件
* 2.在基础编译步骤和优化编译步骤中,使用的编译器为毕昇编译器 (当前只支持2.4到4.0版本)。
*/
"compiler_type" : "bisheng",
// 执行命令的基础目录
"workspace" : "/home/workspace/",
// 步骤1: 基础编译
"baseline_build" : {
//环境变量
"env":{
// 环境变量CC,编译器具体命令。
// "CC": "clang"
},
// 编译命令,支持多条命令,多个命令用分号分隔。
"command" : "cd redis-6.2.14;make"
},
// 步骤2: 运行负载程序
"load_program" : [
{
// 环境变量
"env":{
// "LD_LIBRARY_PATH": "/home/workspace/local/lib64"
},
// 启动命令,只支持单条命令。
"command" : "/home/workspace/redis-6.2.14/src/redis-server /home/workspace/redis.conf",
// 停止命令,只支持单条命令。在采集完成后执行,不配置则默认通过拉起时的进程组进行停止。
"stop_command":"/bin/bash /home/workspace/stop.sh",
// 下一个应用的启动间隔,单位秒
"interval": 5
},
{
// 应用压力测试
// 环境变量
"env":{
// "LD_LIBRARY_PATH": "/home/workspace/local/lib64"
},
// 启动命令,只支持单条命令。
"command" : "/home/workspace/redis-6.2.14/src/redis-benchmark -t set -n 1000000",
// 停止命令,只支持单条命令。在采集完成后执行,不配置则默认通过拉起时的进程组进行停止。
"stop_command":"",
// 下一个应用的启动间隔
"interval": 0
}
],
// 步骤3: 采集程序数据
"perf_sample" : {
// 需要进行采样的程序启动命令的特征,通过ps -e -o pid,command,可以查询到
"app_names":["redis-server"],
// 采集时间,单位秒
"duration" : 10,
// 采集时延,单位秒
"delay" : 0,
// 使用create_llvm_prof或者create_gcov生成profile.afdo需要的二进制文件
"create_afdo":{
"binary": "/home/workspace/redis-6.2.14/src/redis-server"
}
},
// 步骤4: 优化编译
"optimize_build" : {
// 环境变量
"env":{
// 环境变量CC,编译器具体命令。
// "CC": "clang"
},
// afdo_file配置只有当stages为opt时,才生效,其他场景不生效。用于指定优化编译时使用的采集优化的数据,
// 可通过create_llvm_prof或者create_gcov生成。
// "afdo_file": "/home/workspace/devkit_compiler/profile.afdo",
// 编译命令,支持多条命令,多个命令用分号分隔。
"command" : "cd redis-6.2.14_opt;make"
}
}
参数 |
参数选项 |
说明 |
|---|---|---|
stages |
all/run_sample_opt/sample_opt/opt/run_sample/sample |
|
compiler_type |
gcc,bisheng |
编译过程中需要使用的编译器类型,支持gcc、bisheng。 |
workspace |
- |
执行命令的基础目录。 |
baseline_build |
env |
基础编译环境变量。 |
command |
基础编译命令,支持多条命令,多个命令用英文分号分隔。 |
|
load_program |
env |
运行负载程序环境变量。 |
command |
负载程序启动命令。 |
|
stop_command |
负载程序停止命令,只支持单条命令。在采集完成后执行,不配置则默认通过拉起时的进程组进行停止。 |
|
interval |
下一个应用的启动间隔时间,单位秒。 |
|
perf_sample |
app_names |
需要进行采样的程序启动命令的特征,通过“ps -e -o pid,command”可以查询到。 |
duration |
采集时间,单位秒。 |
|
delay |
采集时延,单位秒。 |
|
create_afdo
|
使用create_llvm_prof或者create_gcov生成profile.afdo需要的二进制文件。 |
|
optimize_build |
env |
优化编译环境变量。 |
afdo_file |
afdo_file配置只有当stages为opt时才生效,其他场景下不生效。 用于指定优化编译时使用的采集优化的数据,可通过create_llvm_prof或者create_gcov生成。 |
|
command |
优化编译命令,支持多条命令,多个命令用英文分号分隔。 |