4.9. 编译器和开发工具
改进了 glibc 中基于 Intel® Xeon® v5 硬件的字符串和内存例程性能
在以前的版本中,glibc 用于字符串和内存例程的默认缓存量会导致基于 Intel® Xeon® v5 的系统上的性能低于预期。有了此更新,已调整了要使用的缓存量,以提高性能。
GCC 现在支持保留寄存器参数
有了此更新,您可以将参数寄存器内容存储到堆栈,并生成合适的 Call Frame Information (CFI),以允许 unwinder 找到它,而不会给性能造成负面影响。
Bugzilla:2168205[1]
新的 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 用户身份运行以下命令:
yum install gcc-toolset-13
# yum install gcc-toolset-13
要从 GCC Toolset 13 运行工具:
scl enable gcc-toolset-13 tool
$ scl enable gcc-toolset-13 tool
要运行一个 shell 会话,其中 GCC Toolset 13 中的工具版本会覆盖这些工具的系统版本:
scl enable gcc-toolset-13 bash
$ scl enable gcc-toolset-13 bash
如需更多信息,请参阅https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/8/html/developing_c_and_cpp_applications_in_rhel_8/additional-toolsets-for-development_developing-applications#gcc-toolset-13_assembly_additional-toolsets-for-development[GCC Toolset 13] 和 使用 GCC Toolset。
Bugzilla:2171898[1], Bugzilla:2171928, Bugzilla:2188490
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 功能的初始支持。
-
现在提供了一个新的 debug 信息压缩选项值
-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指定符。 - 为复合字面引入了 storage-class 指定符。
-
引入了
typeof对象(以前作为扩展支持)和typeof_unqual对象。 -
添加了新的关键字:
alignas,alignof,bool,false,static_assert,thread_local和true。 -
添加了
[[noreturn]]属性,来指定不会向其调用者返回执行的函数。 - 添加了对空初始化器大括号的支持。
-
添加了对
STDC_VERSION keyring_H标头版本宏的支持。 -
删除了
ATOMIC_VAR_INIT宏。 -
为
<stddef.h>标头添加了unreachable宏。 - 删除了三角图。
- 删除了非原型函数。
-
通过
-Wformat选项为%wN和%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 math 的 Intel 32 和 64 位,某些情况下的 Motorola 68000 ,其中
float和double表达式以long double评估。 -
以
double精度评估float表达式的 64 位 IBM Z 系统。 -
支持
std::float16_t或std::bfloat16_t类型的几个架构,其中这些类型以float精度评估。
-
使用 x87 math 的 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类模板的 monadic 操作。 -
向
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++库向 freestanding 子集添加了组件,如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。开关在自动向量化时考虑使用 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>标头的四个新警告:-
-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类型检查针对实际传递 variadic 调用的参数类型的过程间执行路径中的va_arg宏的使用情况。 -
-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:2172091[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 layouttui focustui refreshtui window height
这些分别是旧layout,focus,refresh和winheightTUI 命令的新名称。旧名称仍作为这些新命令的别名存在。tui window widthwinwidth使用新的
tui window width命令或winwidth别名,来在窗口在水平模式中布局时调整 TUI 窗口的宽度。info win这个命令现在在其输出中包含有关 TUI 窗口宽度的信息。
机器接口(MI)更改:
- MI 解释器的默认版本现在是 4 (-i=mi4)。
-
没有标志的
-add-inferior命令现在继承当前下级的连接。这将恢复版本 10 之前的 GDB 的行为。 -
-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 backtracemaint set internal-warning backtrace [on|off]maint show internal-warning backtraceGDB 现在在遇到内部错误或内部警告时打印其自身的回溯追踪。对于内部错误,这默认是启用的,对于内部警告,默认禁用。
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-inferiorclone-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 packetCLI 命令。您可以使用它来向远程目标发送指定的数据包。 -
新的
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:2172095[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:2171924[1]
GCC Toolset 13: annobin rebase 到版本 12.20
GCC Toolset 13 提供了 annobin 软件包版本 12.20。主要改进包括:
-
添加了对将
annobin备注移到单独的调试信息文件中的支持。这导致减小了可执行二进制文件的大小。 - 添加了对新的较小的备注格式的支持,它减少了各个 debuginfo 文件的大小以及创建这些文件所需的时间。
Bugzilla:2171921[1]
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环境变量。-
使用
--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_mergecachegrind工具的源代码已被重写,因此工具具有更灵活的命令行选项处理。例如,它们现在支持--show-percs和--no-show-percs选项,以及现有的--show-percs=yes和--show-percs=no选项。 -
cg_annotatecachegrind工具现在支持区分(使用--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_ZSTDELF 压缩类型。 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 4
- ARM Neoverse N1
- ARM Neoverse N2
- ARM Neoverse V1
- ARM Neoverse V2
- 第四代 Intel® Xeon® Scalable Processors
- IBM z16
Bugzilla:2185653, Bugzilla:2111987, Bugzilla:2111966, Bugzilla:2111973, Bugzilla:2109907, Bugzilla:2111981, Bugzilla:2047725
papi 支持新的处理器微架构
有了此增强,您可以使用以下处理器微架构上预设置的 papi 事件访问性能监控硬件:
- ARM Neoverse N1
- ARM Neoverse N2
- ARM Neoverse V1
- ARM Neoverse V2
Bugzilla:2111982[1], Bugzilla:2111988
papi 现在支持 64 位 ARM 的快速性能事件数读取操作
以前在 64 位 ARM 处理器上,所有性能事件计数器读取操作都需要使用资源密集型的系统调用。已为 64 位 ARM 更新了 papi,以便让使用性能计数器监控其自身的进程使用更快的性能事件计数器的用户空间读取。将 /proc/sys/kernel/perf_user_access 参数设置为 1 ,来将 papi 读取 2个计数器的平均时钟周期数从 724 个周期减少到 29 个周期。
Bugzilla:2161146[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),单个消费者渠道的新实现,以提高性能
-
新的 Cargo
稀疏索引协议,来更有效地使用crates.io注册中心 -
用于一次性值初始化的新的
OnceCell和OnceLock类型 -
新的
C-unwindABI 字符串,以启用跨 Foreign Function Interface (FFI)边界的强制展开的使用
如需了解更多详细信息,请参阅上游版本公告系列:
Rust profiler_builtins 运行时组件现在可用
有了此增强,Rust profile_builtins 运行时组件现在可用。此运行时组件启用了以下编译器选项:
-C instrument-coverage- 启用了覆盖率分析
-C profile-generate- 启用了配置文件引导的优化
Bugzilla:2213875[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:2185260[1]
grafana rebase 到版本 9.2.10
grafana 软件包已更新至版本 9.2.10。主要变更包括:
- 时间序列面板现在是默认的视觉化选项,代替了图形面板。
- Grafana 提供了一个新的 Prometheus 和 Loki 查询构建器。
- Grafana 现在包括多个 UI/UX 和性能改进。
- 许可证已从 Apache 2.0 变为 GNU Affero General Public License (AGPL)。
- heatmap 面板现在在整个 Grafana 中使用。
- Geomaps 现在可以测量距离和区域。
- Alertmanager 现在基于 Prometheus Alertmanager 版本 0.24。
-
Grafana Alerting 规则现在在执行错误或超时时默认返回一个
Error状态。 - 表达式现在可以用在公共仪表盘上。
- 合并转换现在支持内部合并。
- 公共仪表盘现在允许共享 Grafana 仪表盘。
- 新的 Prometheus 流解析器现在作为一个可选功能提供。
如需更多信息,请参阅上游发行注记:
grafana-pcp rebase 到版本 5.1.1
提供 Performance Co-Pilot Grafana 插件的 grafana-pcp 软件包已更新至版本 5.1.1。主要变更包括:
- 查询编辑器:添加了用于禁用速率对话和时间利用率对话的按钮
Redis 数据源:
-
删除了已弃用的
label_values (metric, label)函数 - 修复了具有许多系列的指标的网络错误(需要 Performance Co-Pilot 版本 6 及更高版本)
-
删除了已弃用的
-
将
pmproxyAPI 超时设置为 1 分钟
.NET 8.0 可用
Red Hat Enterprise Linux 8.9 与 .NET 版本 8.0 一起分发。主要改进包括:
- 添加了对 C#12 和 F#8 语言版本的支持。
- 添加了对直接使用 .NET 软件开发套件构建容器镜像的支持。
- 许多对垃圾收集器(GC)、Just-In-Time (JIT)编译器和基本库的性能改进。
Jira:RHELPLAN-164398[1]