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 動的ローダーが要求を無視せず、指定の監査モジュールを読み込むようになりました。その結果、ラッパースクリプトを作成せず、同様のメカニズムを使用せずに、特定のプログラムに対して監査モジュールをアクティブにできます。

(BZ#1871385)

glibc で IBM POWER9 のパフォーマンスが向上しました。

今回の更新で、IBM POWER9 の strlenstrcpystpcpyrawmemchr 関数の新しい実装が追加されました。その結果、IBM POWER9 ハードウェアでこの機能はより高速に実行するようになり、パフォーマンスが向上します。

(BZ#1871387)

IBM Z での memcpy および memset のパフォーマンスの最適化

今回の機能拡張により、IBM Z プロセッサーの小規模な (< 64KiB) と大規模なデータコピーの両方を加速するために、memcpy および memset API のコアライブラリー実装が調整されました。その結果、インメモリーデータを使用するアプリケーションは、さまざまなワークロードでパフォーマンスが大幅に改善されました。

(BZ#1871395)

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 クライアントライブラリーのサポート
  • 並行バイナリーコード分析が改善されました。
  • 大規模なバイナリーの分析および計測が改善されました。

(BZ#1892001)

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 メトリックを提供します。

(BZ#1875318)

SystemTap がバージョン 4.4 にリベースされました。

SystemTap 計測ツールがバージョン 4.4 に更新され、バグ修正および機能強化が複数追加されました。以下は、主な変更点です。

  • ユーザー空間のプローブにパフォーマンスおよび安定性が改善されました。
  • ユーザーは、IBM Power Systems のリトルエンディアンバリアントである AMD64、Intel 64、IBM Z、およびアーキテクチャーで暗黙的なスレッドローカルストレージ変数にアクセスできるようになりました。
  • 浮動小数点値処理の初期サポート。
  • グローバル変数を使用するスクリプトの同時実行が改善されました。グローバル変数への同時アクセスを保護するのに必要なロックが最適化され、可能な最低限のリージョンまで超過されました。
  • 述語とエピローグの両方を持つエイリアスを定義する新しい構文。
  • 新しい @probewrite 述語。
  • syscall の引数は、再度書き込み可能です。

主な変更の詳細は、更新前に アップストリームのリリースノート を参照してください。

(BZ#1875341)

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 リリースノート を参照してください。

(BZ#1816874)

libmpc がバージョン 1.1.0 にリベースされました。

libmpc パッケージがバージョン 1.1.0 にリベースされ、以前のバージョンに対する機能強化およびバグ修正が複数追加されました。詳細は、GNU MPC 1.1.0 リリースノート を参照してください。

(BZ#1835193)

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 クライアントライブラリーのサポート
  • 並行バイナリーコード分析が改善されました。
  • 大規模なバイナリーの分析および計測が改善されました。

(BZ#1892007)

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 メトリックを提供します。

(BZ#1879758)

Go Toolset がバージョン 1.15.7 にリベースされました。

Go Toolset が 1.15.7 にアップグレードされました。主な機能強化は、次のとおりです。

  • 新たに実装されたオブジェクトファイル形式および内部フェーズの同時実行が増えると、リンクが速くなり、必要なメモリーが少なくなりました。今回の機能拡張により、内部リンクがデフォルトになりました。この設定を無効にするには、コンパイラーフラグ -ldflags=-linkmode=external を使用します。
  • ワーストケースのレイテンシーを含め、コア数が多い場合の小さなオブジェクトの割り当てが改善されました。
  • Subject Alternative Names が指定されていない場合に X.509 証明書の CommonName フィールドをホスト名として扱うことが、デフォルトで無効になりました。これを有効にするには、値 x509ignoreCN=0GODEBUG 環境変数に追加します。
  • 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 ファイルシステムレイアウトを広範囲にインストールしていました。

(BZ#1854035)

grafana-pcp の Vector データソース用に中央 pmproxy 経由でリモートホストにアクセスする

一部の環境では、ネットワークポリシーでは、Dashboard ビューアーのブラウザーから監視するホストに直接接続が許可されません。今回の更新で、中央 pmproxy に接続するために hostspec をカスタマイズできるようになりました。これにより、個々のホストにリクエストを転送できるようになりました。

(BZ#1845592)

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.0What's New in Grafana v7.1What's New in Grafana v7.2What's New in Grafana v7.3 を参照してください。

(BZ#1850471)

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) にアクセスできます。
    • パネルのユニットを自動的に設定します。
  • ダッシュボード:

    • パフォーマンスの問題を検出し、Utilization Saturation and Errors (USE) メソッドを使用して、チェックリストダッシュボードで考えられる解決策を表示します。
    • CGroups v2 を使用した新しい MS SQL サーバーダッシュボード、eBPF/BCC ダッシュボード、およびコンテナー概要ダッシュボード。
    • すべてのダッシュボードは データソース 設定ページの Dashboards タブに配置されるようになり、自動的にインポートされません。

アップグレードの注意事項:

Grafana 設定ファイルを更新します。

  1. Grafana 設定ファイル /etc/grafana/grafana.ini を編集し、以下のオプションが設定されていることを確認します。

    allow_loading_unsigned_plugins = pcp-redis-datasource
  2. Grafana サーバーを再起動します。

    # systemctl restart grafana-server

(BZ#1854093)

PCP の SQL Server メトリックにアクセスするための Active Directory 認証

今回の更新で、システム管理者は、Active Directory AD) 認証を使用して SQL Server メトリックに安全に接続するように pmdamssql(1) を設定できるようになりました。

(BZ#1847808)

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

(BZ#1916154)

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

(BZ#1916155)

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)