中文
注册

内存一致性静态检查

内存一致性检查就是检查源码迁移在鲲鹏平台运行时可能存在的内存一致性问题,并提供插入内存屏障的建议。

  • 由于运行内存一致性检查时,生成的中间文件较大,如果用户想要使用该功能,请确保安装工具的所在磁盘空间足够大,根据经验数据,每10万行代码需要100G左右的磁盘空间。
  • 源码规模过大可能会导致占用资源过多,建议代码量不超过10万行。
  • 内存一致性功能仅支持在鲲鹏平台上运行。

前提条件

已成功登录鲲鹏DevKit。
  • “/opt”为工具默认安装目录,下文以此默认路径为例,请根据实际情况替换。
  • 当前特性在Web界面中需要手动上传文件或压缩包;在插件工具中支持扫描本地工程,若源码为压缩包格式,请先解压然后选择解压后文件夹。

操作步骤

  1. 在页面左侧,“亲和分析”下拉选项中选择“内存一致性静态检查”,单击创建任务,如图1所示。
    图1 内存一致性静态检查
  2. 选择“检查模式”
    • 静态检查。
    • 编译器自动修复,需要用户根据页面提供的操作步骤进行操作,详细请参见编译器自动修复工具使用指导

      静态检查的结果误报少、修复率最高为60%,编译器自动修复结果不会漏报,误报率比静态检查高,修复率可保证100%。误报越多,性能影响相对越大。不同软件下编译的修复率不同,性能影响也不同。

  3. 填写“源码文件存放路径”。可以通过以下两种方式实现:
    • 选择“已上传的源码”:单击填写框选择下拉框中的源码路径即可,也可以手动填写源码路径。
    • 选择“上传的源码”:单击“上传”按钮上传压缩包(上传过程中自动解压)或文件夹。
      • 支持上传tar,tar.bz,tar.bz2,tar.gz,tar.xz,tbz,tbz2,tgz,txz,zip格式的压缩包,只允许同时上传一个压缩包。源码文件压缩包小于或等于1GB,解压后小于或等于剩余磁盘空间的一半。
      • 只允许同时上传一个文件夹,文件夹小于或等于剩余磁盘空间的一半。
  4. 填写“BC文件存放路径”。可以通过以下两种方式实现:
    • 选择“已上传的BC文件”:单击填写框选择下拉框中的BC文件路径即可,也可以手动填写BC文件路径。
    • 选择“上传BC文件”:单击“上传”按钮上传压缩包(上传过程中自动解压)或文件夹。
      • 关于如何生成BC文件,请参见生成BC文件
      • 支持上传tar,tar.bz,tar.bz2,tar.gz,tar.xz,tbz,tbz2,tgz,txz,zip格式的压缩包,只允许同时上传一个压缩包。源码文件压缩包小于或等于1GB,解压后小于或等于剩余磁盘空间的一半。
      • 只允许同时上传一个文件夹,文件夹小于或等于剩余磁盘空间的一半。
  5. 选择是否生成编译器配置文件,默认为“否”。
  6. 单击“开始检查”开始内存一致性检查。检查完成后,自动跳转至“检查报告”界面,如图2所示。
    图2 内存一致性检查报告
    • 可单击对需要修改的源码文件按照路径或修改点数量进行排序。
    • 可单击“下载报告 (.csv)”或“下载报告 (.html)”获取报告到本地进行查看。
    • 如果选择了“生成编译器工具配置文件”,可单击“下载编译器配置文件”,下载编译器工具配置文件。也可将鼠标悬停在“历史报告”区域中对应报告的上,然后选择“下载编译器配置文件”
    • 如果下载编译器工具配置文件时系统提示“该编译器文件不是最新的”,单击“前往查看”到最新报告中下载。如果系统再提示“最新报告中没有编译器配置文件”,请按照提示操作。
  7. 单击“查看建议源码”进入源码修改建议页面,如图3所示。
    图3 源码修改建议
    • 支持多个用户同时创建内存一致性检查任务。
    • 用户可在任务进行过程中单击关闭,取消任务。
    • 用户可以单击原始源代码模块右上角的上下键,进行上下切换。
    • 用户如使用快捷键进行源码操作,需注意因输入法或IDE环境导致的快捷键被占用问题。
    • 检查失败或检查结果为无需修改时,会产生空白报告。
    • 若提示任务超时,请参见用户进行任务时提示任务超时进行处理。

编译器自动修复工具使用指导

工具支持的操作系统和GCC版本如表1所示。

表1 工具支持的操作系统和GCC版本

操作系统

GCC版本

BC-Linux 7.6/7.7

GCC 4.8.5/4.9.3/5.1.0/5.2.0/5.3.0/5.4.0/5.5.0/6.1.0/6.2.0/6.3.0/6.4.0/6.5.0/7.1.0/7.2.0/7.3.0/7.4.0/8.1.0/8.2.0/8.3.0/9.1.0/9.2.0/9.3.0

CentOS 7.4/7.5/7.6/7.7

GCC 4.8.5/4.9.3/5.1.0/5.2.0/5.3.0/5.4.0/5.5.0/6.1.0/6.2.0/6.3.0/6.4.0/6.5.0/7.1.0/7.2.0/7.3.0/7.4.0/8.1.0/8.2.0/8.3.0/9.1.0/9.2.0/9.3.0

CentOS 8.0

