4.12. 编译器和开发工具
glibc
库现在支持 glibc-hwcaps
子目录来加载优化的共享库实现
在某些架构中,硬件升级有时会导致 glibc
加载具有基准优化的库,而不是为之前的硬件生成而优化的库。另外,当在 AMD CPU 上运行时,优化的库根本不会加载。
在这个版本中,glibc
支持在 glibc-hwcaps
子目录中查找优化的库实现。动态装载程序会根据使用的 CPU 及其硬件功能,检查子目录中的库文件。此功能可用于以下架构:IBM Power Systems(little endian)、IBM Z、64 位 AMD 和 Intel。
(BZ#1817513)
glibc
动态装载程序现在会在运行时激活所选审计模块
在以前的版本中,binutils
链接编辑器 ld
支持 --audit
选项,在运行时选择审计模块进行激活,但 glibc
动态装载程序会忽略请求。在这个版本中,glib
动态加载程序不再忽略请求,并载入指定的审计模块。因此,可以在不编写打包程序脚本或使用类似的机制的情况下为特定程序激活审计模块。
glibc
现在提供改进 IBM POWER9 的性能
这个版本为 IBM POWER9 引进了功能 strlen
、strcpy
、stpcpy
和 rawmemchr
的新实现。现在,这些功能在 IBM POWER9 硬件上可以更快地执行,从而提高了性能。
在 IBM Z 上优化了 memcpy
和 memset
的性能
在这个版本中,对memcpy
和 memset
API 的核心库实现进行了调整,以加快对IBM Z 处理器上的小型(< 64KiB)和大型数据副本的处理。现在,处理内存数据的应用程序会显著提高不同工作负载的性能。
GCC 现在支持 ARMv8.1 LSE 原子指令
在这个版本中,GCC 编译器支持大系统扩展(LSE),使用 ARMv8.1 规格添加的 atomic 说明。与 ARMv8.0 Load-Exclusive 和 Store-Exclusive 指令相比,这些说明为多线程应用程序提供更好的性能。
(BZ#1821994)
GCC 现在为特定的 IBM Z 系统释放向量兼容提示
在这个版本中,GCC 编译器可以为 IBM z13 处理器发出向量负载并存储对齐提示。要使用这个改进,编译器必须支持这样的 hint。因此,用户现在可以从某些向量操作的性能提高。
(BZ#1850498)
Dyninst rebase 到版本 10.2.1
Dyninst 二进制分析和修改工具已更新至版本 10.2.1。重要的程序错误修复和增强包括:
-
支持 elfutils
debuginfod
客户端库。 - 改进了并行二进制代码分析。
- 改进了对大型二进制文件的分析和工具。
elfutils
rebase 到版本 0.182
elfutils
软件包已更新至版本 0.182。重要的程序错误修复和增强包括:
-
识别
DW_CFA_AARCH64_negate_ra_state
指令。如果没有启用 Pointer Authentication Code(PAC),您可以使用DW_CFA_AARCH64_negate_ra_state
来展开在 64 位 ARM 架构中为 PAC 编译的代码。 -
elf_update
现在在设置了SHF_COMPRESSED
标志的部分修复了错误的sh_addralign
值。 -
debuginfod-client
现在支持使用 ZSTD 压缩的内核 ELF 镜像。 -
debuginfod
具有更高的软件包遍历,在扫描过程中容忍各种错误。gearing 过程更为可见且可中断,并提供更多 Prometheus 指标。
SystemTap rebase 到版本 4.4
SystemTap 工具已更新至版本 4.4,提供多个程序错误修复和增强。主要变更包括:
- 提高用户空间的性能和稳定性。
- 用户现在可以访问这些架构上的隐式线程本地存储变量: AMD64、Intel 64、IBM Z,IBM Power Systems 的 little-endian 变体。
- 处理浮动点值的初始支持。
- 改进了使用全局变量的脚本的并发性。为保护对全局变量的并发访问所需的锁定进行了优化,以便跨越最小的区域。
- 使用 prologue 和 epilogue 定义别名的新语法。
-
新的
@probewrite
predicate。 -
syscall
参数可再次写入。
有关显著变化的更多信息,请在更新前阅读上游发行注记。
Valgrind 现在支持 IBM z14 指令
在这个版本中,Valgrind 工具套件支持 IBM z14 处理器的说明。现在,您可以使用 Valgrind 工具使用 z14 vector 指令和大量 z14 指令集调试程序。
(BZ#1504123)
cmake rebase 到版本 3.18.2
CMake 构建系统已从版本 3.11.4 升级到 3.18.2。它在 RHEL 8.4 中作为 cmake-3.18.2-8.el8
软件包提供。
要在需要 3.18.2 或更高版本的项目上使用 CMake,请使用命令 cmake_minimum_required(version x.y.z)
。
有关新功能和已弃用功能的更多信息,请参阅 CMake 发行注记。
libmpc
rebase 到版本 1.1.0
libmpc
软件包已更新到 1.1.0 版本,它提供了几个改进和程序错误修复。详情请查看GNU MPC 1.1.0 发行注记。
更新了 GCC 工具集 10
GCC 工具集 10 是提供开发工具最新版本的编译器工具组。它以 AppStream
存储库中的 Software Collection 的形式作为 Application Stream 提供。
RHEL 8.4 中引入的主要更改包括:
- GCC 编译器已更新至上游版本,提供多个程序错误修复。
-
elfutils
已更新至 0.182 版本。 - Dyninst 更新至版本 10.2.1。
- SystemTap 更新至版本 4.4。
GCC 工具集 10 提供以下工具和版本:
工具 | 版本 |
---|---|
GCC | 10.2.1 |
GDB | 9.2 |
Valgrind | 3.16.0 |
SystemTap | 4.4 |
Dyninst | 10.2.1 |
binutils | 2.35 |
elfutils | 0.182 |
dwz | 0.12 |
make | 4.2.1 |
strace | 5.7 |
ltrace | 0.7.91 |
annobin | 9.29 |
要安装 GCC Toolset 10,请以根用户身份运行以下命令:
# yum install gcc-toolset-10
要从 GCC Toolset 10 运行工具:
$ scl enable gcc-toolset-10 tool
要运行一个 shell 会话,其中的 GCC Toolset 10 中的工具版本会覆盖这些工具的系统版本:
$ scl enable gcc-toolset-10 bash
如需更多信息,请参阅使用 GCC Toolset。
GCC Toolset 10 组件在两个容器镜像中可用:
-
rhel8/gcc-toolset-10-toolchain
,包括 GCC 编译器、GDB 调试器和make
自动化工具。 -
rhel8/gcc-toolset-10-perftools
,其中包括性能监控工具,如 SystemTap 和 Valgrind。
要拉取容器镜像,以 root 身份运行以下命令:
# podman pull registry.redhat.io/<image_name>
请注意,现在只支持 GCC Toolset 10 容器镜像。之前 GCC Toolset 版本的容器镜像已弃用。
有关容器镜像的详情,请参阅使用 GCC Toolset 容器镜像。
(BZ#1918055)
GCC Toolset 10: GCC 现在支持 bfloat16
在 GCC Toolset 10 中,GCC 编译器现在支持通过 ACLE Intrinsics 进行 bfloat16
扩展。此增强提供高性能计算。
(BZ#1656139)
GCC Toolset 10: GCC 现在支持 Intel Sapphire Rapids 处理器上的 ENQCMD
和 ENQCMDS
指令
在 GCC Toolset 10 中,GNU 编译器集合(GCC)现在支持 ENQCMD
和 ENQCMDS
指令,您可以使用它们自动将工作描述符提交到设备。要应用这个增强功能,请使用 -menqcmd
选项运行 GCC。
(BZ#1891998)
GCC Toolset 10:Dyninst rebase 到版本 10.2.1
在 GCC Toolset 10 中,Dyninst 二进制分析和修改工具更新至版本 10.2.1。重要的程序错误修复和增强包括:
-
支持 elfutils
debuginfod
客户端库。 - 改进了并行二进制代码分析。
- 改进了对大型二进制文件的分析和工具。
GCC Toolset 10: elfutils
rebase 到版本 0.182
在 GCC Toolset 10 中,elfutils
软件包已更新至 0.182 版本。重要的程序错误修复和增强包括:
-
识别
DW_CFA_AARCH64_negate_ra_state
指令。如果没有启用 Pointer Authentication Code(PAC),您可以使用DW_CFA_AARCH64_negate_ra_state
来展开在 64 位 ARM 架构中为 PAC 编译的代码。 -
elf_update
现在在设置了SHF_COMPRESSED
标志的部分修复了错误的sh_addralign
值。 -
debuginfod-client
现在支持使用 ZSTD 压缩的内核 ELF 镜像。 -
debuginfod
具有更高的软件包遍历,在扫描过程中容忍各种错误。gearing 过程更为可见且可中断,并提供更多 Prometheus 指标。
Go Toolset rebase 到版本 1.15.7
Go Toolset 已升级到 1.15.7。主要改进包括:
-
现在,连接速度更快且需要较少的内存。这是因为新实现的对象文件格式并增加了内部阶段的并发。在这个版本中,内部链接是默认。要禁用此设置,请使用编译器标志
-ldflags=-linkmode=external
。 - 对于高数量的内核,分配小对象已改进(包括最坏的延迟情况)。
-
当没有指定
Subject Alternative Names
时将 X.509 证书中的CommonName
字段视为主机名现在被默认禁用。要启用它,请将值x509ignoreCN=0
添加到GODEBUG
环境变量中。 -
GOPROXY
现在支持跳过返回错误的代理。 -
Go 现在包括新包
time/tzdata
。它允许您将时区数据库嵌入到程序中,即使时区数据库在本地系统中不可用。
有关 Go Toolset 的更多信息,请参阅 使用 Go Toolset。
(BZ#1870531)
Rust Toolset 被 rebase 到版本 1.49.0
Rust Toolset 已更新至 1.49.0 版本。主要变更包括:
- 现在,您可以使用 rustdoc 页面项的路径在 rustdoc 中链接到它。
- rust 测试框架现在隐藏线程输出。失败的测试输出仍然显示在终端中。
-
现在,您可以使用
[T; N]: TryFrom<Vec<T>>
将一个向量转换为任意长度的数组。 现在,您可以使用
slice::select_nth_unstable
执行排序分区。此功能还提供以下变体:-
slice::select_nth_unstable_by
提供 comparator 函数。 -
slice::select_nth_unstable_by_key
提供密钥提取功能。
-
-
现在,您可以使用
ManuallyDrop
作为 Union 字段的类型。还可以使用impl Drop for Union
将 Drop trait 添加到现有地区中。这样便可定义需要手动丢弃某些字段的位置。 - Rust Toolset 的容器镜像已弃用,并且 Rust Toolset 已添加到通用基础镜像(UBI)仓库中。
如需更多信息,请参阅 使用 Rust Toolset。
(BZ#1896712)
LLVM Toolset rebase 到版本 11.0.0
LLVM Toolset 已升级至版本 11.0.0。主要变更包括:
-
AMD 和 Intel 64 位构架、IBM Power Systems、Little Endian 和 IBM Z 添加了对
-fstack-clash-protection
命令行选项的支持。这个新编译器标志通过检查每个 stack 页面来防止对 stack-clash 的攻击。 -
新的编译器 flag
ffp-exception-behavior={ignore,maytrap,strict}
启用浮点异常行为的规格。默认设置为ignore
。 -
新的编译器标志
ffp-model={precise,strict,fast}
允许简化单目的浮点选项。默认设置为precise
。 -
现在默认启用新的编译器标志
-fno-common
。在这个版本中,在多个转换单元中使用 C 版变量定义的代码会触发多定义 linker 错误。要禁用此设置,请使用-fcommon
标志。 - LLVM Toolset 的容器镜像已弃用,LLVM Toolset 已添加到通用基础镜像(UBI)仓库中。
如需更多信息,请参阅使用 LLVM Toolset。
(BZ#1892716)
pcp
rebase 到版本 5.2.5
pcp
软件包已升级到 5.2.5 版本。主要变更包括:
- 通过安全连接支持 SQL 服务器指标数据。
-
带有每个进程网络指标的
eBPF/BCC
netproc 模块. -
pmdaperfevent(1)
支持hv_24x7 core-level
和hv_gpci
事件指标。 - 新的 Linux 进程核算指标、Linux ZFS 指标、Linux XFS 指标、Linux 内核套接字指标、Linux 多路径 TCP 指标、Linux 内存和 ZRAM 指标以及 S.M.A.R.T. 指标支持 NVM Express 磁盘。
-
新的
pcp-htop(1)
实用程序可视觉化系统和进程指标。 -
新的 pmrepconf(1)实用程序来生成
pmrep/pcp2xxx
配置。 -
新的
pmiectl(1)
工具可控制pmie
服务。 -
新的
pmlogctl(1)
工具,用于控制pmlogger
服务。 -
新的
pmlogpaste(1)
实用程序,用于编写日志字符串指标。 -
新的
pcp-atop(1)
实用程序,来处理会计统计和各进程网络统计报告。 -
新的
pmseries(1)
实用程序,来查询函数、语言扩展和 REST API。 -
检测 OOM 终止和套接字连接饱和性的全新
pmie(1)
规则。 -
pcp-atopsar(1)
、pcp-free(1)
、pcp-dstat(1)
、pmlogger(1)
和pmchart(1)
工具中的程序错误修复。 - 对每个文本派生指标的 REST API 和 C API 支持。
- 改进了 OpenMetrics 指标元数据(单元、语义)。
-
广泛重新安排已安装的
/var
文件系统布局。
通过在 grafana-pcp
中 Vector 数据源的中央 pmproxy
来访问远程主机
在一些环境中网络策略不允许从仪表板查看器浏览器中直接连接到受监控的主机的连接。在这个版本中,可以自定义 hostspec
以连接到中央 pmproxy
,后者将请求转发到单个主机。
Grafana
被 rebase 到版本 7.3.6
grafana
软件包已升级至 7.3.6 版本。主要变更包括:
- 新的面板编辑器和新数据转换功能
- 改进了时区支持
-
现在,默认置备路径已从
/usr/share/grafana/conf/provisioning
改为/etc/grafana/provisioning
目录。您可以在/etc/grafana/grafana.ini
配置文件中配置此设置。
如需更多信息,请参阅 Grafana v7.0 中的新内容、Grafana v7.1 中的新内容、Grafana v7.2 中的新内容 和 Grafana v7.3 中的新内容。
grafana-pcp
rebase 到版本 3.0.2
grafana-pcp
软件包已升级至版本 3.0.2。主要变更包括:
Redis:
- 支持在 Grafana 中创建警报。
-
由于性能原因,在 Grafana 变量查询中使用
label_values(metric, label)
已弃用。label_values(label)
查询仍然被支持。
Vector:
-
支持派生的指标,允许在查询中使用算术运算符和统计功能。如需更多信息,请参阅
pmRegisterDerived(3)
man page。 -
可配置 hostspec,您可以在其中通过中央
pmproxy
访问远程性能指标收集器守护进程(PMCD)。 - 自动配置面板的单元。
-
支持派生的指标,允许在查询中使用算术运算符和统计功能。如需更多信息,请参阅
仪表板:
- 使用 Utilization Saturation and Errors(USE)方法,检测潜在的性能问题,并使用清单仪表板显示可能的解决方案。
-
使用
CGroups v2
新的 MS SQL 服务器仪表板、eBPF/BCC
仪表板和容器概述仪表板。 - 所有仪表板现在位于 Datasource 设置页面中的 Dashboards 标签页中,它们不会被自动导入。
升级备注:
更新 Grafana 配置文件:
编辑
/etc/grafana/grafana.ini
Grafana 配置文件,并确保设置了以下选项:allow_loading_unsigned_plugins = pcp-redis-datasource
重启 Grafana 服务器:
# systemctl restart grafana-server
用于访问 PCP 中的 SQL 服务器指标的 Active Directory 身份验证
在这个版本中,系统管理员可以配置 pmdamssql(1)
,以使用 Active Directory(AD)身份验证安全地连接到 SQL Server 指标。
grafana-container
rebase 到版本 7.3.6
rhel8/grafana
容器镜像提供 Grafana。Grafana 是一个开源实用程序,它带有 metrics dashboard,以及 Graphite、Elasticsearch、OpenTSDB、Prometheus、InfluxDB 和 Performance Co-Pilot(PCP)的图形编辑器。grafana-container
软件包已升级至版本 7.3.6。主要变更包括:
-
grafana
软件包现在更新至版本 7.3.6。 -
grafana-pcp
软件包现在更新至版本 3.0.2。
rebase 更新 Red Hat Container Registry 中的 rhel8/grafana
镜像。
要拉取此容器镜像,请执行以下命令:
# podman pull registry.redhat.io/rhel8/grafana
pcp-container
rebase 到版本 5.2.5
rhel8/pcp
容器镜像提供 Performance Co-Pilot,这是系统性能分析工具包。pcp-container
软件包已升级到 5.2.5 版本。主要变更包括:
-
pcp
软件包现在更新至版本 5.2.5。 -
引入了一个新的
PCP_SERVICES
环境变量,它指定要在容器内启动的 PCP 服务逗号分隔列表。
rebase 更新 Red Hat Container Registry 中的 rhel8/pcp
镜像。
要拉取此容器镜像,请执行以下命令:
# podman pull registry.redhat.io/rhel8/pcp
JDK Mission Control rebase 到版本 8.0.0
HotSpot JVM 的 JDK Mission Control(JMC)配置集程序由 jmc:rhel8
模块流提供,已升级到 8.0.0 版本。主要改进包括:
-
Treemap
viewer 已添加到JOverflow
插件中,按类可视化内存用量。 -
Threads
图现在增加了更多的过滤和缩放选项。 - JDK Mission Control 现在支持打开使用 LZ4 算法压缩的 JDK Flight Recorder 记录。
-
在
Memory
和TLAB
视图中添加了新的列,以帮助您确定分配压力的区域。 -
添加了
Graph
视图以改进堆栈追踪的视觉化。 -
Percentage
列已添加到直方图表中。
RHEL 8 中的 JMC 需要运行 JDK 版本 8 或更高版本。目标 Java 应用程序必须至少使用 OpenJDK 版本 8 运行,以便 JDK Flight Recorder 功能可以访问 JDK Flight Recorder 功能。
jmc:rhel8
模块流有两个配置集:
-
通用
配置集,用于安装整个 JMC 应用程序 -
内核
配置文件
,仅安装核心 Java 库(jmc-core
)
要安装 jmc:rhel8
模块流的 common
配置集,请使用:
# yum module install jmc:rhel8/common
将配置文件名称更改为 core
,以仅安装 jmc-core
软件包。
(BZ#1919283)