4.12. コンパイラーおよび開発ツール
glibc
ライブラリーが、最適化した共有ライブラリー実装を読み込む glibc-hwcaps
サブディレクトリーに対応
特定のアーキテクチャーでは、ハードウェアアップグレードにより、glibc
が以前のハードウェア生成用に最適化されたライブラリーではなく、ベースラインの最適化でライブラリーを読み込むことがありました。また、AMD CPU で実行する際に、最適化されたライブラリーはまったく読み込まれていませんでした。
今回の機能拡張により、glibc
は、glibc-hwcaps
サブディレクトリーで最適化されたライブラリー実装の検索をサポートするようになりました。動的ローダーは、使用中の CPU とそのハードウェア機能に基づいて、サブディレクトリー内のライブラリーファイルをチェックします。この機能は、IBM Power Systems (リトルエンディアン)、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
のパフォーマンスの最適化
今回の機能拡張により、IBM Z プロセッサーの小規模な (< 64KiB) と大規模なデータコピーの両方を加速するために、memcpy
および memset
API のコアライブラリー実装が調整されました。その結果、インメモリーデータを使用するアプリケーションは、さまざまなワークロードでパフォーマンスが大幅に改善されました。
GCC が ARMv8.1 LSE アトミック命令に対応
今回の機能強化により、GCC コンパイラーは、ARMv8.1 仕様で追加されたアトミック命令 (LSE)、Large System Extensions (LSE) に対応するようになりました。この手順では、ARMv8.0 Load-Exclusive および Store-Exclusive 命令よりもマルチスレッドアプリケーションのパフォーマンスが向上します。
(BZ#1821994)
GCC が、特定の IBM Z システムでベクトル調整ヒントを生成するようになりました。
今回の更新で、GCC コンパイラーは、IBM z13 プロセッサーのベクター負荷およびストア調整ヒントを出力できるようになりました。この機能拡張を使用するには、アセンブラーがこのようなヒントをサポートする必要があります。その結果、特定のベクター操作のパフォーマンスが向上します。
(BZ#1850498)
dyninst がバージョン 10.2.1 にリベースされました。
Dyninst バイナリー分析および変更ツールがバージョン 10.2.1 に更新されました。主なバグ修正と機能強化は、以下のとおりです。
-
elfutils
debuginfod
クライアントライブラリーのサポート - 並行バイナリーコード分析が改善されました。
- 大規模なバイナリーの分析および計測が改善されました。
elfutils
がバージョン 0.182 にリベースされました。
elfutils
パッケージがバージョン 0.182 に更新されました。主なバグ修正と機能強化は、以下のとおりです。
-
DW_CFA_AARCH64_negate_ra_state
命令を認識します。PAC (Pointer Authentication Code) が有効になっていない場合は、DW_CFA_AARCH64_negate_ra_state
を使用して、64 ビット ARM アーキテクチャーの PAC 用にコンパイルされるアンゴールドコードを使用できます。 -
elf_update
は、SHF_COMPRESSED
フラグを設定したセクションで不正なsh_addralign
値を修正するようになりました。 -
debuginfod-client
が、ZSTD で圧縮されたカーネル ELF イメージに対応するようになりました。 -
debuginfod
にはより効率的なパッケージトラバースがあり、スキャン中のさまざまなエラーに対応します。ゲーミングプロセスはより表示可能で割り込み可能であり、さらに Prometheus メトリックを提供します。
SystemTap がバージョン 4.4 にリベースされました。
SystemTap 計測ツールがバージョン 4.4 に更新され、バグ修正および機能強化が複数追加されました。以下は、主な変更点です。
- ユーザー空間のプローブにパフォーマンスおよび安定性が改善されました。
- ユーザーは、IBM Power Systems のリトルエンディアンバリアントである AMD64、Intel 64、IBM Z、およびアーキテクチャーで暗黙的なスレッドローカルストレージ変数にアクセスできるようになりました。
- 浮動小数点値処理の初期サポート。
- グローバル変数を使用するスクリプトの同時実行が改善されました。グローバル変数への同時アクセスを保護するのに必要なロックが最適化され、可能な最低限のリージョンまで超過されました。
- 述語とエピローグの両方を持つエイリアスを定義する新しい構文。
-
新しい
@probewrite
述語。 -
syscall
の引数は、再度書き込み可能です。
主な変更の詳細は、更新前に アップストリームのリリースノート を参照してください。
Valgrind が IBM z14 命令に対応
今回の更新で、Valgrind ツールスイートが IBM z14 プロセッサーの命令に対応するようになりました。これにより、Valgrind ツールを使用して、z14 ベクトル命令とその他の z14 命令セットを使用してプログラムをデバッグできるようになりました。
(BZ#1504123)
cmake がバージョン 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
がバージョン 1.1.0 にリベースされました。
libmpc
パッケージがバージョン 1.1.0 にリベースされ、以前のバージョンに対する機能強化およびバグ修正が複数追加されました。詳細は、GNU MPC 1.1.0 リリースノート を参照してください。
GCC Toolset 10 の更新
GCC Toolset 10 は最新バージョンの開発ツールを提供するコンパイラーツールセットです。このツールセットは、AppStream
リポジトリーにおいて、Software Collection の形式で、Application Stream として利用できます。
RHEL 8.4 で導入された主な変更点は、以下のとおりです。
- GCC コンパイラーがアップストリームバージョンに更新され、バグ修正が複数追加されました。
-
elfutils
がバージョン 0.182 に更新されました。 - Dyninst がバージョン 10.2.1 に更新されました。
- SystemTap がバージョン 4.4 に更新されました。
以下のツールおよびバージョンは、GCC Toolset 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 をインストールするには、root で以下のコマンドを実行します。
# yum install gcc-toolset-10
GCC Toolset 10 のツールを実行するには、以下のコマンドを実行します。
$ scl enable gcc-toolset-10 tool
GCC Toolset バージョン 10 のツールバージョンが、このようなツールのシステムバージョンをオーバーライドするシェルセッションを実行するには、次のコマンドを実行します。
$ scl enable gcc-toolset-10 bash
詳細は、Using GCC Toolset を参照してください。
GCC Toolset 10 コンポーネントが、以下のコンテナーイメージ 2 つで利用可能になりました。
-
GCC コンパイラー、GDB デバッガー、
make
自動化ツールを含むrhel8/gcc-toolset-10-toolchain
-
SystemTap や Valgrind などのパフォーマンス監視ツールを含む
rhel8/gcc-toolset-10-perftools
コンテナーイメージをプルするには、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
命令に対応するようになりました。これを使用して、デバイスにワーク記述子を自動的に送信できます。今回の機能拡張を適用するには、GCC に -menqcmd
オプションを指定して実行します。
(BZ#1891998)
GCC Toolset 10: Dyninst がバージョン 10.2.1 にリベースされました。
GCC Toolset 10 では、Dyninst バイナリー分析および修正ツールがバージョン 10.2.1 に更新されました。主なバグ修正と機能強化は、以下のとおりです。
-
elfutils
debuginfod
クライアントライブラリーのサポート - 並行バイナリーコード分析が改善されました。
- 大規模なバイナリーの分析および計測が改善されました。
GCC Toolset 10: elfutils
がバージョン 0.182 にリベースされました。
GCC Toolset 10 では、elfutils
パッケージがバージョン 0.182 に更新されました。主なバグ修正と機能強化は、以下のとおりです。
-
DW_CFA_AARCH64_negate_ra_state
命令を認識します。PAC (Pointer Authentication Code) が有効になっていない場合は、DW_CFA_AARCH64_negate_ra_state
を使用して、64 ビット ARM アーキテクチャーの PAC 用にコンパイルされるアンゴールドコードを使用できます。 -
elf_update
は、SHF_COMPRESSED
フラグを設定したセクションで不正なsh_addralign
値を修正するようになりました。 -
debuginfod-client
が、ZSTD で圧縮されたカーネル ELF イメージに対応するようになりました。 -
debuginfod
にはより効率的なパッケージトラバースがあり、スキャン中のさまざまなエラーに対応します。ゲーミングプロセスはより表示可能で割り込み可能であり、さらに Prometheus メトリックを提供します。
Go Toolset がバージョン 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 の詳細は、Using Go Toolset を参照してください。
(BZ#1870531)
Rust Toolset がバージョン 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
は、コンパレーター関数を提供します。 -
slice::select_nth_unstable_by_key
は、キー抽出関数を提供します。
-
-
union フィールドのタイプに
ManuallyDrop
を使用できるようになりました。impl Drop for Union
を使用して、既存のユニオンに Drop トレイトを追加することも可能です。これにより、特定のフィールドを手動でドロップする必要があるユニーディネートを定義できます。 - Rust Toolset のコンテナーイメージが非推奨になり、Rust Toolset は Universal Base Images (UBI) リポジトリーに追加されました。
詳細は、Rust Toolset の使用 を参照してください。
(BZ#1896712)
LLVM Toolset がバージョン 11.0.0 にリベースされました。
LLVM Toolset がバージョン 11.0.0 にアップグレードされました。以下は、主な変更点です。
-
-fstack-clash-protection
コマンドラインオプションのサポートが、AMD および Intel 64 ビットアーキテクチャー、IBM Power Systems、リトルエンディアン、および IBM Z に追加されました。新しいコンパイラーフラグは、各スタックページを自動的にチェックしてスタッククラッシュ攻撃から保護します。 -
新しいコンパイラーフラグ
ffp-exception-behavior={ignore,maytrap,strict}
は、浮動小数点例外動作の指定を有効にします。デフォルト設定はignore
です。 -
新しいコンパイラーフラグ
ffp-model={precise,strict,fast}
により、単一の目的の浮動小数点オプションを簡素化できます。デフォルト設定はprecise
になります。 -
新しいコンパイラーフラグ
-fno-common
がデフォルトで有効になりました。今回の機能強化により、複数の翻訳ユニットで 10 つの変数定義を使用して C で書かれたコードが、複数の有効なリンカーエラーをトリガーするようになりました。この設定を無効にするには、-fcommon
フラグを使用します。 - LLVM Toolset のコンテナーイメージが非推奨になり、LLVM Toolset は Universal Base Images (UBI) リポジトリーに追加されました。
詳細は、LLVM Toolset の使用 を参照してください。
(BZ#1892716)
pcp
がバージョン 5.2.5 にリベースされました。
pcp
パッケージが、バージョン 5.2.5 にアップグレードされました。以下は、主な変更点です。
- SQL Server メトリックはセキュアな接続でサポートされています。
-
プロセスごとのネットワークメトリックを使用する
eBPF/BCC
netproc モジュール。 -
hv_24x7 core-level
およびhv_gpci
イベントメトリックに対するpmdaperfevent(1)
のサポート。 - NVM Express ディスクに対する新しい Linux プロセスアカウンティングメトリック、Linux ペイン、Linux カーネルソケットメトリック、Linux マルチパス TCP メトリック、および ZRAM メトリック、および S.M.A.R.T. メトリックのサポートが追加されました。
-
システムおよびプロセスメトリックを視覚化する新しい
pcp-htop(1)
ユーティリティー。 -
pmrep/pcp2xxx
設定を生成する新しい pmrepconf(1) ユーティリティー。 -
pmie
サービスを制御する新しいpmiectl(1)
ユーティリティー。 -
pmlogger
サービスを制御する新しいpmlogctl(1)
ユーティリティー。 -
ログ文字列のメトリックを書き込む新しい
pmlogpaste(1)
ユーティリティー。 -
アカウンティング統計とプロセスごとのネットワーク統計レポートを処理する新しい
pcp-atop(1)
ユーティリティー。 -
関数、言語拡張、および REST API をクエリーする
pmseries(1)
ユーティリティーが追加されました。 -
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
経由でリモートホストにアクセスする
一部の環境では、ネットワークポリシーでは、Dashboard ビューアーのブラウザーから監視するホストに直接接続が許可されません。今回の更新で、中央 pmproxy
に接続するために hostspec
をカスタマイズできるようになりました。これにより、個々のホストにリクエストを転送できるようになりました。
grafana
がバージョン 7.3.6 にリベースされました。
grafana
パッケージがバージョン 7.3.6 にアップグレードされました。以下は、主な変更点です。
- 新しいパネルエディターと新しいデータ変換機能
- タイムゾーンのサポートの改善
-
デフォルトのプロビジョニングパスが、
/usr/share/grafana/conf/provisioning
から/etc/grafana/provisioning
ディレクトリーに変更になりました。この設定は、/etc/grafana/grafana.ini
設定ファイルで設定できます。
詳細は、What's New in Grafana v7.0、What's New in Grafana v7.1、What's New in Grafana v7.2、What's New in Grafana v7.3 を参照してください。
grafana-pcp
がバージョン 3.0.2 にリベースされました。
grafana-pcp
パッケージがバージョン 3.0.2 にアップグレードされました。以下は、主な変更点です。
Redis:
- Grafana でのアラートの作成をサポートします。
-
パフォーマンス上の理由から、Grafana 変数のクエリーの
label_values(metric, label)
の使用が非推奨になりました。label_values(label)
クエリーは引き続きサポートされます。
Vector:
-
派生メトリックをサポートします。これにより、クエリー内で算算演算子および統計関数を使用できます。詳細は、man ページの
pmRegisterDerived(3)
を参照してください。 -
設定可能な hostspec: 中央の
pmproxy
経由でリモート Performance Metrics Collector Daemon (PMCD) にアクセスできます。 - パネルのユニットを自動的に設定します。
-
派生メトリックをサポートします。これにより、クエリー内で算算演算子および統計関数を使用できます。詳細は、man ページの
ダッシュボード:
- パフォーマンスの問題を検出し、Utilization Saturation and Errors (USE) メソッドを使用して、チェックリストダッシュボードで考えられる解決策を表示します。
-
CGroups v2
を使用した新しい MS SQL サーバーダッシュボード、eBPF/BCC
ダッシュボード、およびコンテナー概要ダッシュボード。 - すべてのダッシュボードは データソース 設定ページの Dashboards タブに配置されるようになり、自動的にインポートされません。
アップグレードの注意事項:
Grafana 設定ファイルを更新します。
Grafana 設定ファイル
/etc/grafana/grafana.ini
を編集し、以下のオプションが設定されていることを確認します。allow_loading_unsigned_plugins = pcp-redis-datasource
Grafana サーバーを再起動します。
# systemctl restart grafana-server
PCP の SQL Server メトリックにアクセスするための Active Directory 認証
今回の更新で、システム管理者は、Active Directory AD) 認証を使用して SQL Server メトリックに安全に接続するように pmdamssql(1)
を設定できるようになりました。
grafana-container
がバージョン 7.3.6 にリベースされました。
rhel8/grafana
コンテナーイメージは Grafana を提供します。Grafana は、メトリックダッシュボードを使用したオープンソースユーティリティーで、Graphite、Elasticsearch、OpenTSDB、Prometheus、InfluxDB、および Performance Co-Pilot(PCP) 用のグラフィックエディターです。grafana-container
パッケージがバージョン 7.3.6 にアップグレードされました。以下は、主な変更点です。
-
grafana
パッケージがバージョン 7.3.6 に更新されました。 -
grafana-pcp
パッケージがバージョン 3.0.2 に更新されました。
リベースは、Red Hat コンテナーレジストリーの rhel8/grafana
イメージを更新します。
このコンテナーイメージをプルするには、以下のコマンドを実行します。
# podman pull registry.redhat.io/rhel8/grafana
pcp-container
がバージョン 5.2.5 にリベースされました。
rhel8/pcp
コンテナーイメージは、システムパフォーマンス分析ツールキットである Performance Co-Pilot を提供します。pcp-container
パッケージがバージョン 5.2.5 にアップグレードされました。以下は、主な変更点です。
-
pcp
パッケージが、バージョン 5.2.5 に更新されました。 -
コンテナー内で起動 する PCP サービスのコンマ区切りのリストを指定する新しい
PCP_SERVICES
環境変数が導入されました。
リベースは、Red Hat コンテナーレジストリーの rhel8/pcp
イメージを更新します。
このコンテナーイメージをプルするには、以下のコマンドを実行します。
# podman pull registry.redhat.io/rhel8/pcp
JDK Mission Control がバージョン 8.0.0 にリベースされました。
jmc:rhel8
モジュールストリームによって提供される HotSpot JVM の JMC (JDK Mission Control) プロファイルャーが、バージョン 8.0.0 にアップグレードされました。主な機能強化は、次のとおりです。
-
クラスによるメモリー使用量を視覚的に把握するために、
Treemap
ビューアーがJOverflow
プラグインに追加されました。 -
Threads
グラフは、より多くのフィルタリングおよびズームオプションで強化されました。 - JDK Mission Control は、LZ4 アルゴリズムを使用して圧縮した JDK Flight Recorder を開くためのサポートが追加されました。
-
新規列が
Memory
およびTLAB
に追加され、割り当て不足の領域を特定しやすくなります。 -
スタックトレースの視覚化を改善するために、
Graph
ビューが追加されました。 -
Percentage
の列がヒストグラムテーブルに追加されました。
RHEL 8 で JMC を実行するには、JDK バージョン 8 以降を実行する必要があります。ターゲット Java アプリケーションは、最低でも OpenJDK バージョン 8 で実行する必要があります。これにより、JMC が JDK Flight Recorder 機能にアクセスできるようになります。
jmc:rhel8
モジュールストリームには、以下の 2 つのプロファイルがあります。
-
JMC アプリケーション全体をインストールする
common
プロファイル -
Java ライブラリーのみをインストールする
core
プロファイル (jmc-core
)
jmc:rhel8
モジュールストリームの common
プロファイルをインストールするには、以下を使用します。
# yum module install jmc:rhel8/common
プロファイル名を core
に変更して、jmc-core
パッケージのみをインストールします。
(BZ#1919283)