AIX命令参考大全,卷 2,d - h - fdpr 命令

[ 页的底部 | 上一页 | 下一页 | 目录 | 索引 | Library Home | Legal | Search ]

AIX命令参考大全,卷 2,d - h

fdpr 命令

用途

改善用户级后期连接应用程序的执行时间和实际内存使用率的性能调整实用程序。

语法

常规用法:

fdpr -p ProgramFile -x WrokLoadCommand

详细用法:

fdpr -p ProgramFile [ -M Segnum ] [ -fd Fdesc ] [ -o OutputFile ] [ -armember ArchiveMemberList ] [ OptimizationFlags ] [ -map ] [ -disasm ] [ -disasm_data] [ -disasm_bss] [ -profcount ] [ -quiet] [ -v ] [ -1 | -2 | -3 | -12 | -23 | -123] [ -x WorkloadCommand ]

优化标志

[ -tb ] [ -pc ] [ -pp ] [ -O ][ -O2 ] [ -O3 ] [ -O4 ] [ -selective_inline] \ [ -sid_fac percent] [ -inline_small_funcs size] [ -inline_hot_funcs percent] [ -hco_resched] [ -killed_regs ] \ [ -lr_opt] [ -align bytes] [ -RD ] [ -dpnf factor] [ -dpht threshold] [ -build_dcg] \ [ -tocload ] [-ptrgl_opt ] [ -no_ptrgl_r11] [ -dcbt_opt ] [ -ignore_info] [ -dead_code_removal] \ [ -bt_csect_anchor_removal] [ -strip] [-analyse_asm_csects] [-extra_safe_analysis] [-inline] [-reduce_toc removal_factor]

描述

fdpr 命令(反馈定向程序重构)是可以帮助改善用户级应用程序执行时间和内存实际使用率的性能调整程序。fdpr 程序通过收集程序在某些典型工作负荷下运行时的行为信息来优化某个程序的可执行映像,然后创建一个针对此工作负荷而优化的新版本的程序。通常,fdpr 所生成的新程序可以运行得更快并且实际内存使用得更少。

注意: fdpr 命令为程序应用了高级优化技术,可能会产生行为与预期不相符的程序;使用这种工具优化过的程序应当小心使用,同时应该进行严格的再次测试,至少应该使用测试原始程序的同一测试套件来验证期望的功能。不支持优化过的程序。

fdpr 命令在 3 个不同的阶段构建优化的可执行程序:

这些阶段可以单独运行,也可以部分或者完全结合在一起来运行,但是必须按照顺序运行(即,-1然后 -2,然后 -3,或者 -12,然后再 -3)。缺省值是运行全部三个阶段。

注:
在阶段 1 创建并且在阶段 2 运行的经过检测的可执行程序一般比原始程序运行速度慢好几倍。因为经过检测的程序在执行时间上的增长,可执行程序应该这样调用以最小化执行时间,同时在希望的代码区内仍然完全执行。fdpr 命令的用户应该在可行的情况下试图消除一切程序时间依赖的特性。

标志

-1-2 -3 指定要运行的阶段。缺省值是全部 3 个阶段(-123)。 必须按顺序运行各个阶段(例如,先是 -1,然后是 -2,接下来是 -3,或者先是 -1,然后是 -23)。-2 标志必须与调用标志 -x 一起使用。
-M SegNum 指定为概要分析映射共享内存的位置。缺省值是 0x30000000 。如果需要优化的程序或者任何用 -x 标志调用的工作负荷命令字符串使用冲突的共享内存地址,则要指定一个备用的共享内存地址。典型的可选值是 0x40000000 0x50000000 ... 直到 0xC0000000)。
-fd Fdesc 指定为概要文件使用哪个文件描述符数字,概要文件会被映射到以上的共享内存区。Fdesc 的缺省值设置为 1999。
-o OutFile 从优化器中指定输出文件的名称。缺省值是 program.fdpr
-p ProgramFile 包含要优化的可执行程序文件或者共享对象文件的名称,或者包含共享对象 / 可执行(文件)的共享库名称。这个程序必须是一个完整的可执行程序。
-armember ArchiveMemberList 要优化的压缩文档成员列表,位于 -p 标志指定的共享压缩文件中。如果 -armember 没有指定,压缩文档文件的所有成员都会被优化。
-map 将带各自的原有 -> 新地址的基本块和静态变量的映射打印为后缀为 .mapper 的文件。
-disasm 将输出的已优化且检测过的程序的反汇编的文本部分打印为后缀为 .dis_text 的文件。
-disasm_data 将输出的已优化且检测过的程序的反汇编数据部分打印为后缀为 .dis_data 的文件。
-disasm_bss 将输出的已优化且检测过的程序的已反汇编的 bss 部分打印为后缀为 .dis_bss 的文件。
-profcount 将概要分析计数器打印为后缀为 .ncounts 的文件。
-quiet 安静输出方式。
-v 冗长的输出。
-x WorkloadCommand 指定用来调用经检测的程序的命令。-x 标志后的所有参数都用于调用。-s 标志结合 -2 标志使用时需要使用 因此,命令行最后应该存在 -x 标志。使用 -2 标志时需要使用 -x标志。

