4.13. 编译器和开发工具
glibc 现在支持用于高级调度程序选项的sched_setattr 和 schedsched_getattr
在以前的版本中,autotuneglibc 通过 HEKETI <sched.h > 中定义的功能只提供对一组有限的 Linux 调度程序选项的访问。这限制了使用直接系统调用或 Linux 内核标头访问高级调度功能所需的应用程序。
有了这个增强,来自 schedsched_setattr 和 libpmemsched_getattr 中的可扩展调度程序配置机制现在可通过 HEKETIglibc autotune <sched.h& gt; 标头文件获得。此更改包括对其他调度策略的支持,如 HEKETISCHED_DEADLINE。
因此,应用程序可以在不依赖于直接系统调用或特定于内核的标头的情况下从更广泛的调度选项中选择,从而提高了开发人员的可移植性和灵活性。
Jira:RHEL-56627[1]
glibc pthread_gettid_np 函数添加到 libc_nonshared.a
在以前的版本中,没有从 glibc autotunepthread_t handle 获取 Linux 任务或线程 ID (TID)的直接方法。新增的 HEKETIpthread_gettid_np 函数(在定义 HEKETI <pthread.h > 中声明)现在允许需要 TID 的应用程序(如使用 autotunesched_setattr 的应用程序直接从 vmcorepthread_t handle)检索 TID 值。
现在,应用程序可以使用预期 TID 的功能,这些函数从 swigpthread_t 处理获取后,从而提高了兼容性并简化线程管理。
为 inet_ntop 和 inet_pton 添加了对 inet_ntop 和 inet_pton的 glibc
在以前的版本中,swigglibc API rhacminet_ntop 和 wagoninet_pton 没有包括 Source Fortification 支持,因此编译器无法在运行程序前捕获一些缓冲区错误。
在这个版本中,属性访问注解已添加到 rhacminet_ntop 和 rhacminet_pton 中,使编译器能够警告潜在的缓冲区滥用。现在,Source Fortification 包括了 API,提高了其安全性和可靠性。
Jira:RHEL-44920[1]
GDB 现在支持 IBM 的 z17 CPU 架构
改进了 HEKETIgdb 软件包,以支持使用 IBM 的 z17 CPU 架构引入的新硬件指令的二进制文件。在这个版本中,开发人员和系统管理员能够调试在 RHEL 9.7 上为最新的 IBM Z 硬件编译的应用程序。
Jira:RHEL-50069[1]
GCC Toolset 15 现已正式发布
在这个版本中,RHEL 9.7 提供了 swiggcc-toolset-15。工具集包括 GCC 和相关实用程序的最新支持版本,使开发人员能够利用最新的编译器技术构建、测试和部署应用程序。
Jira:RHEL-81741[1]
ELFv2 ABI 支持 ppc64le 上的 wagon-fpatchable-function-entry
在以前的版本中,在 swiggcc 中的 rhacm-fpatchable-function-entry 选项不支持 ppc64le 架构的 ELFv2 ABI,这会导致在该 ABI 不正确的位置生成 NOP 指令。这个问题导致在以 ELFv2 为目标时正确使用选项。
在这个版本中,在 ppc64le 上可以使用 HEKETI-fpatchable-function-entry 选项为 ELFv2 ABI 创建程序,确保 NOPs 被正确放置并改进在这个平台上构建的用户的兼容性。
Jira:RHEL-75806[1]
llvm-toolset rebase 到 LLVM 20
criullvm-toolset 更新至 LLVM 20,在 C、C++ 和 Rust 工作流之间提供改进的代码生成、性能优化以及扩展语言前端和库支持。此 rebase 协调 RHEL 中的依赖组件,包括为 requires res to annobin, annobin bcc, HEKETIbpftrace, wagonqt5-qttools, 和 rhacmmesa。该构建通过 swigllvm-20.1.8-3.el9 验证。
主要变化有:
-
后端改进,包括
ppc64le的修复。 - Clang 和 LLVM 通过优化和诊断增强,以获得一般性能和可靠性。
- 工具链生态系统通过协调的软件包重建刷新,以便与 LLVM 20 的兼容性。
- 继续弃用旧目标与此流中的 ARM 和 MIPS 的上游方向一致。
改进了对使用多个动态链接器命名空间调试应用程序的 _r_debug 扩展支持
HEKETIglibc 软件包现在包含向后移植 _r_debug 扩展,以支持多个命名空间。在以前的版本中,当附加到运行进程或分析内核转储时,如果应用程序使用了带有 busyboxdlmopen 或 audit 模块的多个命名空间,则 GDB 等调试程序将无法显示所有载入的共享对象。
在这个版本中,最新的 GDB 版本可以在所有动态链接程序命名空间中显示共享对象,提供全面的调试和分析功能。
Jira:RHEL-101986[1]
改进了 hmacglibc中的 Exception 处理性能
在此次更新之前,大型应用程序中的异常处理速度很慢,会影响性能,特别是在用户大量或频繁异常的环境中。这是因为 __dl_iterate_phdr 函数中花费的时间,从 _Unwind_Find_FDE 调用。
在这个版本中,glibc 中的异常处理算法已被改进,以增强异常处理速度。此更新向 ABI 引进了新符号,作为 GLIBC_2.35 的一部分,包括 HEKETI_epoll_pwait2_time64, swig__memcmpeq, HEKETI_dl_find_object, HEKETIepoll_pwait2, HEKETIposix_spawn_file_actions_addtcsetpgrp_np,wagon posix_spawnattr_tcgetpgrp_n p , 和wagon posix_spawnattr_tcsetpgrp_n p .
在内存分配失败时强化 glibc qsort 行为
当内存分配失败时,glibc 软件包的 qsort 和 swig qsort_r 函数使用堆分类回退。这个更改改进了对无效比较功能的处理,并在内存分配失败时提高性能的可预测性。
因为回退不是稳定的排序,因此等元素可能会以不同的顺序出现。C 标准不需要稳定性。
GDB 被 rebase 到版本 16.3
RHEL 9.7 中的 gdb 更新至版本 16.3 提供了以下显著改进:
- 删除了对 Intel MPX 的支持。
- 添加了对标记的数据指针的支持,包括 Intel 的 Linear Address Masking (LAM)和 aarch64 的 Memory Tagging Extension (MTE)。
- 启用后台 DWARF 读取以提高性能。
增强的 Intel Process Trace (
记录 btrace):-
通过设置
记录 btrace pt event-tracing启用异步事件打印。 -
Ptwrite 有效负载现在可以在 Python 中作为
RecordAux 辅助对象访问。
-
通过设置
改进了 Python 集成:
-
停止事件现在包含一个
details属性,mirror MI "*stopped" 事件。 -
gdb.Progspace ()不再直接创建对象;对象必须使用其他 API 获取。 -
用户定义的属性可以添加到
gdb.Inferior和gdb.InferiorThread对象中。 -
引入了新的事件源:
gdb.tui_enabled。 -
添加了
gdb.record.clear,它会清除当前记录的 trace 数据。 - 添加了用于处理缺失的 objfiles 和调试信息的模块。
-
新的类
gdb.missing_debug.MissingDebugInfo可以子类来处理缺少的调试信息。 -
新属性
gdb.Symbol.is_artificial。 - 用于跨多个域的符号查找的新常数。
-
新的功能
gdb.notify_mi (NAME, DATA)会发出自定义 async 通知。 -
用于读取和写入值内容的新属性
gdb.Value.bytes。 -
添加了
gdb.interrupt以模拟 CTRL-C 中断。 -
新的属性
gdb.InferiorThread.ptid_string提供目标 ID。
-
停止事件现在包含一个
调试适配器协议(DAP)更改:
- 更新了"scopes"请求,以包含全局变量和最后一个返回值。
- "launch"和"attach"请求可以随时使用,在"configurationDone"后有效。
- "Variable"请求不再返回人工符号。
- 添加了对 "cancel" 请求的"process"事件和支持。
- "attach"请求现在支持指定程序。
- 引入了用于样式、语言帧不匹配警告、缺少 objfile 处理程序和函数调用超时的新命令。
-
增强并重命名了几个命令,包括用于免除和重命名
set unwindonsignal设置的改进错误处理,从而设置 unwind-on-signal。 -
扩展的远程数据包支持,包括用于文件状态和内存获取的新数据包,以及
克隆等新的停止原因。 - 引入了每个线程 事件报告选项和地址标记检查。
现在为全局 GPU 数据收集启用了 AMD GPU pmda
在此次更新之前,RHEL 不提供 AMD GPU PMDA (一个 Performance Co-Pilot 指标代理),因为内核缺少全面支持所需的某些功能。
在这个版本中,用户可以使用 pcp-pmda-amdgpu 软件包在 RHEL 中的 AMD GPU 上收集全局 GPU 数据。
对 IBM Z z17 的初始支持添加到 wagonglibc
HEKETIglibc 中的动态加载程序被改进,以支持检测 IBM z17 CPU 或其特定功能。因此,在 wagon/usr/lib64/glibc-hwcap/z17/ 目录中安装的任何 IBM z17 优化库都会在 z17 系统上自动加载。这个版本提高了 IBM Z z17 平台的硬件兼容性和性能。
Jira:RHEL-50086[1]
Rust Toolset rebase 到版本 1.88.0
RHEL 9.7 与版本 1.88.0 中的 Rust Toolset 一起发布。这个版本包括以下显著的改进:
- Rust 2024 Edition 现在稳定。这是一个主要的选择版本,可进行大量语言更改,是最新发布的最大版本。
-
利用带有允许链的 2024 版,允许 fluent
&&-chaining 在if和while条件内允许语句减少嵌套并改进可读性。 -
对于高性能计算,当启用目标功能时,您可以在安全 Rust 中直接调用多个
std::archintrinsics,这可让您直接访问特定的 CPU 功能。 -
现在,支持
asyncclosures,为异步编程提供了第一类解决方案。这些冲突允许捕获并正确表达使用 AsyncFn traits 的高法函数签名。 -
遍历广播允许协调对特征对象的引用,以引用其超级条目,简化常见模式,特别是使用任何特征。
- 现在,cargo 会自动清理其缓存,删除在 1-3 个月内无法访问的旧文件,这有助于管理磁盘空间。
Rust Toolset 是一个滚动应用程序流,红帽只支持最新版本。如需更多信息,请参阅 Red Hat Enterprise Linux 应用程序流生命周期 文档。
tzdata 包括 NEWS 文件
在这个版本中,tzdata 软件包包括其 NEWS 文件以及每个发行版本,以提供时区数据更改的精确描述。因此,您可以详细查看更改。用户可以检查附带的 NEWS 文件,以了解更新中更改的内容。
Jira:RHEL-105043[1]
metrics 角色现在支持 Apache Spark 指标集合和导出
在以前的版本中,用户无法使用 metrics 角色直接收集或导出 Apache Spark 指标。在这个版本中,swigrhel-system-roles 软件包添加了对从 Apache Spark 收集和更新指标的支持。引入了两个新布尔值参数:
-
metrics_into_spark: false 启用将指标值导出到 Spark。 -
metrics_from_spark: false 启用从 Spark 收集指标。
现在,您可以从 Spark 检索指标,并将指标信息发送到 Spark,改进了 Spark 工作负载的集成和监控功能。