GCC 8.2.0/8.3.0/9.1.0/9.2.0/9.3.0

CentOS 8.1/8.2

GCC 8.3.0/9.1.0/9.2.0/9.3.0

Debian 10

GCC 8.3.0/9.1.0/9.2.0/9.3.0

Deepin 15.2

GCC 6.3.0/6.4.0/6.5.0/7.1.0/7.2.0/7.3.0/7.4.0/8.1.0/8.2.0/8.3.0/9.1.0/9.2.0/9.3.0

iSoft 5.1

GCC 7.3.0/7.4.0/8.1.0/8.2.0/8.3.0/9.1.0/9.2.0/9.3.0

Kylin V10 SP1/SP2

GCC 7.3.0/7.4.0/8.1.0/8.2.0/8.3.0/9.1.0/9.2.0/9.3.0

LinxOS 6.0.90

GCC 6.3.0/6.4.0/6.5.0/7.1.0/7.2.0/7.3.0/7.4.0/8.1.0/8.2.0/8.3.0/9.1.0/9.2.0/9.3.0

NeoKylin V7U6

GCC 4.8.5/4.9.3/5.1.0/5.2.0/5.3.0/5.4.0/5.5.0/6.1.0/6.2.0/6.3.0/6.4.0/6.5.0/7.1.0/7.2.0/7.3.0/7.4.0/8.1.0/8.2.0/8.3.0/9.1.0/9.2.0/9.3.0

openEuler 20.03/LTS SP1/LTS SP2/LTS SP3

GCC 7.3.0/7.4.0/8.1.0/8.2.0/8.3.0/9.1.0/9.2.0/9.3.0

SUSE SLES15.1

GCC 7.4.0/8.1.0/8.2.0/8.3.0/9.1.0/9.2.0/9.3.0

Ubuntu 18.04.x

GCC 7.3.0/7.4.0/8.1.0/8.2.0/8.3.0/9.1.0/9.2.0/9.3.0

Ubuntu 20.04.x

GCC 9.3.0

UOS 20 SP1

GCC 8.3.0/9.1.0/9.2.0/9.3.0

uosEuler 20

GCC 7.3.0/7.4.0/8.1.0/8.2.0/8.3.0/9.1.0/9.2.0/9.3.0

UOS 20-1020e

GCC 7.3.0/7.4.0/8.1.0/8.2.0/8.3.0/9.1.0/9.2.0/9.3.0

  • 以上列表以操作系统默认支持的GCC版本为准,如果服务器操作系统升级过GCC版本,可能存在兼容性问题。
  • 以上支持的GCC版本都是指GNU官方的GCC分支,不推荐用户基于鲲鹏GCC来使用此编译器自动修复工具。

使用该功能需要配置对应的环境,可以通过以下步骤进行:

  1. 下载相关软件包。
  2. 安装内存一致性修复组件。
    1. 解压安装包。
      1
      tar xf gcctool.tar.gz
      

      解压后确认“gcctool/bin”目录下有以下文件:

      gcctool,gcctool-bin,libstdc++.so.6

    1. 配置环境变量。

      “gcctool”放入安装目录,配置环境变量:

      1
      export PATH=/path/to/gcctool/bin:$PATH
      
  3. 合入GCC patch。

    如果提示“‘patch’command not found”,则请先安装:

    Debian系列:

    1
    apt install patch
    

    RHEL系列:

    1
    yum install patch
    
    1
    2
    cd /gcc/source/root/dir
    patch -p1 < /path/to/gcc/patch/file
    
  4. 编译GCC。

    GCC源码编译操作请参考GCC官方文档,合入的patch对GCC编译依赖组件和编译过程没有影响,任何GCC编译问题可以询问GNU社区

准备好环境之后再执行以下步骤使用工具:

  1. 设置内存一致性修复组件优化等级。
    1
    export HW_DEBUG=[ 0 | 1 | 2 ]
    

    编译组件支持通过环境变量配置修复优化等级,默认级别为0。

    • 0表示关闭内存一致性修复功能。
    • 1表示应用组件优化规则,可以减少性能损失。
    • 2表示使用最安全的修复策略,性能损失较大。
  2. (可选)定义自动修复源码范围。
    1. 工具允许用户自定义源码修复范围,以文件或函数为单位。配置允许列表后,修复组件只对列表内的内容进行修复。允许列表的格式如下:
      • 文件列表以“files:”开头,每个文件独占一行。
      • 文件使用绝对路径。
      • 支持C/C++/Fortran格式的文件,不支持纯汇编文件。
      • 函数列表以“functions:”开头,每个函数独占一行。
      • 支持C/C++普通函数,不支持模板或具有abi_tag属性的函数。

      以下为允许列表的格式示例:

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      files:
        /path/to/file/a
        /path/to/./file/b
        /path/to/../file/c
        /path/to/file/d
      functions:
        func_a
        func_b()
        func_c(int xxx)
        int func_d()
        classA::func_e
        ns::classB::func_f()
        std::string nsA::nsB::classC::func_g(int xxx)
      
    2. 修复组件获取允许列表路径。

      通过设置环境变量,指定允许列表路径,默认不设置。

      “export AUTOFIXLIST=/path/to/allowlist”

  3. 编译软件。

    用户可以编译软件,编译过程没有变化。

    之前的编译过程中如果使用了-pipe编译选项,需要移除,不会影响原编译结果。

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词