优化标志

-analyse_asm_csects 分析以汇编语言编写的 csect(如果使用,必须同时在 -1 和 -3 阶段指定)。
-extra_safe_analysis 请勿尝试分析包含手写汇编代码的非传统 csect(如果使用,必须同时在 -1 和 -3 阶段指定)。
-ignore_info 忽略编译过程中使用 -qfdpr 选项生成的 .info 部分(如果使用,必须同时在 -1 和 -3 阶段指定)。
-align bytes 排列根据给定数量的字节频繁执行的代码,以便提高代码预取缓存率。 如果忽略了此选项,fdpr 命令将排列可变的缺省字节数的代码。
-lr_opt 排除频繁执行的过程中链接寄存器的存储和恢复。
-bt_csect_anchor_removal 排除与代码中分支表的用法相关的装入指令。
-dead_code_removal 删除不可达代码。
-selective_inline 为从一个单独的主要调用位置频繁调用的函数执行选择性直接插入。
-sid_fac percent 为选择性直接插入优化设置主要因子百分比。允许的范围为 50 - 100(仅在使用 -selective_inline 标志时适用)。
-inline_small_funcs size 直接插入小于或等于以字节为单位的给定大小的所有函数。
-inline_hot_funcs percent 直接插入执行频率等于或大于给定百分比的所有函数。输入百分比范围为 0 - 100。
-inline 结合 -selective_inline 执行 -inline_small_funcs 12
-hco_resched 如果可能,将来自频繁执行的代码的指令重新定位到很少执行的代码区域。
-dcbt_opt 插入 dcbt 指令来提高数据高速缓存的性能。
-killed_regs 排除频繁执行的函数调用后被杀死(覆盖)的寄存器的存储和恢复。
-tb 在重新排序的代码中强制重构回溯表。如果省略了 -tb 选项,将使用 Try & Catch 机制自动为 C++ 应用程序恢复回溯表。
-pc 在重新排序后的代码中保留 csect 的边界。
-pp 在重新排序后的代码中保留函数的边界。
-RD 在 .
-dpnf factor 0 - 1 之间的“数据放置规范化因子”;其中,0 将导致重新排序静态变量且不考虑其大小,而 1 将首先仅查找大小较小的变量(仅在结合 -RD 标志时适用)。
-dpht threshold 0 - 1 之间的“数据放置热阈值”;其中,0 将根据控制流重新排序大组中的静态变量,而 1 将根据极小组中的变量的访问频率重新排序这些变量(仅在结合 -RD 标志使用时适用)。
-build_dcg 为增强的数据重新排序构建 DCG(数据连接图)(仅在结合 -RD 标志使用时适用)。
-tocload 执行 tocload 优化。
-reduce_toc removal_factor 根据删除 0 - 1 之间的因子执行 TOC 条目,其中 0 将仅删除未访问的 TOC 条目,而 1 将删除未导出的 TOC 条目。
-strip 剥离输出文件(如果生成了的话)。
-ptrgl_opt 通过使用寄存器将间接调用指令替换为直接跳转来执行对对这些指令的优化。
-no_ptrgl_r11 请勿执行 _ptrgl csect 中的 R11 装入指令的删除(缺省情况下将应用 -ptrgl_r11 优化)。
-O 使用分支预测位设置、分支折叠和 NOOP 指令删除执行代码重新排序。 缺省情况下将应用 -O 标志。
-O2 打开所有影响较小的优化标志。
-O3 打开所有有影响的优化标志。
-O4 打开所有有影响的优化标志。

优化

