
# 静态加速
#### 准备工作
1. 执行如下命令检查待优化的二进制文件中是否可以重新定位。可以重新定位表示可以进行应用优化。
   其中"application"可替换为待检查的二进制文件。
   ```
   readelf -a application | grep .rela.text
   ```
   图1readelf命令执行示例   
   ![](https://support.huaweicloud.com/usermanual-hce/zh-cn_image_0000002512128893.png "点击放大")
   - 如果二进制文件中存在.rela.text段，表示可以重新定位。
   
   - 如果不存在，为了允许BOLT在程序中重新排列函数，需要将选项--emit-relocs或-q添加到构建二进制文件的命令中。
     
2. 采集应用运行时的日志数据。 部署并预热应用后，即可使用**llvm-bolt -instrument -o -instrumentation-file**命令配置应用的日志采集方式。
   例如，配置test.so文件运行后每隔30秒收集一次日志，日志保存到运行时test.log文件中请使用如下命令。
   ```
   llvm-bolt test.so -instrument -o testd.so -instrumentation-file=test.log -instrumentation-sleep-time=30 -instrumentation-no-counters-clear
   ```
   - instrument：配置完日志采集方式后生成的新的动态库文件。本例中新生成的动态库为testd.so。
   
   - instrumentation-file：日志保存的文件名称。本例为test.log。
   
   - instrumentation-sleep-time：采集日志的时间间隔，单位为秒。本例中每隔30秒采集一次日志。
   
   - instrumentation-no-counters-clear：表示每次日志采集后不要清除日志计数器信息，保持日志信息上下文连续。
    
3. 运行testd.so对应的应用程序，应用程序运行日志会自动保存在test.log文件中。 应用加速工具会根据test.log文件中的动态数据来优化应用。
   
 
#### 优化应用程序
- 使用原生的BOLT工具优化应用程序。
  准备好test.log文件后，就可以使用它与BOLT对应用程序进行优化。举例如下。
  ```
  llvm-bolt <executable> -o <executable>.bolt -data=test.log -reorder-blocks=ext-tsp -reorder-functions=hfsort -split-functions -split-all-cold -split-eh -dyno-stats
  ```
  ![](https://support.huaweicloud.com/usermanual-hce/public_sys-resources/note_3.0-zh-cn.png)
  以上为优化参数示例，并非最优参数组合。
  
- 使用**hce-wae-auto** 命令优化应用程序。
  **hce-wae-auto** 命令根据自定义的[配置文件](https://support.huaweicloud.com/usermanual-hce/hce_02_0069.html)来优化应用程序。
  命令格式为：hce-wae-auto \[-h\] \[-c \<Path\>\] \[-s \<Keyword\>\] \[-e \<Pattern\>\] \[-l\] \[--free\] application
  ![](https://support.huaweicloud.com/usermanual-hce/public_sys-resources/note_3.0-zh-cn.png)
  - 执行**hce-wae-auto**命令后，产生的参数集信息路径默认与配置文件中二进制输出路径一致，路径为：/data/hce-wae-auto/hce-wae-auto.data。
  
  - 执行**hce-wae-auto**命令后，系统自动产生日志文件，默认路径为：/var/log/hce-wae-auto/hce-wae-auto.log。
   
  表1参数说明 
  | 参数名         | 是否需要赋值 | 取值类型   | 可选/必选 | 参数含义                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
  |:---|:---|:---|:---|:---|
  | -h          | 否      | /      | 可选    | 显示命令参数帮助信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
  | -c          | 是      | string | 可选    | 定义配置文件路径，默认路径为/etc/hce-wae-auto.conf。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
  | -s          | 是      | string | 可选    | 定义筛选的关键词，用于模糊搜索上次参数集内容。 如果没有保存的参数集，则不生效。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
  | -e          | 是      | string | 可选    | 根据上次参数集内容，执行选定的参数组合。需指定序号。 - 单个数字指定对应序号的参数组合。  - ":"表示序号范围。例如： - "4:6"表示序号4到序号6；  - ":7"表示序号1到序号7；  - "5:"表示序号5到最后一个；  - ":"表示全部。    - 单个数字可与序号范围":"一起使用，用","分隔。例如： - 1,4:6表示序号1、序号4、序号5和序号6。     |
  | -l          | 否      | /      | 可选    | 根据配置文件生成参数集并打印，不自动执行命令，不保存参数集信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
  | --free      | 否      | /      | 可选    | 不校验配置文件中参数合法性。 应用加速工具会对配置文件中的参数进行简单校验，判断参数是否属于bolt的优化参数。若指定--free指令，则取消该校验，允许输入非优化参数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
  | application | 否      | /      | 必选    | 要执行的二进制文件，可以添加相对路径或绝对路径。例如： - mysqld  - /usr/bin/mysqld  - ../bin/mysqld                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
     
  ![](https://support.huaweicloud.com/usermanual-hce/public_sys-resources/note_3.0-zh-cn.png)
  -c、-s、-e、-l参数存在冲突时，优先级为-s \> -l \> -e \> -c。
  **hce-wae-auto**命令使用示例如下。
  表2hce-wae-auto命令使用示例表 
  | 示例                                         | 说明                                                       |
  |:---|:---|
  | **hce-wae-auto mysqld**                    | 从默认路径读取配置，根据配置参数生成参数集，并自动执行命令。命令执行完成后自动保存参数集信息。          |
  | **hce-wae-auto mysqld -c /etc/my.conf -l** | 从指定路径/etc/my.conf读取配置参数，生成参数集并打印生成命令。不执行命令并且不保存参数集信息。    |
  | **hce-wae-auto mysqld -c /etc/my.conf**    | 从指定路径/etc/my.conf读取配置参数，生成参数集并自动执行命令。执行完成后自动保存参数集信息。     |
  | **hce-wae-auto mysqld -s align**           | 从上次生成的参数集信息中模糊搜索关键词align，打印匹配的参数组合。                      |
  | **hce-wae-auto mysqld -e 4:6**             | 从上次生成的参数集信息中，选择序号4、5、6的参数组合，生成二进制文件。                     |
  | **hce-wae-auto mysqld -e 1,4:6**           | 从上次生成的参数集信息中，选择序号1、4、5、6的参数组合，生成二进制文件。                   |
  | **hce-wae-auto mysqld -e :**               | 从上次生成的参数集信息中，选择所有参数组合，生成二进制文件。                           |
  | **hce-wae-auto mysqld -e 4:6 -l**          | 从上次生成的参数集信息中，选择序号4、5、6的参数组合，打印生成命令，并且不执行命令。              |
  | **hce-wae-auto mysqld -e : -l**            | 从上次生成的参数集信息中，选择所有参数组合，打印生成的命令，并且不执行命令。                   |
  | **hce-wae-auto mysqld --free**             | 从默认路径读取配置，不对参数进行校验，根据配置参数生成参数集，并自动执行命令。命令执行完成后自动保存参数集信息。 |
  | **hce-wae-auto -h**                        | 显示指令帮助信息。                                                |
     
  
 
