4.13. 编译器和开发工具
新的 glibc
选项,以影响 IBM Z 上优化的日常使用情况
在 IBM Z 构架上,glibc
库根据硬件功能(如 hwcaps
和 stfle
位)选择功能实现。有了此更新,您可以通过设置 glibc.cpu.hwcaps
可调项来指导库所做的选择。
Bugzilla:2169978[1]
改进了 glibc
中基于 Intel® Xeon® v5 硬件的字符串和内存例程性能
在以前的版本中,glibc
用于字符串和内存例程的默认缓存量导致在基于 Intel® Xeon® v5 的系统上性能低于预期。有了此更新,要使用的缓存量已被调整,以提高性能。
系统 GCC 编译器更新至版本 11.4.1
GNU Compiler Collection (GCC) 提供用于使用 C、C++ 和 Fortran 编程语言开发应用程序的工具。
系统 GCC 编译器已更新至版本 11.4.1,其中包括上游 GCC 中提供的大量 bug 修复和增强。
有关使用信息,请参阅 RHEL 9 中开发 C 和 C++ 应用程序。
GCC 现在支持保留寄存器参数
有了此更新,您可以将参数寄存器内容存储到堆栈,并产生合适的 Call Frame Information (CFI),以允许 unwinder 找到它,而不会对性能产生负面影响。
Bugzilla:2168204[1]
64 位 Intel 构架上 GCC 中的一个新的 -mdaz-ftz
选项
64 位 Intel 架构上的 GNU Compiler Collection (GCC)的系统版本现在支持 -mdaz-ftz
选项,来在 MXCSR 控制和状态寄存器中启用 flush-to-zero (FTZ)和 denormals-are-zero (DAZ)标志。
新的 GCC Toolset 13
GCC Toolset 13 是一个编译器工具集,其提供开发工具的最新版本。它以 AppStream 存储库中的 Software Collection 的形式作为 Application Stream 提供。
GCC 编译器已更新至版本 13.1.1,它提供上游 GCC 中提供的很多 bug 修复和增强。
GCC Toolset 13 提供了以下工具和版本:
工具 | 版本 |
---|---|
GCC | 13.1.1 |
GDB | 12.1 |
binutils | 2.40 |
dwz | 0.14 |
annobin | 12.20 |
要安装 GCC Toolset 13,以 root 用户身份运行以下命令:
# dnf install gcc-toolset-13
要运行 GCC Toolset 13 中的工具:
$ scl enable gcc-toolset-13 tool
要运行一个 shell 会话,其中 GCC Toolset 13 中的工具版本会覆盖这些工具的系统版本:
$ scl enable gcc-toolset-13 bash
如需更多信息,请参阅 GCC Toolset 13 和 使用 GCC Toolset。
Bugzilla:2171919[1], Bugzilla:2171930
GCC Toolset 13:GCC rebase 到版本 13.1.1
在 GCC Toolset 13 中,GNU Compiler Collection (GCC)已更新至版本 13.1.1.。主要变更包括:
常规改进
OpenMP:
- OpenMP 5.0: Fortran 现在支持一些非矩形循环嵌套。GCC 11 中添加了对 C/C++ 的此类支持。
- 添加了许多 OpenMP 5.1 功能。
- 添加了对 OpenMP 5.2 功能的初始支持。
-
现在提供了一个新的调试信息压缩选项值
-gz=zstd
。 -
-Ofast
、-ffast-math
和-funsafe-math-optimizations
选项不再添加启动代码,以在使用-shared
选项生成一个共享对象时更改浮点环境。 -
GCC 现在可以使用 Static Analysis Results Interchange Format (SARIF)发出其诊断,此格式是一种适合捕获静态分析工具(如 GCC 的
-fanalyzer
)结果的基于 JSON 的格式。您还可以使用 SARIF 来捕获机器可读格式的其他 GCC 警告和错误。 - 实现了链接时优化改进。
新语言和特定语言的改进
C 系列:
-
新的
-Wxor-used-as-pow
选项会警告用户使用专用或(^
)运算符时可能指的是求幂。 为记录是文件描述符的
int
参数添加了三个新的函数属性:-
attribute((fd_arg(N)))
-
attribute((fd_arg_read(N)))
-
attribute((fd_arg_write(N)))
-fanalyzer
也使用这些属性来检测文件描述符的滥用。-
-
已为 C++23 可移植假设添加了一个新的语句属性
attribute((assume(EXPR)));
。属性在 C 或更早的 C++ 中也被支持。 -
GCC 现在可以控制何时将一个结构的尾部数组视为一个灵活的数组成员,以便访问此类数组的元素。默认情况下,聚合中的所有尾部数组都被视为灵活的数组成员。使用新的命令行选项
-fstrict-flex-arrays
控制哪些数组成员被视为灵活的数组。
C:
实现了几个 C23 功能:
-
引入了
nullptr
常量。 - 增强了枚举来指定底层类型。
- 对可变参数列表的要求已经放宽。
-
引入了
auto
功能,以启用对象定义的类型推断。 -
为对象定义引入了
constexpr
指定符。 - 为复合字面引入了存储类指定符。
-
引入了
typeof
对象(以前作为扩展支持)和typeof_unqual
对象。 -
添加了新的关键字:
alignas
,alignof
,bool
,false
,static_assert
,thread_local
和true
。 -
添加了
[[noreturn]]
属性,以指定函数不向其调用者返回执行。 - 添加了对空初始化器大括号的支持。
-
添加了对
STDC_VERSION keyring_H
标头版本宏的支持。 -
删除了
ATOMIC_VAR_INIT
宏。 -
为
<stddef.h>
标头添加了unreachable
宏。 - 删除了三角图。
- 删除了非原型函数。
-
通过
%wN
的-Wformat
选项和%wfN
格式长度修饰符添加了printf
和scanf
格式检查。 - 添加了对 Unicode Standard Annex (UAX) 31 的标识符语法的支持。
-
C23 中采用的现有功能已被调整以遵循 C23 要求,且没有使用
-std=c2x -Wpedantic
选项进行诊断。
-
引入了
-
新的
-Wenum-int-mismatch
选项会警告枚举类型和整数类型之间的不匹配。
C++:
通过
-fexcess-precision
选项实现了超精度支持。它默认在严格的标准模式下启用,如-std=c++17
,其中其默认为-fexcess-precision=standard
。在 GNU 标准模式中,如-std=gnu++20
,它默认为-fexcess-precision=fast
,其恢复之前的行为。-fexcess-precision
选项会影响以下构架:-
在某些情况下,在使用 x87 数学的 Intel 32 和 64 位的 Motorola 68000 上,其中
float
和double
表达式以long double
精度评估。 -
64 位 IBM Z 系统,其中
float
表达式以double
精度评估。 -
支持
std::float16_t
或std::bfloat16_t
类型的几个架构,其中这些类型以float
精度评估。
-
在某些情况下,在使用 x87 数学的 Intel 32 和 64 位的 Motorola 68000 上,其中
改进了对 C++23 的实验性支持,包括:
- 添加了对复合语句末尾的标签的支持。
- 添加了一个类型 trait 来检测绑定到临时对象的引用。
- 重新引入对易失性复合操作的支持。
-
添加了对
#warning
指令的支持。 - 添加了对分隔的转义序列的支持。
- 添加了对命名的通用字符转义的支持。
-
为
char8_t
类型添加了兼容性和可移植性修复。 -
添加了静态
operator()
函数对象。 - 简化的隐式移动。
- 在表达式中重写等式现在不再是一个突破性的变化。
- 删除了不可编码的宽字符量和宽多字符量。
-
放宽了一些
constexpr
函数限制。 - 扩展的浮点类型和标准名称。
- 实现了可移植假设。
- 添加了对 UTF-8 作为可移植源文件编码标准的支持。
-
添加了对静态
operator[]
子脚本的支持。
新警告:
-
当值通过
std::move
移动到其自身时,-Wself-move
会发出警告。 -
当参考绑定到其生命周期已结束的临时对象时,
-Wdangling-reference
会发出警告。 -
-Wpessimizing-move
和-Wredundant-move
警告已扩展到在更多上下文中进行警告。
-
当值通过
-
新的
-nostdlib++
选项启用了与g++
的链接,而没有 C++ 标准库中的隐式链接。
libstdc++
运行时库的更改
改进了对 C++20 的实验性支持,包括:
-
添加了
<format>
标头和std::format
函数。 -
在
<chrono>
表头中添加了对std::chrono::utc_clock
时钟、其他时钟、时区和std::format
函数的支持。
-
添加了
改进了对 C++23 的实验性支持,包括:
-
添加到
<ranges>
标头:view::zip
,views::zip_transform
,views::adjacent
,views::adjacent_transform
,views::pairwise
,views::slide
,views::chunk
,views::chunk_by
,views::repeat
,views::chunk_by
,views::cartesian_product
,views::as_rvalue
,views::enumerate
,views::as_const
. -
添加到
<algorithm>
标头:ranges::contains
,ranges::contains_subrange
,ranges::iota
,ranges::find_last
,ranges::find_last_if
,ranges::find_last_if_not
,ranges::fold_left
,ranges::fold_left_first
,ranges::fold_right
,ranges::fold_right_last
,ranges::fold_left_with_iter
,ranges::fold_left_first_with_iter
. -
对
std::expected
类模板的一元操作的支持。 -
向
std::bitset
、std::to_chars
和std::from_chars
函数中添加了constexpr
修饰符。 - 添加了对扩展的浮点类型的库支持。
-
添加到
-
添加了对 Library Fundamentals Technical Specification (TS)版本 3 中
<experimental/scope>
标头的支持。 -
添加了对 Concurrency TS 版本 2 中
<experimental/synchronized_value>
标头的支持 。 添加了对 freestanding 模式下许多以前不可用功能的支持。例如:
-
std::tuple
类模板现在可用于独立编译。 -
libstdc++
库向独立子集中添加了组件,如std::array
和std::string_view
。 -
libstdc++
库现在遵循-ffreestanding
编译器选项,因此它不再需要构建一个libstdc++
库的独立安装。使用-ffreestanding
编译会将可用的功能限制到独立的子集,即使libstdc++
库是作为一个完整的托管实现构建。
-
新目标和特定于目标的改进
64 位 ARM 架构:
-
添加了对
-march=
选项的armv9.1-a
、armv9.2-a
和armv9.3-a
参数的支持。
32 位和 64 位 AMD 以及 Intel 架构:
-
对于 C 和 C++,在启用了流 SIMD 扩展 2 及更高版本的系统上支持
__bf16
类型。 -
真正的
__bf16
类型现在用于AVX512BF16
指令的内在函数。在以前的版本中,使用__bfloat16
,一种 short 的 typedef。在将 GCC 12 升级到 GCC 13 时,调整您的与AVX512BF16
相关的源代码。 添加了新的指令集架构(ISA)扩展,以支持以下 Intel 指令:
-
AVX-IFMA
,其指令内在函数通过-mavxifma
编译器开关提供。 -
AVX-VNNI-INT8
,其指令内在函数通过-mavxvnniint8
编译器开关提供。 -
AVX-NE-CONVERT
,其指令内在函数通过-mavxneconvert
编译器开关提供。 -
CMPccXADD
,其指令内在函数通过-mcmpccxadd
编译器开关提供。 -
AMX-FP16
,其指令内在函数通过-mamx-fp16
编译器开关提供。 -
PREFETCHI
,其指令内在函数通过-mprefetchi
编译器开关提供。 -
RAO-INT
,其指令内在函数通过-mraoint
编译器开关提供。 -
AMX-COMPLEX
,其指令内在函数通过-mamx-complex
编译器开关提供。
-
-
GCC 现在通过
-march=znver4
编译器开关支持基于znver4
核的 AMD CPU。开关使 GCC 在自动向量化时考虑使用 512 位向量。
对静态分析器的改进
静态分析器已得到 20 个新警告:
-
-Wanalyzer-allocation-size
-
-Wanalyzer-deref-before-check
-
-Wanalyzer-exposure-through-uninit-copy
-
-Wanalyzer-imprecise-fp-arithmetic
-
-Wanalyzer-infinite-recursion
-
-Wanalyzer-jump-through-null
-
-Wanalyzer-out-of-bounds
-
-Wanalyzer-putenv-of-auto-var
-
-Wanalyzer-tainted-assertion
与文件描述符滥用相关的 7 个新警告:
-
-Wanalyzer-fd-access-mode-mismatch
-
-Wanalyzer-fd-double-close
-
-Wanalyzer-fd-leak
-
-Wanalyzer-fd-phase-mismatch
(例如,在对套接字调用listen
前调用accept
) -
-Wanalyzer-fd-type-mismatch
(例如,对数据报套接字使用流套接字操作) -
-Wanalyzer-fd-use-after-close
-Wanalyzer-fd-use-without-check
-
另外,还实现了
open
、close
、creat
、dup
、dup2
、dup3
、pipe
、pipe2
、read
、和write
函数的行为的特殊处理。
-
另外,还实现了
-
滥用
<stdarg.h>
标头的 4 个新警告:-
-Wanalyzer-va-list-leak
警告在va_start
或va_copy
宏后缺少va_end
宏。 -
-Wanalyzer-va-list-use-after-va-end
警告对已对其调用了va_end
宏的va_list
对象类型使用了va_arg
或va_copy
宏。 -
-Wanalyzer-va-arg-type-mismatch
类型检查va_arg
宏在针对实际传递给 variadic 调用的参数类型的过程间执行路径中的使用情况。 -
-Wanalyzer-va-list-exhausted
警告是否va_arg
宏在进程间的执行路径中对va_list
对象类型使用了太多次。
-
-
- 很多其他改进。
后向不兼容的更改
对于 C++,全局 iostream 对象的结构,如 std::cout
,std::cin
,现在是在标准库内完成的,而不是在包含 <iostream>
标头的每个源文件中完成的。这个更改提高了 C++ 程序的启动性能,但这意味着如果在运行时没有使用正确的 libstdc++.so
版本,则使用 GCC 13.1 编译的代码将崩溃。请参阅有关在运行时使用正确的 libstdc++.so
的 文档。将来的 GCC 版本会缓解这个问题,以便程序根本不能使用早期不兼容的 libstdc++.so
运行。
Bugzilla:2172093[1]
GCC Toolset 13: annobin
rebase 到版本 12.20
GCC Toolset 13 提供了 annobin
软件包版本 12.20。主要改进包括:
-
添加了对将
annobin
备注移到单独的调试信息文件中的支持。这导致减小了可执行二进制文件的大小。 - 添加了对新的较小的备注格式的支持,减少了单独 debuginfo 文件的大小以及创建这些文件所需的时间。
Bugzilla:2171923[1]
GCC Toolset 13:GDB rebase 到版本 12.1
GCC Toolset 13 提供 GDB 版本 12.1。
重要的程序错误修复和增强包括:
-
GDB 现在默认设置源代码和反汇编器的样式。如果样式干扰了 GDB 的自动化或脚本,您可以使用
maint set gnu-source-highlight enabled off
和maint set style disassembler enabled off
命令禁用它。 -
GDB 现在每当遇到内部错误时都会显示回溯追踪。如果这会影响脚本或自动化,您可以使用
maint set backtrace-on-fatal-signal off
命令禁用此功能。
C/C++ 改进:
- GDB 现在像对待功能过载一样对待涉及 C++ 模板的功能或类型。您可以省略参数列表,以在模板功能系列上设置断点,包括类型或由多个模板类型组成的功能。Tab 补全已得到类似的改进。
终端用户界面(TUI):
tui layout
tui focus
tui refresh
tui window height
是旧layout
,focus
,refresh
和winheight
TUI 命令的新名称。旧名称仍作为这些新命令的别名存在。tui window width
winwidth
使用新的
tui window width
命令或winwidth
别名,来在窗口在水平模式中布局时调整 TUI 窗口的宽度。info win
这个命令现在在其输出中包含有关 TUI 窗口宽度的信息。
机器接口(MI)更改:
- MI 解释器的默认版本现在是 4 (-i=mi4)。
-
没有标志的
-add-inferior
命令现在继承当前下级的连接。这会恢复 GDB 版本 10 之前的行为。 -
-add-inferior
命令现在接受一个--no-connection
标志,这导致新的下级在没有连接的情况下启动。 断点输出中的
script
字段(其在 MI 3 及更早版本中的语法不正确)已在 MI 4 中成为一个列表。这会影响以下命令和事件:-
-break-insert
-
-break-info
-
=breakpoint-created
=breakpoint-modified
使用
-fix-breakpoint-script-output
命令启用使用早期 MI 版本的新行为。
-
新命令:
maint set internal-error backtrace [on|off]
maint show internal-error backtrace
maint set internal-warning backtrace [on|off]
maint show internal-warning backtrace
GDB 现在在遇到内部错误或内部警告时打印其自身的回溯追踪。对于内部错误,这默认是启用的,对于内部警告,默认禁用。
exit
除了现有的
quit
命令外,您还可以使用新的exit
命令退出 GDB。maint set gnu-source-highlight enabled [on|off]
maint show gnu-source-highlight enabled
启用或禁用 GNU Source Highlight 库来向源代码添加样式。禁用时,即使库可用,也不会使用它。当 GNU Source Highlight 库没有使用时,使用 Python Pygments 库。set suppress-cli-notifications [on|off]
show suppress-cli-notifications
控制是否禁止为 CLI 打印通知。当您更改所选上下文(如当前的下级、线程或帧)或正在调试的程序停止时(例如:由于遇到断点、完成源步进或中断)时,会发生 CLI 通知。
set style disassembler enabled [on|off]
show style disassembler enabled
启用后,如果 GDB 是使用支持的 Python 编译的,且有 Python Pygments 软件包可用,则命令会向反编译器输出应用样式。
更改的命令:
set logging [on|off]
弃用,并被
set logging enabled [on|off]
命令替换。print
使用基数修改格式(如
/x
)打印浮点值,已改为以所需基数显示底层值的字节。clone-inferior
clone-inferior
命令现在确保TTY
、CMD
和ARGs
设置从原始下级复制到新的下级。所有使用set environment
或unset environment
命令对环境变量的修改也会被复制到新的下级中。
Python API:
-
新的
gdb.add_history()
函数接受一个gdb.Value
对象,并将其代表的值添加到 GDB 的历史记录列表中。函数返回一个整数,这是历史记录列表中新项目的索引。 -
新的
gdb.history_count()
函数返回 GDB 值历史记录中的值数。 -
新的
gdb.events.gdb_exiting
事件通过gdb.GdbExitingEvent
对象调用,该对象具有包含 GDB 退出码值的只读属性exit_code
。这个事件会在 GDB 突出前触发,然后 GDB 开始清理其内部状态。 -
新的
gdb.architecture_names()
函数返回一个包含所有可能的Architecture.name()
值的列表。每个条目都是一个字符串。 -
新的
gdb.Architecture.integer_type()
函数返回一个给定大小和符号的整数类型。 -
新的
gdb.TargetConnection
对象类型表示一个连接(如info connections
命令显示的那样)。子类gdb.RemoteTargetConnection
表示remote
和extended-remote
连接。 -
gdb.Inferior
类型现在有一个connection
属性,它是gdb.TargetConnection
对象的一个实例,连接被这个下级使用。如果下级没有连接,则这可以是None
。 -
当从 GDB 中删除连接时,新的
gdb.events.connection_removed
事件注册中心会发出一个gdb.ConnectionEvent
事件。此事件有一个connection
属性,一个用于要删除的连接的gdb.TargetConnection
对象。 -
新的
gdb.connections()
函数返回所有当前活跃连接的列表。 -
新的
gdb.RemoteTargetConnection.send_packet (PACKET)
方法等同于现有的maint packet
CLI 命令。您可以使用它来向远程目标发送指定的数据包。 -
新的
gdb.host_charset()
函数返回作为字符串的当前主机字符集的名称。 -
新的
gdb.set_parameter (NAME,VALUE)
函数将 GDB 参数NAME
设置为VALUE
。 -
新的
gdb.with_parameter (NAME,VALUE)
函数返回一个上下文管理器,该管理器临时将 GDB 参数NAME
设置为VALUE
,然后在上下文退出时重置它。 -
gdb.Value.format_string
方法现在接受一个styling
参数,该参数是一个布尔值。当为true
时,返回的字符串可以包含转义序列以应用样式。只有在 GDB 上打开样式时,才会显示样式(请参阅帮助设置样式
)。当未指定styling
参数时,其为默认值false
,则不会将样式应用到返回的字符串。 -
新的只读属性
gdb.InferiorThread.details
是一个包含额外的特定于目标的线程信息的字符串,或者如果没有这样的附加信息,则为None
。 -
新的只读属性
gdb.Type.is_scalar
对于 scalar 类型为True
,对所有其他类型为False
。 -
新的只读属性
gdb.Type.is_signed
仅在Type.is_scalar
为True
时可读,对于有符号类型将为True
,对于所有其他类型将为False
。尝试读取 non-scalar 类型的此属性将引发一个ValueError
。 - 现在,您可以添加在 Python 中添加 GDB 和实施的 MI 命令。
如需更多信息,请参阅上游发行注记:
Bugzilla:2172096[1]
GCC Toolset 13:bintuils
rebase 到版本 2.40
GCC Toolset 13 提供 binutils
软件包版本 2.40。主要改进包括:
链接器:
-
链接器的新的
-w
(--no-warnings
)命令行选项压制任何警告或错误消息 产生。如果您需要创建一个已知无法正常工作的二进制文件,则这非常有用。 现在,ELF 链接器会产生一条警告信息,如果:
- 堆栈为可执行的
-
它创建一个内存驻留段,设置了所有三个
Read
、Write
和eXecute
权限集 它创建一个具有
eXecute
权限集的线程本地数据段。您可以使用
--no-warn-exec-stack
或--no-warn-rwx-segments
选项禁用这些警告。
- 链接器现在可以将任意 JSON 格式的元数据插入到它创建的二进制文件中。
其他工具:
-
新的
objdump
工具的--private
选项,用于显示文件标头中的字段,以及 Portable Executable (PE)格式的部分标头。 -
objcopy
和strip
工具的新的--strip-section-headers
命令行选项,来从 ELF 文件中删除 ELF 部分标头。 -
objdump
工具的新的--show-all-symbols
命令行选项,以显示反汇编时与给定地址匹配的所有符号,而不是仅显示与地址匹配的第一个符号的默认功能。 -
nm
工具的新的-W
(--weak
)选项,以使其忽略弱符号。 objdump
工具现在支持对某些架构的反汇编输出的语法高亮显示。使用--disassembler-color=MODE
命令行选项,MODE 是以下之一:-
off
-
color
- 所有终端模拟器都支持这个选项。 -
extended-color
- 这个选项使用所有终端模拟器都不支持的 8 位颜色。
-
Bugzilla:2171926[1]
libabigail
rebase 到版本 2.3
libabigail
软件包已更新至版本 2.3。主要改进包括:
- 现在支持 BTF debuginfo 格式。
- 改进了对 Ada 范围类型的支持。
-
现在支持压制规范中新的
[allow_type]
指令。 -
为
[supress_type]
压制规范添加了各种新属性。 - ABIXML 文件格式已更新至版本 2.2。
- 库的 SONAME 已更改,以反映自己的 ABI 变化。
libabigail
软件包在 CodeReady Linux Builder (CRB)存储库中提供。请注意,不支持 CodeReady Linux Builder 存储库中包含的软件包。
debugedit
中的 find-debuginfo
脚本现在支持 -q
(--quiet
)标记
有了此更新,您可以使用 debugedit
工具中的 find-debuginfo
脚本的 -q
(--quiet
)标记来屏蔽脚本中的非错误输出。
Valgrind rebase 到版本 3.21.0
Valgrind 已更新至版本 3.21.0。主要改进包括:
-
--vgdb-stop-at=event1,event2,…
选项的新abexit
值在程序异常退出时(如具有非零退出码)通知gdbserver
工具。 新的
--enable-debuginfod=[yes|no]
选项指示 Valgrind 使用DEBUGINFOD_URLS
环境变量中列出的debuginfod
服务器来获取在 Valgrind 下运行的程序缺少的 DWARF debuginfo 信息。此选项的默认值为yes
。注意默认不设置
DEBUGINFOD_URLS
环境变量。- Valgrind 现在提供 GDB Python 命令。这些 GDB 前端命令在 GDB 命令行界面中提供更好的集成。这样做的好处是,例如 GDB 自动完成功能,以及特定于命令的帮助,搜索与正则表达式匹配的命令或命令帮助。对于相关的监控命令,GDB 会评估参数以简化监控命令的使用。
-
使用
--multi
选项调用时,vgdb
工具现在支持扩展的远程协议。此模式下支持 GDBrun
命令,因此您可以从单个终端运行 GDB 和 Valgrind。 -
对于截获
malloc()
调用的工具,您可以使用--realloc-zero-bytes-frees=[yes|no]
选项更改realloc()
函数的行为。 -
memcheck
工具现在对大小为零的realloc ()
函数的使用情况进行检查。使用新的--show-realloc-size-zero=[yes|no]
开关来禁用此功能。 -
您可以对
helgrind
工具使用新的--history-backtrace-size=value
选项,来配置要在早期访问的堆栈跟踪中记录的条目的数量。 -
--cache-sim=[yes|no]
cachegrind
选项现在默认为no
,因此默认只收集指令缓存读事件。 -
cg_annotate
、cg_diff
和cg_merge
cachegrind
工具的源代码已被重写,因此工具具有更灵活的命令行选项处理。例如,它们现在支持--show-percs
和--no-show-percs
选项以及现有的--show-percs=yes
和--show-percs=no
选项。 -
cg_annotate
cachegrind
工具现在支持区分(使用--diff
、--mod-filename
和--mod-funcname
选项)和合并(通过传递多个数据文件)。另外,cg_annotate
现在在文件和函数级别提供更多信息。 -
DHAT
工具的新的用户请求允许您覆盖对内存块的访问数直方图的 1024 字节限制。
现在支持以下特定于架构的指令集:
64 位 ARM:
- v8.2 scalar 和 vector Floating-point Absolute Difference (FABD), Floating-point Absolute Compare Greater than or Equal (FACGE), Floating-point Absolute Compare Greater Than (FACGT)和 Floating-point Add (FADD)指令。
- v8.2 浮点(FP)比较和条件比较指令。
- v8.2 浮点(FP)的零变体比较指令。
64-位 IBM Z:
-
支持各种
miscellaneous-instruction-extensions facility 3
和vector-enhancements facility 2
。这使用-march=arch13
或-march=z15
选项编译的程序能够在 Valgrind 下执行。
-
支持各种
IBM Power:
- ISA 3.1 支持现已完成。
- ISA 3.0 现在支持交付一个随机数字(darn)指令。
- ISA 3.0 现在支持 System Call Vectored(scv)指令。
- ISA 3.0 现在支持复制、粘贴和 cpabort 指令。
SystemTap
rebase 到版本 4.9
systemtap
软件包已升级到版本 4.9。主要变更包括:
-
新的 Language-Server-Protocol (LSP)后端,用于在支持 LSP 的编辑器上更轻松地交互式起草
systemtap
脚本。 - 访问 Python/Jupyter 交互笔记本前端。
- 改进了 DWARF 5 位字段的处理。
elfutils
rebase 到版本 0.189
elfutils
软件包已更新至版本 0.189。主要改进和 bug 修复包括:
libelf
-
elf_compress
工具现在支持ELFCOMPRESS_ZSTD
ELF 压缩类型。 libdwfl
-
dwfl_module_return_value_location
函数现在为指向DW_TAG_unspecified_type
类型标签的 DWARF Information Entries (DIEs) 返回 0(无返回类型)。 eu-elfcompress
-
-t
和--type=
选项现在通过zstd
参数支持 Zstandard (zstd
)压缩格式。
libpfm
rebase 到版本 4.13
libpfm
软件包已更新至版本 4.13。有了此更新,libpfm
可以访问以下处理器微架构的性能监控硬件原生事件:
- AMD Zen 2
- AMD Zen 3
- AMD Zen 4
- ARM Neoverse N1
- ARM Neoverse N2
- ARM Neoverse V1
- ARM Neoverse V2
- IBM z16
- 第四代 Intel® Xeon® 可扩展处理器
Bugzilla:2185652, Bugzilla:2047720, Bugzilla:2111940, Bugzilla:2111924, Bugzilla:2111930, Bugzilla:2111933, Bugzilla:2111957, Bugzilla:2111946
papi
支持新的处理器微架构
有了此增强,您可以使用以下处理器微架构上存在的 papi
事件访问性能监控硬件:
- AMD Zen 2
- AMD Zen 3
- ARM Neoverse N1
- ARM Neoverse N2
- ARM Neoverse V1
- ARM Neoverse V2
Bugzilla:2111923[1], Bugzilla:2111947, Bugzilla:2111942
papi
现在支持 64 位 ARM 处理器的快速性能事件数读取操作
在以前的版本中,在 64 位 ARM 处理器上,所有性能事件计数器读取操作都需要使用资源密集型系统调用。已为 64 位 ARM 更新了 papi
,以便让使用性能计数器监控其自身的进程使用更快的性能事件计数器的用户空间读取。将 /proc/sys/kernel/perf_user_access
参数设置为 1 ,来将 papi
读取 2个计数器的平均时钟周期数从 724 个周期减少到 29 个周期。
Bugzilla:2186927[1]
LLVM Toolset rebase 到版本 16.0.6
LLVM Toolset 已更新至版本 16.0.6。
主要改进包括:
- 对优化的改进
- 对新的 CPU 扩展的支持
- 改进了对新 C++ 版本的支持。
主要的向后不兼容的更改包括:
-
clang 的默认 C++ 标准现在是
gnu++17
而不是gnu++14
。 -
-Wimplicit-function-declaration
,-Wimplicit-int
和-Wincompatible-function-pointer-types
选项现在默认为 C 代码的错误。这可能会影响配置脚本的行为。
默认情况下,Clang 16 使用 GCC Toolset 13 提供的 libstdc++
库版本 13 和 binutils 2.40
。
如需更多信息,请参阅 LLVM 发行注记 和 Clang 发行注记。
Rust Toolset rebase 到版本 1.71.1
Rust Toolset 已更新至版本 1.71.1。主要变更包括:
- 多个生成者(mpsc),一个消费者(mpsc)渠道的新实现,以提高性能
-
新的 Cargo
sparse
索引协议,以更有效地使用crates.io
注册中心 -
用于一次性值初始化的新的
OnceCell
和OnceLock
类型 -
新的
C-unwind
ABI 字符串,以能够在跨 Foreign Function Interface (FFI)边界使用强制展开
如需了解更多详细信息,请参阅上游发布公告系列:
Rust profiler_builtins
运行时组件现在可用
有了此更新,Rust profile_builtins
运行时组件现在可用。此运行时组件启用以下编译器选项:
-C instrument-coverage
- 启用覆盖率分析
-C profile-generate
- 启用配置文件引导的优化
Bugzilla:2227082[1]
Go Toolset rebase 到版本 1.20.10
Go Toolset 已更新到版本 1.20.10。
主要改进包括:
-
在
unsafe
软件包中添加了新功能,以处理片段和字符串,而不依赖于内部表示。 - 可比较类型现在可以满足可比较约束。
-
新的
crypto/ecdh
软件包。 -
go build
和go test
命令不再接受-i
标志。 -
go generate
和go test
命令现在接受-skip pattern
选项。 -
go build
、go install
和其它与构建相关的命令现在支持-pgo
和-cover
标志。 -
go
命令现在在没有 C 工具链的系统上默认禁用cgo
。 -
go version -m
命令现在支持读取更多的 Go 二进制文件类型。 -
go
命令现在在没有 C 工具链的系统上默认禁用cgo
。 - 添加了对从应用程序和集成测试收集代码覆盖配置文件的支持,而不是仅从单元测试收集它们。
Bugzilla:2185259[1]
pcp
rebase 到版本 6.0.5
pcp
软件包已更新至版本 6.0.5。主要变更包括:
收集器工具功能
pmdaproc
:- 添加了对最近内核中每个 cgroup IRQ PSI 指标的支持
-
添加了一个新的
proc.smaps.pss_dirty
指标
-
pmdasmart
:添加了 NVME 磁盘信息和电源状态指标 pmdalinux
:- 添加了对最近内核中系统范围 IRQ PSI 指标的支持
- 添加了 NUMA 外部内存碎片指标
- 添加了新的网络(TCP、ICMP)指标
-
pmdaoverhead
:一个测量进程组开销的新的 PMDA -
pmdahacluster
: 已更新,来处理 Pacemaker 2.1.5crm_mon
输出更改
监控工具功能
pmieconf
:- 添加了对 webhook 操作(事件驱动的 Ansible)的支持
-
添加了一个新的检查文件描述符限制的
pmie
规则
-
pcp2json
: 带有一个选项的扩展的pcp2json
,以发送 HTTP POSTs -
pcp-atop
: 添加了cgroup
、NUMA 内存和 NUMA CPU 支持 -
pcp-htop
: 添加了对新打开的文件描述符 Meter 的支持 -
pcp-ps
: 添加了显示多个归档示例的能力
PCP 的 pmie
工具现在支持生成 webhook 事件
Performance Co-Pilot (PCP)中的性能指标推理引擎(pmie
)工具现在支持生成 webhook 事件。有了此更新,配置的 pmie
规则生成可由 Event-Driven Ansible (EDA)消费的格式的事件。因此,EDA 可以响应 PCP 规则。
要启用此功能,请配置所有本地 pmie
规则,以便在给定的端点(URL)发送到 webhook:
# pmieconf modify global webhook_endpoint https://localhost:443/<endpoint> # pmieconf modify global webhook_action yes
grafana
rebase 到版本 9.2.10
grafana
软件包已更新至版本 9.2.10。主要变更包括:
- 现在在整个 Grafana 中使用 heatmap 面板。
- Geomaps 现在可测量距离和区域。
- Alertmanager 现在基于 Prometheus Alertmanager 版本 0.24。
-
Grafana 警告规则现在在执行错误或超时时默认返回一个
Error
状态。 - 表达式现在可以用于公共仪表盘。
- 加入转换现在支持内联。
- 公共仪表盘现在允许共享 Grafana 仪表盘。
- 新的 Prometheus streaming 解析器现在作为一个可选功能提供。
如需更多信息,请参阅上游发行注记:
Grafana 不再启用弱加密密码
有了此更新,对于加密安全通信,Grafana 不再启用被视为弱的密码。受影响的密码有:
-
AES128-GCM-SHA256
-
AES128-SHA
-
AECDHE-RSA-AES128-SHA
-
AES256-GCM-SHA384
-
AES256-SHA
-
ECDHE-RSA-AES256-SHA
Bugzilla:2190025[1]
.NET 8.0 可用
Red Hat Enterprise Linux 9.3 与 .NET 版本 8.0 一起分发。主要改进包括:
- 添加了对 C#12 和 F#8 语言版本的支持。
- 添加了对直接使用 .NET 软件开发套件构建容器镜像的支持。
- 许多对垃圾收集器(GC)、Just-In-Time (JIT)编译器和基本库的性能改进。
Jira:RHELPLAN-164399[1]