更新时间:2024-01-05 GMT+08:00

动态加速

准备工作

在做动态加速之前,请先做如下两个检查。两个条件都满足,才能对应用进行动态加速。

  1. 执行如下命令检查待优化的二进制文件中是否可以重新定位。可以重新定位表示可以进行应用优化。
    readelf -a application | grep .rela.text
    • 如果二进制文件中.rela.text段存在,表示可以重新定位。

    • 如果不存在,为了允许BOLT在程序中重新排列函数(除了重新排列函数中的代码),需要将--emit-relocs或-q添加到应用程序的最后链接步骤中。
  2. 执行hce-wae --check命令查看应用是否支持动态加速。

    如果检查结果为3,表示可以使用动态加速工具。否则不支持动态加速。

操作步骤

本例以优化/data/apps/mysql-8.0.28/bin目录下的mysqld应用 ,为您介绍动态加速方式优化应用的操作。

  1. 生成插桩版应用并运行。
    1. 执行命令/data/hce-wae/dbo/gen_instrumentation /data/apps/mysql-8.0.28/bin/mysqld生成插桩版应用。

      命令格式:/data/hce-wae/dbo/gen_instrumentation 应用路径

      命令运行完成后,会在当前目录生成对应的以.inst为后缀的插桩文件mysqld.inst。

    2. 运行插桩文件获取进程PID,本例为87042。

  2. 创建mysqld的应用加速动态配置文件。

    每一个待优化的应用都要有一个对应的配置文件,应用加速工具根据此配置文件对应用进行动态加速。

    1. 执行如下命令复制一份默认的配置文件为/data/hce-wae/config/mysqld.conf
      [root@localhost]# cp /data/hce-wae/config/hce-wae-tmp.conf /data/hce-wae/config/mysqld.conf 
    2. 设置/data/hce-wae/config/mysqld.conf配置文件中的origin-exe字段。
      origin-exe为待优化应用的位置,本例为/data/apps/mysql-8.0.28/bin/mysqld
      [root@localhost]# vim /data/hce-wae/config/mysqld.conf 

  3. 使用配置文件和对应的进程PID配置动态加速工具。

    命令格式:hce-wae --conf [PID] [/path/to/config]

  4. 启动动态加速,对插桩版mysql进行优化。

    命令格式:hce-wae --start [PID]

    启动后,可以通过--status参数查看当前优化状态。当状态为Running时,表示进程正在优化中;Finished时,表示进程已经优化完成。

    命令格式:hce-wae --status [PID]

  5. 优化后,通过--snapshot参数生成优化后的.dbo二进制快照文件,本例为mysqld.dbo。

    快照生成的默认路径为/data/hce-wae/snapshot/,可在配置文件中对快照位置进行修改。后续您可以直接使用此优化后的快照文件mysqld.dbo运行应用,无需重复优化。

  6. 终止动态加速工具,应用优化结束。

    命令格式:hce-wae --stop [PID]

动态应用加速工具字符交互界面

动态应用加速工具支持字符交互界面,交互界面支持指令如图1图2表1所示。

图1 动态应用加速工具启动界面
图2 动态应用加速工具帮助界面
表1 动态应用加速工具字符交互界面指令

字符交互界面指令

使用方式

指令描述

list

list

获取当前环境的进程信息,包含PID、PPID以及command信息。

status

status <PID>

查询当前正在进行的动态加速任务及状态。输入后在字符界面展示信息包括:

  • 应用进程PID
  • 应用进程名
  • 当前已优化次数
  • 当前加速状态(Initialized/DataCollecting/Optimizing/HotPatching/Done/Failed)

check

check <PID>

检测当前进程是否支持静态/动态加速,展示文字结果。

show

show <PID>

查询进程的依赖关系

conf

conf <PID>

为目标进程配置动态加速能力,输入指令后依次弹出配置选项,根据提示进行配置即可。

start

start <PID>

启动动态加速

stop

stop <PID>

终止动态加速

snapshot

snapshot <PID>

生成动态加速快照

quit

quit

退出字符交互界面

h/help

h/help

显示帮助信息