fdpr 命令在缺省情况下执行级别最可能的代码重新排序优化,以及分支预测位设置、分支折叠、代码对齐和删除冗余的 NOOP 指令的优化。-pc 标志在保留 csect 的边界的同时重新排序整个代码,因此可能致使提高性能方面不如缺省的代码重新排序。 与此类似,-pp 标志在保留过程的边界时重新排序整个代码。

上面的优化标志也可以对整个可执行程序文件执行其它优化。

使用 -qfdpr IBM xl 编译器标志构建的可执行程序包含在生成重新排序程序时支持 fdpr 命令的信息。 没有使用 -qfdpr 选项编译的模块 在符号表内的编译器签名的基础上被重新排序。

在重新排序程序时使用静态链接可能实现程序额外的性能提升。因为 fdpr 程序仅仅对指定的可执行程序重新排序指令,任何被程序调用的动态链接共享库例程都不会被优化。静态链接这些库例程到可执行程序,则允许优化在程序中的指令,也可以优化被程序使用的所有库例程。这些可能是构建静态链接程序的优点,也可能是缺点。请参阅《AIX 5L V5.2 性能管理指南》以获取进一步的信息。

输出文件

所有被 fdpr 命令创建的文件被保存在当前的目录中,例外情况是可能在 -x 标志指定的工作负荷命令中被创建的文件。 在优化过程中,原始程序通过重新命名程序来保存,只有当最后一个阶段的工作都结束时才恢复原始的程序名。

因为运行此程序的脚本可能在执行程序之前更改工作目录,所以 fdpr 命令创建的概要文件显式地使用当前目录的全名。

fdpr 命令创建并且 / 或者使用的文件是:

program 要优化的无条纹可执行程序的名称。
program.save 原始可执行程序保存后的版本。
program.nprof 概要文件的名称。
program.instr 程序检测版本的名称。
program.fdpr 优化可执行输出文件的缺省名称。
program.instr.dis_text 检测阶段后由 -disasm 标志生成的 ASCII 格式的缺省反汇编文件。
program.fdpr.dis_text 优化阶段后由 -disasm 标志生成的 ASCII 格式的缺省反汇编文件。
program.instr.dis_data 检测阶段后由 -disasm_data 标志生成的 ASCII 格式的缺省反汇编文件。
program.fdpr.dis_data 优化阶段后由 -disasm_data 标志生成的 ASCII 格式的缺省反汇编文件。
program.instr.dis_bss 检测阶段后由 -disasm_bss 标志生成的 ASCII 格式的缺省反汇编文件。
program.fdpr.dis_bss 优化阶段后由 -disasm_bss 标志生成的 ASCII 格式的缺省反汇编文件。
program.instr.mapper 检测阶段后由 -map 标志生成的 ASCII 格式的缺省映射文件。
program.fdpr.mapper 优化阶段后由 -map 标志生成的 ASCII 格式的缺省映射文件。
program.ncounts -profcount 标志生成的 ASCII 格式的缺省概要表计数器文件。

增强的调试能力

为了使优化后的程序具备一定程度的调试能力,FDPR 将更新“符号表”以反映 .text 部分中所作的更改。

在重新排序 FDPR 的过程中指定被重新定位的符号的地址的“符号表”中的输入字段被修改为指向它们在 .text 部分中的新地址。

另外,如果在重新排序过程中分割了函数或文件,FDPR 将在“符号表”中为被分割的函数/文件的每个新部分创建新条目。这些相同函数的新部分根据以下命名约定来产生符号表中新的符号名:

<original function name>__fdpr_<function's part number>

代码重新排序之后,所有新条目将带有后缀 __fdpr_ 字符串。

示例:函数“main”最初在“符号表”中具有以下条目:

  [Index] m   Value       Scn     Aux   Sclass    Type    Name
   [456]  m  0x00000230    2       1     0x02    0x0000   .main

如果代码重新排序后,函数 main 被分割为 3 个部分,则它在“符号表”中将有 3 个条目;每个部分都具有一个如下条目:

  [Index] m   Value       Scn     Aux   Sclass    Type    Name
   [456]  m  0x00000304    2       1     0x02    0x0000   .main
  [1447]  m  0x00003328    2       1     0x02    0x0000   .main__fdpr_1
  [1453]  m  0x000033b4    2       1     0x02    0x0000   .main__fdpr_2

示例

