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 (TID) を取得する直接的な方法がありませんでした。新しく実装された pthread_gettid_np 関数は、_GNU_SOURCE が定義されているときに <pthread.h> で宣言されます。この関数により、sched_setattr を使用するアプリケーションなど、TID を必要とするアプリケーションが、pthread_t ハンドルから直接 TID の値を取得できるようになりました。
その結果、アプリケーションは、pthread_t ハンドルから TID を取得した後に、TID を求める関数を使用できるようになりました。これにより、互換性が向上し、スレッド管理が簡素化されます。
inet_ntop と inet_pton に対する glibc の要塞化のサポートが追加されました
以前は、glibc の API である inet_ntop と inet_pton に、Source Fortification のサポートが含まれていませんでした。そのため、コンパイラーがプログラムを実行する前に一部のバッファーエラーを検出できませんでした。
この更新により、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 をターゲットとする場合に、このオプションを正しく使用できませんでした。
この更新により、-fpatchable-function-entry オプションを ppc64le で使用して ELFv2 ABI 用のプログラムを作成できるようになりました。これにより、NOP が正しく配置されるようになり、このプラットフォーム上でビルドするユーザーにとっての互換性が向上しました。
Jira:RHEL-75806[1]
llvm-toolset が LLVM 20 にリベースされました
llvm-toolset が LLVM 20 に更新されました。これにより、C、C++、および Rust のワークフロー全体にわたり、コード生成の改善、パフォーマンスの最適化、言語フロントエンドとライブラリーサポートの拡張が提供されます。このリベースに伴い、RHEL 内の依存コンポーネントとの整合性も確保されています。これには、rust、annobin、bcc、bpftrace、qt5-qttools、および mesa のリビルドが含まれます。ビルドは llvm-20.1.8-3.el9 で検証済みです。
主な変更点は次のとおりです。
-
ppc64leの修正を含むバックエンドの改善 - 全般的なパフォーマンスと信頼性を向上させるために、Clang および LLVM パスの最適化と診断機能を強化
- LLVM 20 との互換性を確保するために、関係各所が連携してパッケージを再ビルドすることにより、ツールチェーンエコシステムを更新
- このストリームの ARM および MIPS に関するアップストリームの方針に従って、古いターゲットの非推奨化を継続
複数の動的リンカー名前空間を持つアプリケーションをデバッグするための _r_debug 拡張のサポートが改善されました
glibc パッケージに、複数の名前空間をサポートするために、バックポートされた _r_debug 拡張が含まれるようになりました。以前は、実行中のプロセスにアタッチしたり、コアダンプを分析したりするときに、アプリケーションが dlmopen または監査モジュールで複数の名前空間を使用している場合、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 で収集できるようになりました。
glibc に IBM Z z17 の初期サポートが追加されました
glibc の動的ローダーが強化され、IBM z17 CPU またはその固有機能の検出がサポートされるようになりました。その結果、IBM z17 向けに最適化されたライブラリーが /usr/lib64/glibc-hwcap/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 が安定版になりました。これは、大幅な言語変更を可能にするメジャーオプトインリリースであり、これまでにリリースされた最大のエディションです。
-
2024 エディションでは
letチェーンを活用できます。これにより、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 ワークロードの統合および監視機能が向上しました。