12.4. 性能工具
Red Hat Enterprise Linux 7.0 中包含对一些性能功能的最新更新版本,比如 oprofile, papi 和 elfutils,提供性能、可移植性及功能性改进。
此外还有 Red Hat Enterprise Linux 7.0 首先采用的功能:
- 支持 Performance Co-Pilot
- SystemTap 支持在整个非特权用户空间运行的基于 DynInst 检测,同时也支持基于 Byteman 的Java 应用程序精确探测。
- 硬件事务内存的 Valgirnd 支持以及矢量化建模指令的改进。
12.4.1. Performance Co-Pilot 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 7.0 引进 Performance Co-Pilot(PCP)支持,这是一个用来对系统级性能测定进行采集、归档和分析的工具、服务及库套件。其轻加权、分布式架构的特点使其特别适合复杂系统的集中分析。
可使用 Python、Perl、C++ 界面添加性能指标。分析工具可直接使用这些客户端 API(Python、C++ 和 C),且大量网页程序可使用 JSON 界面查看所有可用性能数据。
有关详情请参考 pcp 和 pcp-libs-devel 软件包 man page 中的具体论述。pcp-doc 软件包包括两本来自 upstream 项目的免费公开图书:
12.4.2. SystemTap 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 7.0 包含 systemtap 版本 2.4,它可提供一些新功能。这些包括可选的纯用户空间脚本执行、更丰富且有效的 Java 探测、虚拟机探测、改进的报错信息以及大量 bug 修复和新功能。特别是:
- 使用
dyninst二进制编辑库,SystemTap 现在可以执行一些纯用于用户空间层的脚本;无需提供内核或者 root 特权。这个模式可使用stap --dyninst选择,只启用那些对用户自己的进程产生影响的探测或者操作类型。注:这个模式与引发 C++ 异常的程序不兼容。 - 与 byteman 工具联合支持向 Java 应用程序中注入探测的新方法。新的 SystemTap 探测类型
java("com.app").class("class_name").method("name(signature)").*,该探测类型启用了对进入退出某个应用程序的独立方法的探测,无需进行系统范围内的追踪。 - 在 SystemTap 驱动程序中添加了新的程序,该程序可以启用在服务器中运行的由 libvirt 管理的 KVM 事务中执行远程任务。它可将编译的 SystemTap 脚本通过专门的安全 virtio-serial 链接自动且安全地传送到虚拟机中。新的虚拟机端守护进程将载入该脚本并将其输出结果传送回主机。这个方法比 SSH 更快速、有效,且不需要在主机和虚拟机之间建立 IP 级网络连接。要测试此功能,请运行以下命令:
stap --remote=libvirt://MyVirtualMachine
stap --remote=libvirt://MyVirtualMachineCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 另外,对 SystemTap 诊断信息有了大量改进:
- 现在很多信息给出相关手册页供参考。这些页面给出对出错信息的解释及建议修正。
- 如果怀疑脚本输入包含排版错误,则会以分类列表方式向用户提供建议。当用户指定名称与可接受名称不匹配时会在很多上下文中使用这个建议功能,比如探测功能名称、标记符、变量、文件、别名等等。
- 已改进诊断重复信息删除。
- 在信息中添加 ANSI 颜色使其更容易理解。
12.4.3. Valgrind 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 7.0 包含一个检测框架 Valgrind,该框架附带大量工具用于配置应用程序。这个版本是基于 Valgrind 3.9.0 发行本,且包含针对 Red Hat Enterprise Linux 6 和 Red Hat Developer Toolset 2.0 副本的大量改进,后者是在 Valgrind 3.8.1 的基础上开发的。
Red Hat Enterprise Linux 7.0 中包含的 Valgrind 的主要新功能如下:
- 在安装了 DFP 程序的主机中支持 IBM System z 十进制浮点指令。
- 支持 IBM POWER8 (Power ISA 2.07) 指令。
- 支持 Intel AVX2 指令。注:只适用于 64 位架构。
- Intel 事务同步扩展初期支持,包括受限制事务内存(RTM)以及硬件锁定省略(HIE)。
- 在 IBM PowerPC 中对硬件事务内存的初期支持。
- 已将转移缓存默认大小增加到 16 个扇区,表现为大程序需要插入并存储大量代码。同样,可追踪的与内存映射的片段数已增加了 6 倍。转移缓存中的最大扇区数可由新标签
--num-transtab-sectors控制。 - Valgrind 不再临时生成整个对象的映射以便从中读取数据,而是通过一个小的固定缓存读取。这样可在 Valgrind 从大的共享对象中读取 debug 信息时避免虚拟内存尖波。
- 使用的禁止显示列表(如果指定
-v选项就会显示)现在为每个使用的禁止显示提示文件名以及定义禁止显示的行号。 - 现在可以使用新标签
--sigill-diagnostics控制在即时(just-in-time,JIT)编译程序遇到它无法转译的指令时是否给出诊断信息。实际行为 — 向应用程序发出 SIGILL 信号 — 保持不变。 - 已改进 Memcheck 工具,增加了下述功能:
- 处理向量化代码能力的提升,大量减少错报。使用
--partial-loads-ok=yes标签可从中获益。 - 更好地控制泄露检查。现在可以指定应显示的泄露类型(definite/indirect/possible/reachable),哪些应被视为错误,以及哪些应通过给出泄露抑制而禁止显示。这可通过在 suppression 条目中分别使用选项
--show-leak-kinds=kind1,kind2,..、--errors-for-leak-kinds=kind1,kind2,..和自选match-leak-kinds:行完成。注:生成的泄露抑制包含这个新行,这比之前的发行本要更具体。要获取与之前发行本相同的行为,请在使用它们前从生成的抑制中删除match-leak-kinds:行。 - 使用更好的试探法减少泄露检查程序中的
possible leak报告。可用的试探法为std::stdstring、带有析构函数元素的新[ ]分配的阵列以及指向使用多个继承的 C++ 项目内置部分提供有效内部指针探测。可使用--leak-check-heuristics=heur1,heur2,...选项进行选择。 - 对于堆上分配块更好的 stacktrace 捕获控制。使用
--keep-stacktraces选项有可能独立控制是否为每个分配和取消分配进行栈跟踪。可使用这个选项生成更好的 “use after free”出错信息,或者通过记录更少的信息减少 Valgrind 的资源消耗。 - 更好地报告泄漏禁止显示使用。已使用禁止显示列表(指定
-v选项时会显示)现在为每个泄漏禁止显示在上次泄漏搜索中禁止显示的块和字节数。
- 使用以下监控命令改进了 Valgrind GDB 服务器整合:
- 新的监视器命令
v.info open_fds给出打开的文件描述符及附加信息列表。 - 新的监视器命令
v.info execontext可显示 Valgrind 记录的栈追踪信息。 - 新的监视器命令
v.do expensive_sanity_check_general运行某些内部一致性检查。