以下的是关于 fdpr 的典型使用示例。

  1. 这个例子允许用户运行所有 3 个阶段。在这个例子中,test1 是无条纹的可执行程序test2 是调用 test1 的 shell 脚本。 当前的工作目录是 /tmp/fdpr

    test2 脚本文件:
    
    # code to exercise test1
    test1 -expand 100 -root $PATH file.jpg -quit
    # the end of test2

    执行 fdpr 命令(使用缺省优化):

    fdpr -p test1 -x test2

    这样导致新的重新排序的可执行程序 test1.fdpr

  2. 要在任何时候运行某个阶段,请执行 fdpr 的阶段 1。

    fdpr -1 -p test1

    此命令字符串将创建一个名称为 test1.instr 的已检测版本和空模板概要文件 test1.nprof

    要执行阶段 2:

    fdpr -2 -p test1 -x test2

    这个命令字符串执行脚本文件 test2 ,此文件运行 test1 的检测版本来收集概要文件数据。

    要执行阶段 3:

    fdpr -3 -p test1

    这将再次导致新的重新排序的可执行文件 test1.fdpr

  3. 要运行前两个阶段后再运行阶段 3,请执行阶段 1 和阶段 2。

    fdpr -12 -p test1 -x test2

    使用优化级别 3 执行阶段 3。

    fdpr -3 -O3 -p test1
  4. 如果在运行使用 fdpr 优化过的程序时出错,可以如下方式使用 dbx 命令确定发生错误的是哪一个过程:

    dbx program.fdpr 

    产生的输出类似于以下内容:

    Type 'help' for help.
    reading symbolic information ...warning: no source compiled with -g
     
    [在核心中使用内存映像]
     
    Segmentation fault in proc_d at 0x10000634
    0x10000634 (???) 98640000        stb   r3,0x0(r4)
    (dbx) 

    堆栈回溯可以用来确定程序是如何到达当前位置的,它如以下来生成:

    (dbx) 

    生成如下输出的位置:

    proc_d(0x0) 在 0x10000634
    proc_c(0x0) 在 0x10000604
    proc_b(0x0) 在 0x100005d0
    proc_a(0x0) 在 0x1000059c
    main(0x2, 0x2ff7fba4) at 0x1000055c
    (dbx) 
  5. dbx 子命令 stepi 也可以用作重新排序后的可执行程序的单步遍历指令,如下:

    (dbx) stepi

    生成如下输出的位置:

    stopped in proc_d at 0x1000061c
    0x1000061c (???) 9421ffc0       stwu   r1,-64(r1)
    (dbx) 

    在本示例中,dbx 表明例程 proc_d 中,程序在重新排序后的文本部分内的地址 0x1000061c 处停止。

具体实现

软件产品 / 选项: AIX 性能助手 / 本地性能分析和控制命令

标准一致性:无。

文件

/usr/bin/fdpr 包含 fdpr 命令。
program 要优化的完整的可执行程序名称。
program.save 原始可执行程序保存后的版本。
program.nprof 概要文件的名称。
program.instr 程序检测版本的名称。
program.fdpr 优化可执行输出文件的缺省名称。
program.instr.dis_text 检测阶段后由 -disasm 标志生成的 ASCII 格式的缺省反汇编文件。
program.fdpr.dis_text 优化阶段后由 -disasm 标志生成的 ASCII 格式的缺省反汇编文件。
program.instr.dis_data 检测阶段后由 -disasm_data 标志生成的 ASCII 格式的缺省反汇编文件。
program.fdpr.dis_data 优化阶段后由 -disasm_data 标志生成的 ASCII 格式的缺省反汇编文件。
program.instr.dis_bss 检测阶段后由 -disasm_bss 标志生成的 ASCII 格式的缺省反汇编文件。
program.fdpr.dis_bss 优化阶段后由 -disasm_bss 标志生成的 ASCII 格式的缺省反汇编文件。
program.instr.mapper 检测阶段后由 -map 标志生成的 ASCII 格式的缺省映射文件。
program.fdpr.mapper 优化阶段后由 -map 标志生成的 ASCII 格式的缺省映射文件。
program.ncounts -profcount 标志生成的 ASCII 格式的缺省概要表计数器文件。

相关信息

dbx 命令。

《AIX 5L V5.2 性能管理指南》中的『用 fdpr 程序重构可执行程序』

xlC 编译器。

[ 页的顶部 | 上一页 | 下一页 | 目录 | 索引 | Library Home | Legal | Search ]