4.13. コンパイラーおよび開発ツール
glibc は、高度なスケジューラーオプションのために sched_setattr と sched_getattr を サポートするようになりました。
以前は、glibc は<sched.h> で定義された関数を通じて、限られたセットの Linux スケジューラーオプションへのアクセスのみを提供していました。この制限により、アプリケーションが高度なスケジューリング機能にアクセスするには、直接のシステムコールまたは Linux カーネルヘッダーを使用する必要がありました。
この機能強化により、sched_setattr および sched_getattr による拡張可能なスケジューラー設定メカニズムが、glibc の<sched.h> ヘッダーファイルを通じて利用できるようになりました。この変更には、SCHED_DEADLINE などの追加のスケジューリングポリシーのサポートが含まれています。
その結果、アプリケーションは、直接のシステムコールやカーネル固有のヘッダーに依存することなく、より幅広いスケジューリングオプションを選択できるようになりました。これにより、開発者の移植性と柔軟性が向上します。
Jira:RHEL-56627[1]
glibc pthread_gettid_np 関数が libc_nonshared.a に追加されました
従来、glibc の pthread_t ハンドルから Linux のタスク ID またはスレッド ID(TID) を直接取得する方法はありませんでした。_GNU_SOURCE が 定義されているときに <pthread.h> で宣言される、新しく実装された pthread_gettid_np 関数により、sched_setattr を 使用するアプリケーションなど、TID を必要とするアプリケーションが、pthread_t ハンドルから TID 値を直接取得できるようになりました。
その結果、アプリケーションは pthread_t ハンドルから TID を取得した後、TID を必要とする関数を使用できるようになり、互換性が向上し、スレッド管理が簡素化されます。
inet_ntop と inet_pton に対する glibc の要塞化のサポートが追加されました
以前は、glibc API の inet_ntop と inet_pton に はソースコード強化機能が含まれていなかったため、コンパイラーはプログラム実行前に一部のバッファーエラーを検出することができませんでした。
今回のアップデートにより、inet_ntop と inet_pton に属性アクセスアノテーションが追加され、コンパイラーがバッファーの誤用の可能性について警告できるようになりました。これらの API は、現在 Source Fortification の対象となっており、セキュリティーと信頼性が向上しました。
Jira:RHEL-44920[1]
GDB が IBM の z17 CPU アーキテクチャーをサポートするようになりました
gdb パッケージは、IBM の z17 CPU アーキテクチャーで導入された新しいハードウェア命令を使用するバイナリーをサポートするように拡張されました。この更新により、開発者およびシステム管理者は、RHEL 9.7 上で、最新の IBM Z ハードウェア用にコンパイルされたアプリケーションをデバッグできるようになります。
Jira:RHEL-50069[1]
GCC Toolset15 が利用可能になりました
今回のアップデートにより、gcc-toolset-15 が RHEL 9.7 で利用可能になりました。このツールセットには、サポートされている最新バージョンの GCC と関連ユーティリティーが含まれており、開発者は最新のコンパイラー技術を使用してアプリケーションを構築、テスト、デプロイできます。
Jira:RHEL-81741[1]
ppc64le での -fpatchable-function-entry の ELFv2 ABI サポート
以前は、gcc の -fpatchable-function-entry オプションは ppc64le アーキテクチャー上の ELFv2 ABI をサポートしていなかったため、その ABI に対して NOP 命令が誤った場所に生成されるという問題が発生していました。この問題により、ELFv2 をターゲットとする場合に、このオプションを正しく使用できませんでした。
今回のアップデートにより、ppc64le 上で -fpatchable-function-entry オプションを使用して ELFv2 ABI 用のプログラムを作成できるようになり、NOP が正しく配置されることが保証され、このプラットフォーム上で開発を行うユーザーの互換性が向上します。
Jira:RHEL-75806[1]
llvm-toolset が LLVM 20 にリベースされました
llvm-toolset が LLVM 20 にアップデートされ、C、C++、Rust のワークフロー全体にわたって、コード生成の改善、パフォーマンスの最適化、言語フロントエンドとライブラリーのサポートの拡張が実現しました。このリベースでは、rust、annobin、bcc、bpftrace、qt5-qttools、mesa の再ビルドを含む、RHEL の依存コンポーネントを整合します。ビルドは llvm-20.1.8-3.el9 で検証されています。
主な変更点は次のとおりです。
-
ppc64leの修正を含むバックエンドの改善 - 全般的なパフォーマンスと信頼性を向上させるために、Clang および LLVM パスの最適化と診断機能を強化
- LLVM 20 との互換性を確保するために、関係各所が連携してパッケージを再ビルドすることにより、ツールチェーンエコシステムを更新
- このストリームの ARM および MIPS に関するアップストリームの方針に従って、古いターゲットの非推奨化を継続
複数の動的リンカー名前空間を持つアプリケーションをデバッグするための _r_debug 拡張のサポートが改善されました
glibc パッケージには、複数の名前空間をサポートするためにバックポートされた _r_debug 拡張機能が含まれるようになりました。従来、実行中のプロセスにアタッチしたり、コアダンプを分析したりする際に、アプリケーションが dlmopen モジュールや audit モジュールで複数の名前空間を使用している場合、GDB などのデバッガーではロードされたすべての共有オブジェクトを表示できませんでした。
この更新により、最近のバージョンの GDB で、すべての動的リンカー名前空間の共有オブジェクトを表示できるようになりました。これにより、包括的なデバッグおよび分析機能が提供されます。
Jira:RHEL-101986[1]
glibc における例外処理パフォーマンスの向上
この更新前は、大規模なアプリケーションでの例外処理が遅かったため、特にユーザー数が多い環境や例外が頻繁に発生する環境で、パフォーマンスに影響が出ていました。これは、_Unwind_Find_FDE から呼び出される __dl_iterate_phdr 関数で費やされる時間が原因でした。
この更新により、glibc の例外処理アルゴリズムが改善され、例外処理の速度が向上しました。このアップデートでは、GLIBC_2.35 の一部として、__epoll_pwait2_time64、__memcmpeq、_dl_find_object、epoll_pwait2、posix_spawn_file_actions_addtcsetpgrp_np、posix_spawnattr_tcgetpgrp_np、および posix_spawnattr_tcsetpgrp_np を含む新しいシンボルが ABI に追加されます。
メモリー割り当て失敗時における glibc qsort の動作の強化
メモリー割り当てが失敗した場合、glibc パッケージの qsort 関数 と qsort_r 関数はヒープソートによるフォールバックを使用します。この変更により、無効な比較関数の処理が改善され、メモリー割り当てが失敗した場合のパフォーマンスがより予測可能なものになります。
フォールバックが安定ソートではないため、等しい要素が異なる順序で現れる可能性があります。C 言語の標準規格では、安定性は要求されていません。
gdb がバージョン 16.3 にリベースされました
RHEL 9.7 における gdb バージョン 16.3 への更新により、次の主な機能拡張が提供されます。
- Intel MPX のサポートが削除されました。
- Intel の Linear Address Masking (LAM) や aarch64 の Memory Tagging Extension (MTE) など、タグ付きデータポインターのサポートが追加されました。
- パフォーマンス向上のために、バックグラウンド DWARF 読み取りが有効になりました。
Intel Process Trace (
record btrace) の強化:-
set record btrace pt event-tracingによって非同期イベント出力が有効になりました -
Ptwrite ペイロードが、
RecordAuxiliaryオブジェクトとして Python でアクセスできるようになりました。
-
Python 統合の強化:
-
停止イベントに、MI の "*stopped" イベントを反映した
details属性が含まれるようになりました。 -
gdb.Progspace()がオブジェクトを直接作成しなくなりました。オブジェクトは他の API を使用して取得する必要があります。 -
gdb.Inferiorおよびgdb.InferiorThreadオブジェクトにユーザー定義属性を追加できます。 -
新しいイベントソース
gdb.tui_enabledが導入されました。 -
現在の記録のトレースデータをクリアする
gdb.record.clearが追加されました。 - 見つからない objfiles とデバッグ情報を処理するためのモジュールが追加されました。
-
新しいクラス
gdb.missing_debug.MissingDebugInfoをサブクラス化して、不足しているデバッグ情報を処理できます。 -
新しい属性
gdb.Symbol.is_artificial。 - 複数のドメインにわたるシンボル検索用の新しい定数。
-
新しい関数
gdb.notify_mi(NAME, DATA)により、カスタムの非同期通知が発行されます。 -
値の内容を読み書きするための新しい属性
gdb.Value.bytes。 -
CTRL-C 割り込みをシミュレートするための
gdb.interruptが追加されました。 -
新しい属性
gdb.InferiorThread.ptid_stringにより、ターゲット ID が提供されます。
-
停止イベントに、MI の "*stopped" イベントを反映した
Debug Adapter Protocol (DAP) の変更:
- "scopes" リクエストが更新され、グローバル変数と最後の戻り値が含まれるようになりました。
- "launch" および "attach" リクエストはいつでも使用でき、"configurationDone" 後に有効になります。
- "variables" リクエストが人工的なシンボルを返さなくなりました。
- "process" イベントと "cancel" リクエストのサポートが追加されました。
- "attach" リクエストでプログラムの指定がサポートされるようになりました。
- スタイル設定、言語フレームの不一致に関する警告、見つからない objfile のハンドラー、および関数呼び出しのタイムアウト用の新しいコマンドが導入されました。
-
いくつかのコマンドが強化され、名前が変更されました。これには、
disassembleのエラー処理の改善や、set unwindonsignalからset unwind-on-signalへの名前変更が含まれます。 -
リモートパケットのサポートが拡張されました。これには、ファイルステータスおよびメモリーフェッチ用の新しいパケット、および
cloneなどの新しいストップ停止理由が含まれます。 - スレッドごとのイベントレポートオプションと、アドレスタギングのチェック機能が導入されました。
AMD GPU 用の pmda が、グローバルの GPU データ収集のために有効化されました
この更新前は、完全なサポートに必要な特定の機能がカーネルに欠けていたため、AMD GPU 用の PMDA (Performance Co-Pilot メトリクスエージェント) を RHEL で利用できませんでした。
この更新により、ユーザーは pcp-pmda-amdgpu パッケージを使用して、AMD GPU 上のグローバルの GPU データを RHEL で収集できるようになりました。
IBM Z z17 の初期サポートが glibc に追加されました。
glibc の動的ローダーが強化され、IBM z17 CPU またはその特定の機能の検出をサポートするようになりました。その結果、/usr/lib64/glibc-hwcap/z17/ ディレクトリーにインストールされている IBM z17 最適化ライブラリーは、z17 システム上で自動的にロードされます。この更新により、IBM Z z17 プラットフォームのハードウェア互換性とパフォーマンスが向上します。
Jira:RHEL-50086[1]
Rust Toolset がバージョン 1.88.0 にリベースされました
RHEL 9.7 には、Rust Toolset バージョン 1.88.0 が同梱されています。この更新には、次の主な機能拡張が含まれています。
- Rust 2024 Edition が安定版になりました。これは、大幅な言語変更を可能にするメジャーオプトインリリースであり、これまでにリリースされた最大のエディションです。
-
letチェーンを備えた 2024 年版を使用すると、if条件とwhile条件内でletステートメントを&& で流暢に連結できるため、ネストを減らし、可読性を向上させることができます。 -
ハイパフォーマンスコンピューティング向けに、ターゲット機能を有効にすると、safe Rust から複数の
std::arch組み込み関数を直接呼び出すことができます。これにより、特定の CPU 機能に直接アクセスできます。 -
asyncクロージャーがサポートされ、非同期プログラミング用のファーストクラスのソリューションが提供されるようになりました。これらのクロージャーにより、キャプチャーからの借用が可能になり、AsyncFn トレイトを使用して高階関数シグネチャーを適切に表現できるようになります。 -
トレイトのアップキャストにより、トレイトオブジェクトへの参照をそのスーパートレイトへの参照に変換できるようになりました、これにより、特に
Anyトレイトを使用する一般的なパターンが簡素化されます。 - Cargo がキャッシュを自動的に消去し、1 - 3 カ月間アクセスされていない古いダウンロードファイルを削除するようになりました。これにより、ディスク領域の管理が容易になります。
Rust Toolset は Rolling Application Stream であり、Red Hat は最新バージョンのみをサポートします。詳細は、Red Hat Enterprise Linux Application Streams ライフサイクル ドキュメントを参照してください。
tzdata に NEWS ファイルが含まれるようになりました
今回のアップデートにより、tzdata パッケージには各リリースに NEWS ファイルが含まれるようになり、タイムゾーンデータの変更に関する詳細な説明が提供されるようになりました。その結果、変更内容を詳細に確認できるようになります。ユーザーは、含まれている NEWS ファイルを確認して、更新の変更内容を把握できます。
Jira:RHEL-105043[1]
メトリクスロールが Apache Spark メトリクスの収集とエクスポートをサポートするようになりました
以前は、ユーザーはメトリクスロールを使用して Apache Spark メトリクスを直接収集またはエクスポートすることはできませんでした。今回のアップデートにより、rhel-system-roles パッケージは Apache Spark からメトリクスを収集および更新する機能をサポートします。次の 2 つの新しいブールパラメーターが導入されました。
-
metrics_into_spark: false これにより、Spark へのメトリクス値のエクスポートが有効になります。 -
metrics_from_spark: false これにより、Spark からのメトリクスの収集が有効になります。
Spark からメトリクスを取得し、メトリクス情報を Spark に送信できるようになり、Spark ワークロードの統合および監視機能が向上しました。