长期支持版本

    社区创新版本

      动态反馈优化框架用户指南

      介绍

      D-FOT是动态反馈优化框架(Dynamic Feedback-oirected Optimization Tool),目标是实现应用全自动、无感知使能反馈优化特性,全面提高反馈优化特性的易用性和性能表现。 本框架计划实现两类动态优化特性:启动时优化和运行时优化,当前已实现基于oeAware在线调优框架的启动时优化功能。 启动时优化:应用运行时自动执行采样和反馈优化,完成优化后自动接管下一次启动,不需要用户修改启动流程,应用重启后自动拉起优化版本。 运行时优化:应用运行时自动执行采样和反馈优化,不需要用户操作重启,整个过程无用户介入,仅少量中断后即可使能优化版本。

      软件架构说明

      本框架包含以下几个模块:

      • 基于libkperf的采样数据处理
      • 基于sysboost的启动接管和二进制优化特性使能
      • 基于llvm-bolt的二进制反馈优化
      • oeAware调优插件dfot_tuner_sysboost实现

      依赖项

      系统OS要求:当前仅支持openEuler-22.03-LTS-SP4 以下依赖组件均可通过yum安装

      组件代码仓分支或版本说明
      oeAware-managerhttps://gitee.com/openeuler/oeAware-manageropenEuler-22.03-LTS-SP4 v2.0.0-3业务在线无感调优框架
      libkperfhttps://gitee.com/openeuler/libkperfopenEuler-22.03-LTS-SP4 v1.2-2轻量级全内存化采集工具
      sysboosthttps://gitee.com/openeuler/sysboostopenEuler-22.03-LTS-SP4微架构优化工具
      llvm-bolthttps://gitee.com/src-openeuler/llvm-boltopenEuler-22.03-LTS-SP4 17.0.6-12二进制优化器

      使用流程

      被优化应用的必要条件

      1. 被优化二进制需要带有重定位信息。使用自编译的软件:需要在编译时增加-Wl,-q链接选项,如MySQL:cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DBUILD_CONFIG=mysql_release -DWITH_BOOST=../boost -DCMAKE_C_LINK_FLAGS="-Wl,-q" -DCMAKE_CXX_LINK_FLAGS="-Wl,-q";使用oe软件包的场景:后续会提供对应应用的relocation包,直接安装即可。
      2. 如何判断目标二进制是否带有重定位信息:-Wl,-q生效后,二进制会增加RELA段,可以通过readelf -SW /path/to/bin来判断,如MySQL加选项之前,仅有.rela.dyn.rela.plt段,增加后会出现.rela.text.rela.eh_frame等10+ RELA段;如果-Wl,-q未生效,则在手动perf采样并执行perf2bolt时,或者执行llvm-bolt优化时(无论是否通过sysboost机制)会有告警:BOLT-WARNING: non-relocation mode for AArch64 is not fully supported

      D-FOT准备

      yum安装D-FOT或通过以下命令源码构建(注意如果libkperf或oeAware-manager也是源码构建,执行cmake时需要额外指定lib和include路径)。

      # 依赖包安装
      yum install boost-devel log4cplus-devel numactl-devel libkperf-devel oeAware-manager-devel
      # 下载源码并编译
      git clone https://gitee.com/openeuler/D-FOT.git
      cd D-FOT
      mkdir build && cd build
      cmake ../ -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_SKIP_RPATH=TRUE
      make -j`nproc`
      cd ..
      
      cp build/libdfot.so /lib64/oeAware-plugin/
      chmod 440 /lib64/oeAware-plugin/libdfot.so
      mkdir -p /etc/dfot/
      cp configs/dfot.ini /etc/dfot/
      

      配置修改

      修改/etc/dfot/dfot/ini,内容项参考如下描述: 公共配置: [general]

      配置项值范围是否可用说明
      LOG_LEVEL<FATAL, ERROR, WARN, INFO, DEBUG>可用优化服务日志级别,级别依次递减,默认为INFO,注意级别越低打印的日志越多
      COLLECTOR_SAMPLING_STRATEGY0不可用采样策略
      0表示插件enable后即持续低频采样
      1表示enable时启动监控线程,只有负载达到阈值场景才采样
      当前由oeaware控制采样流程,仅支持0
      COLLECTOR_HIGH_LOAD_THRESHOLD[0, cpus*100]不可用仅在采样策略1场景下生效,使用HIGH_LOAD_THRESHOLD作为触发采样的应用CPU使用率阈值,当前不支持
      COLLECTOR_SAMPLING_PERIOD100不可用collector执行run间隔,每隔COLLECTOR_SAMPLING_PERIOD ms执行一次,当前统一由oeaware配置
      COLLECTOR_SAMPLING_FREQ100不可用采样频率,每秒采样COLLECTOR_SAMPLING_FREQ次,当前统一由oeaware配置
      COLLECTOR_DATA_AGING_TIME按实际需要确定可用采样数据老化时间,当前数据与最老数据时间差值达到阈值时,丢弃累积采样数据,单位ms
      TUNER_TOOL["sysboost"]不可用二进制优化器,当前仅支持sysboost
      TUNER_CHECK_PERIOD[10, max]可用优化插件检查时间间隔,每隔一段时间判断内部收集数据是否满足新一轮优化条件,单位ms,无上限,但尽量不要太大,以免优化不及时,默认1000
      TUNER_PROFILE_DIR按实际需要确定可用采样数据存放位置,profile文件被命名为[app_name]_[full_path_hash]_[threshold].profile
      TUNER_OPTIMIZING_STRATEGY[0, 1]可用优化策略,0表示只优化一次,1表示只要采样信息在刷新,可以持续多次优化
      TUNER_OPTIMIZING_CONDITION0不可用触发优化的条件,0表示应用退出后即开始优化,1表示低负载时优化,2表示应用退出且低负载时优化,当前仅支持0
      应用配置: [app]
      配置项值范围是否可用说明
      FULL_PATH按实际需要确定可用应用二进制文件绝对路径
      DEFAULT_PROFILE按实际需要确定可用应用的开箱profile文件,用于冷启动时使能二进制优化,没有则留空
      COLLECTOR_DUMP_DATA_THRESHOLD[10000, max]可用采样数据达到该阈值行数时触发数据导出到profile,数值越大需要的采集的samples越多,该值需要依据实际应用和测试场景确定,mysql参考值:65000
      BOLT_DIR/usr/bin不可用BOLT工具路径,留空则默认/usr/bin,内部会调用${BOLT_DIR}/perf2bolt和${BOLT_DIR}/llvm-bolt
      当前由sysboost确定
      BOLT_OPTIONS按实际需要确定可用BOLT优化选项,配置该项可以覆盖内置的默认选项,用于针对性的选项调优
      UPDATE_DEBUG_INFO[0, 1]可用优化时是否同步更新调试信息,1表示更新,0表示不更新,注意更新调试信息会有额外耗时

      插件使用

      参考https://gitee.com/openeuler/oeAware-manager/tree/master/docs

      yum安装D-FOT的场景,可以直接执行以下命令来使能插件实例:

      # 重启oeaware服务
      systemctl restart oeaware
      # enable采集插件
      oeawarectl -e pmu_sampling_collector
      # enable反馈优化调优插件
      oeawarectl -e dfot_tuner_sysboost
      
      # disable两个插件
      oeawarectl -d pmu_sampling_collector
      oeawarectl -d dfot_tuner_sysboost
      

      源码构建D-FOT场景,需要将libdfot.so拷贝至oeaware的默认插件目录/lib64/oeAware-plugin/,然后加载激活插件实例,注意插件权限得是440:

      # 可以重启oeaware服务(自动触发/lib64/oeAware-plugin/下的插件加载)
      systemctl restart oeaware
      # 或者不重启服务,手动调用oeawarectl加载插件
      oeawarectl -l libdfot.so
      # 后续可以进行上述enable操作
      

      其他操作步骤可以查阅oeAware用户手册。

      使用举例

      以 mysql-8.0.25 测试tpcc场景为例:

      # 1. 环境准备
      yum install libkperf oeaware-manager sysboost llvm-bolt D-FOT
      
      # 2. 构建mysql
      # -Wl,-q是优化必要条件;-fPIE和-Wl,-zmax-page-size=0x200000 -Wl,-zcommon-page-size=0x200000可选,如果需要sysboost大页预加载优化则必选
      cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DBUILD_CONFIG=mysql_release -DWITH_BOOST=../boost -DCMAKE_C_FLAGS="-fPIE" -DCMAKE_CXX_FLAGS="-fPIE" -DCMAKE_C_LINK_FLAGS="-Wl,-q -Wl,-zmax-page-size=0x200000 -Wl,-zcommon-page-size=0x200000 -pie" -DCMAKE_CXX_LINK_FLAGS="-Wl,-q -Wl,-zmax-page-size=0x200000 -Wl,-zcommon-page-size=0x200000 -pie"
      
      # 3. 启动oeaware和优化插件
      # 需按应用实际信息填写/etc/dfot/dfot.ini,再执行以下命令
      systemctl start sysboost
      systemctl start oeaware
      oeawarectl -e pmu_sampling_collector
      oeawarectl -e dfot_tuner_sysboost
      
      # 4. 执行TPCC测试
      ...
      
      # 5. 重启mysql
      # 可提前通过/etc/dfot/dfot.log确认是否已经执行优化,应用重启后即是优化版本
      

      约束限制

      1. 受限于sysboost的实现,暂不支持在虚拟化场景下使用D-FOT(KVM虚拟机:支持使用但不支持热迁移;docker容器:不支持)
      2. 待优化的目标应用需要具备重定位信息。
      3. 作为oeAware调优插件使用D-FOT时,当前对应的oeAware采集插件pmu_sampling_collector固定采样频率为100,可能会导致采样时间较久(作为参考:perf默认采样频率为4000)。

      未来规划

      • 虚拟化场景支持
      • 运行时优化支持
      • 进一步提升二进制优化效果

      文档捉虫

      “有虫”文档片段

      问题描述

      提交类型 issue

      有点复杂...

      找人问问吧。

      PR

      小问题,全程线上修改...

      一键搞定!

      问题类型
      规范和低错类

      ● 错别字或拼写错误;标点符号使用错误;

      ● 链接错误、空单元格、格式错误;

      ● 英文中包含中文字符;

      ● 界面和描述不一致,但不影响操作;

      ● 表述不通顺,但不影响理解;

      ● 版本号不匹配:如软件包名称、界面版本号;

      易用性

      ● 关键步骤错误或缺失,无法指导用户完成任务;

      ● 缺少必要的前提条件、注意事项等;

      ● 图形、表格、文字等晦涩难懂;

      ● 逻辑不清晰,该分类、分项、分步骤的没有给出;

      正确性

      ● 技术原理、功能、规格等描述和软件不一致,存在错误;

      ● 原理图、架构图等存在错误;

      ● 命令、命令参数等错误;

      ● 代码片段错误;

      ● 命令无法完成对应功能;

      ● 界面错误,无法指导操作;

      风险提示

      ● 对重要数据或系统存在风险的操作,缺少安全提示;

      内容合规

      ● 违反法律法规,涉及政治、领土主权等敏感词;

      ● 内容侵权;

      您对文档的总体满意度

      非常不满意
      非常满意
      提交
      根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
      文档捉虫
      编组 3备份